I’ve been reading the introductory “Multics Concepts and Utilization”
over at Bitsavers. Multics (the “MULTiplexed Information and Computing
Service”) was, for its time, an extremely ambitious operating system
project. It was first introduced in 1965, in the form of a series of
papers at the AFIPS Fall Joint Computer Conference of that year
Of course, it took far too long (7 years) to reach production quality.
In that time, a small group of researchers at AT&T Bell Labs grew tired
of waiting, and decided to create their own, less ambitious system,
which they called “UNIX” as a tongue-in-cheek homage to “Multics”. And
the rest, as they say, is history.
But, nevertheless, Multics remained an influential system. There are
even some present-day fans of it gathered at <http://multicians.org/>.
Apparently they have got the OS booting on an emulator of the original
GE 645 hardware. Though it was mostly written in a high-level language
(PL/I), Multics was never a portable OS; to support its advanced
virtual-memory and security features, it required special processor
hardware support which was not common in those days.
Even today, Multics has some features which can be considered
innovative and uncommon. It may be true that, for example, SELinux can
match all of its security capabilities and more. But some aspects of
its file-protection system seem, to me, to make sharing of data between
users a bit easier than your typical Linux/POSIX-type system.
For a start, there seems to be no concept of file “ownership” as such.
Or even of POSIX-style file protection modes (read/write/execute for
owner/group/world). Instead, all file and directory access is
controlled via access-control lists (ACLs). Directories have a
permission called “modify”, which effectively gives a matching entity
(user, group, process) owner-type rights over that directory; except
that more than one entity can have that permission at once. Thus, a
group of users working on a common project can all be given this
“modify” access to a shared directory for that project, allowing them
all to put data there, read it back again, control access to it, delete
it etc on a completely equal basis. Contrast this with POSIX/Linux,
where every file has to have exactly one owner; even if they create
that file in a shared directory, it still gives the creating user a
special status over that file, that others with write access to the
containing directory do not have.
(Multics also offers a separate “append” permission, that allows the
possessor to create an item in a directory, without having the ability
to remove an item once it’s there.)
One radical idea introduced in Unix was its profligate use of multiple
processes. Every new command you executed (except for the ones built
into the shell) required the creation of a new process, often several
processes. Other OSes tended to look askance at this; it seemed somehow
wasteful, perhaps even sinful to spawn so many processes so readily and
discard them so casually. The more conventional approach was to create
a single process at user login, and execute nearly all commands within
the context of that. There were special commands for explicitly
creating additional processes (e.g. for background command execution),
but such process creation did not simply happen as a matter of course.
Gradually, over time, the limitations of the single-process approach
became too much to ignore, and the versatility of the Unix approach won
over (nearly) everybody. Multics, however, is of the old school. More
than that, the process even preserves global state, including static
storage, in-between runs of programs, and this applies across different
programs, not just reruns of the same one. For example, in FORTRAN,
there is the concept of a “common block”. If you run two different
programs that both refer to the same common block, then the second one
will see values left in the block by the first one. To completely
reinitialize everything, you need to invoke the “new_proc” command,
which effectively deletes your process and gives you a fresh one.
One common irritation I find on POSIX/Linux systems is the convention
that every directory has to have an entry called “.”, pointing to
itself, and one called “..”, pointing to its parent. This way these
names can be used in relative pathnames to reach any point in the
directory hierarchy. But surely it is unnecessary to have explicit
entries for these names cluttering up every directory; why not just
build their recognition as a special case into the pathname-parsing
logic in the kernel, once and for all? That way, directory-traversal
routines in user programs don’t have to be specially coded to look for,
and skip these entries, every single time.
Multics doesn’t seem to have this problem. An absolute pathname begins
with “>” (which is the separator for pathname components, equivalent to
POSIX “/”), while a relative pathname doesn’t. Furthermore, a relative
pathname can begin with one or more “<” characters, indicating the
corresponding number of steps up from the current working directory.
Unlike POSIX “..”, you can’t have “<” characters in the middle of the
pathname, which is probably not a big loss.
It is interesting to see other features which are nearly, but not
quite, the same as, corresponding features in Unix. For example, there
is a search path for executables, to save you typing the entire
pathname to run the program. However, this does not seem as flexible as
the $PATH environment-variable convention observed by Unix/POSIX
shells. In particular, it does not seem possible to remove the current
directory from the search path, which we now know can be a security
Another one is the concept of “active functions” and “active strings”.
These allow you to perform substitutions of dynamically-computed values
into a command line. However, they are not as general as the Unix/POSIX
concept of “command substitution”, where an entire shell command can
supply its output to be interpolated into another command. Instead of
having a completely separate vocabulary of “active functions” which can
only be used for such substitutions, Unix/POSIX unifies this with the
standard set of commands, any of which can be used in this way.
There are other features of Multics that others more familiar with it
might want to see mentioned (the single-level store concept, where
“everything is a memory segment”, versus Unix “everything is a file”?
I/O redirection based on “switches”—symbolic references to files,
versus Unix integer “file descriptors”?). But then, this long-winded
essay would become even longer-winded :). So if you are interested in
this particular piece of computing history, feel free to follow up the
In summary, Multics is very much a museum piece, not something you
would want to use today for regular work—not in its original form. But
I think there are still one or two ideas there that we could usefully
copy and adapt to a present-day OS, particularly a versatile one like
'Partnering with Adafruit, Microsoft has announced the Windows IoT
Core Starter Kit. The $75 kit comes comes with an SD card preloaded
with Windows 10 IoT. According to the Raspberry Pi blog: "The pack is
available with a Pi 2 for people who are are new to Raspberry Pi or
who'd like a dedicated device for their projects, or without one for
those who'll be using a Pi they already own. The box contains an SD
card with Windows 10 Core and a case, power supply, wifi module and
Ethernet cable for your Pi; a breadboard, jumper wires and components
including LEDs, potentiometers and switches; and sensors for light,
colour, temperature and pressure. There's everything you need to start
-- source: http://hardware.slashdot.org/story/15/09/28/1949211
Looks like it wasn't vaporware after all. But I'm not gonna replace
the Linux on my RPis. Especially not since I can have a full-blown
Linux OS on it rather than some stripped down Windows version. :-)
Dept. of Computer Science
University of Waikato, NZ
+64 (7) 858-5174
“Why are my laptop batteries always dying in a year or two,
while the batteries of space probes and satellites keep working
year after year. If we are to believe Battery University, the
cause is me charging the battery whenever I have a chance, and
the fix is to not charge the Lithium-ion batteries to 100% all
the time, but to stay below 90% of full charge most of the
“Is there a good and generic way with Linux to tell the battery
to stop charging at 80%, unless requested to charge to 100%
once in preparation for a longer trip?”
LibreSSL (a fork of OpenSSL created after the security scandals over
the latter) has now got rid of all versions of the protocol called
“SSL” (“Secure Sockets Layer”)
The official name of current versions of the protocol used for secure
HTTP connections (among other things) is “TLS” (“Transport Layer
on “Freedom To Tinker”, which is part of my regular reading, talks
about the potential implications of more widespread use of ad-blocker
plugins in Web browsers. Not quite triggering an “arms race” of
ad-blocker-blockers, and so on:
If the use of these plugins becomes ubiquitous, only one thing
would have to change – the publishers would have to insert the
line of code in some way on the server side, and the ad would
just look as though it came with the rest of the page. At that
point, the browser plugin is useless.
What would be the knock-on effects of this? The ad companies no
longer have any way to track users as they move around the web.
Absent some way on the ad companies’ part to implement a
cross-site evercookie (which would be considered unethical and
would quickly be blocked by browser authors if discovered), the
ad companies will no longer have a way to connect users on one
site to users on another. The ads you’d see on a given site
could be based solely on the interactions you’ve had with that
one site – which would be a boon to privacy.
So rather than becoming worse, the ads would actually take on a less
The unique selling point is the special LED tool that, when plugged in
to one end, lights up the other end. So you can tell where your cables
run without having to colour-code or label them.
But is it worth the cost?
I want to copy an extract from a .pdf file. When I select some text to
copy and paste it puts each word followed by two spaces on a separate line.
Do you know a better way to extract some text from a .pdf?
Alternatively what is an easy way to remove the space and EOL to
reformat the text in a readable format?
I am sure there are several, but I would appreciate a really easy one.
A half-hour talk from “Mr X11” himself, Keith Packard
* The original MIT X Consortium was dominated by the proprietary UNIX
workstation vendors, who were all trying to lock in their own
customers into their own ways of doing things. These “UNIX Wars” led
to the whole workstation market imploding, letting Microsoft take
over with Windows NT.
* XFree86 was, in the beginning, like a “rebel alliance”, trying to
bring X11 to commodity PC hardware. They were shunned for many years
by the X Consortium. Of course this changed after all the UNIX
vendors went under. Later, the revitalized X Consortium became a home
for the X11 developer community which left the inflexibilities of the
XFree86 corporate organization behind.
* Over the last decade, the X server has become less and less of an
operating system in its own right. Hardware-specific graphics drivers
have been moved into the Linux kernel, leaving the X userland code to
focus on the hardware-independent implementation layers.
* Programs written to work with X11 nearly thirty years ago still work
today. Even with all the reorganization and rewrites, X11 still
remains fully backward-compatible. Which is more than Microsoft
Windows can manage.
* Keith made it clear he prefers GPL-style (copyleft/sharealike)
licences to MIT/BSD style ones. Net contributors of code tend to
prefer the former, while net consumers of code (those who don’t want
to give back to the community) tend to favour the latter. In other