Multics Software Features
started 1/30/2002; 12:31:41 AM - last post 2/1/2002; 11:05:28 AM
|
|
Ehud Lamm - Multics Software Features
1/30/2002; 12:31:41 AM (reads: 1992, responses: 3)
|
|
|
Oleg - Unix Design Philosophy
1/31/2002; 2:15:46 PM (reads: 1012, responses: 1)
|
|
Multics is a good background for (modern) Unix philosophy.
Let me mention similarities first. I knew that Unix borrowed quite a
lot from Multics: hierarchical file system, virtual memory, dynamic
linking, memory-mapped files and i/o. Unix is still borrowing:
logical volume management with on-line reconfiguration, and access
control lists are the recent additions to Unix from Multics. What I
didn't know that the concept of a shell with output redirection and
backquote substitution, as well as the names of popular commands such
as 'ls', 'cp', 'pwd', 'mv' were borrowed from Multics as well. BTW,
Multics used characters '[' and ']' rather than backticks for command
result substitution -- just like Tcl does. I also didn't know that
Multics has been running well into mid 80s.
Two quotations from a web page http://www.multicians.org/unix.html
illustrate fundamental differences between Multics and Unix:
"I [Tom Van Vleck, a major Multics developer] was working
for MIT in those days, and one thing I did was to organize an MIT
PDP-11 users' group and encourage them to look into Unix. The idea of
a free, non-vendor-supported operating system was new to them."
Although this sounds like writings of OpenSource proponents, the
described event took place in 1973.
"We went to lunch afterward, and I remarked to Dennis [Ritchie] that
easily half the code I was writing in Multics was error recovery
code. He said, "We left all that stuff out. If there's an error, we
have this routine called panic, and when it is called, the machine
crashes, and you holler down the hall, 'Hey, reboot it.'"
It appears (e.g., from his recent projects such as Plan9 and Inferno)
that Dennis Ritchie no longer thinks that way. Nevertheless, I have
not heard of a modern Unix/Linux developer taking such serious approach to design as described in http://www.multicians.org/andre.html
Thank you for posting the Multics references!
|
|
Ehud Lamm - Re: Unix Design Philosophy
1/31/2002; 2:27:19 PM (reads: 973, responses: 0)
|
|
And I thought the Unix philosophy is all about little languages, utilities and the pipeline...
|
|
Oleg - Re: Multics Software Features
2/1/2002; 11:05:28 AM (reads: 889, responses: 0)
|
|
It appears that the idea of little languages and programming by
combination of existing tools worked better in Multics. As I
understand, a shell command was a (compiled) PL/1 procedure -- and any
PL/1 procedure that takes string arguments can be a shell command.
If we want to invoke a UNIX system command 'cp' to copy one file into the other, we have to write something like the following
char * from_name = "foo.txt";
char * bar_name = "bar.txt";
pid_t pid;
if( pid = fork() )
{ /* in the parent process */
if( pid == (pid_t)(-1) )
perror("fork failed"), failure();
for(;;) {
if( waitpid(pid,0,0) == (pid_t)(-1) && errno == EINTR )
continue;
else
break;
}
}
else
execlp("cp", "cp", from_name, bar_name, (char*)0),
perror("exec failed"), _exit(127);
We could use a 'system' function but then we need to take care to form
the command line and to quote all potentially troublesome or dangerous
characters in from_name and bar_name.
As I understand, in Multics we could simply write something like
DCL cp entry(char (*),char(*));
CALL cp(from_name,to_name);
We could invoke system or other commands as regular PL/1 procedures.
I was especially impressed with dynamic linking capabilities of
Multics. You can write a procedure 'foo' that calls another procedure
(say, 'bar'), compile 'foo' and invoke right away. No need to do any
linking. If 'foo' eventually tries to invoke 'bar', the system will
search for it. If found, the code of 'bar' will be mapped into the
'foo' process, and the execution continued as if 'bar' were a local
procedure. If 'bar' cannot be located, foo is suspended and the user
is notified. The user may choose to write procedure 'bar', compile it, and
continue the execution of foo. Multics also offers static linking
(called bundling).
|
|
|
|