Here is our next installment of The Daemon, the GNU and the Penguin, by Dr. Peter Salus, Chapter 19: "Tanenbaum and Torvalds".
For the observant, I made a mistake in numbering earlier, calling Excursus: The GPL and Other Licenses Chapter 18, and that threw off the numbering. I have now corrected the error. I have also set up a permanent page for Dr. Salus' book, with all the chapters linked, with their titles, so you can find all the chapters easily. Just look for Salus Book as a permanent link on the left any time you wish to read or check a fact from the book.
The Daemon, the GNU and the Penguin
~ by Dr. Peter H. Salus
Chapter 19. Tanenbaum and Torvalds
Linus posted his queries, his information and his
work on comp.os.minix beginning in mid-1991. But
on 29 January 1992, Andy Tanenbaum posted a note
with the line:
Subject: LINUX is obsolete1
After a few introductory paragraphs, Tanenbaum got to his
real criticism of Linux:
As a result of my occupation, I think I know a bit about where operating systems
are going in the next decade or so. Two aspects stand out:
Microkernel vs Monolithic System
Most older operating systems are monolithic, that is, the whole
operating system is a single a.out file that runs in 'kernel mode.' This
binary contains the process management, memory management, file system
and the rest. Examples of such systems are UNIX, MS-DOS, VMS, MVS,
OS/360, MULTICS, and many more.
The alternative is a microkernel-based system, in which most of the OS
runs as separate processes, mostly outside the kernel. They communicate
by message passing. The kernel's job is to handle the message passing,
interrupt handling, low-level process management, and possibly the I/O.
Examples of this design are the RC4000, Amoeba, Chorus, Mach, and the
While I could go into a long story here about the relative merits of the
two designs, suffice it to say that among the people who actually design
operating systems, the debate is essentially over. Microkernels have
won. The only real argument for monolithic systems was performance, and
there is now enough evidence showing that microkernel systems can be
just as fast as monolithic systems (e.g., Rick Rashid has published
papers comparing Mach 3.0 to monolithic systems) that it is now all over
but the shoutin'.
MINIX is a microkernel-based system. The file system and memory
management are separate processes, running outside the kernel. The I/O
drivers are also separate processes (in the kernel, but only because the
brain-dead nature of the Intel CPUs makes that difficult to do
otherwise). LINUX is a monolithic style system. This is a giant step
back into the 1970s. That is like taking an existing, working C program
and rewriting it in BASIC. To me, writing a monolithic system in 1991 is
a truly poor idea. . . .
Linus responded the same day with: "Well, with a subject like this, I'm afraid I'll have to reply.
Apologies to minix-users who have heard enough about linux anyway. I'd
like to be able to just 'ignore the bait', but ... Time for some
serious flamefesting!" and
a long (somewhat intemperate, but this is a 23-year old student) response.
There was a good deal of going back and forth, and even Brian
Kernighan put in a few lines. But the result was that Andy remains to
this day a committed microkernel devotee and Linus has continued with
a largely monolithic system. (Of course, this generalization is
inaccurate, but it serves.)
And, on a certain level, there is no question in my mind but that
Andy's position is right: microkernels are "better" than monolithic
systems. But, on the other hand, I find both Andy's original
posting unnecessarily rebarbative and Linus' "serious flamefesting"
Over a decade later, I find it had to discern any anger or resentment
on either side. I asked Andy about the exchange, but he just
shrugged me off. "In a straight test," he later remarked, "Linux
loses by about 8% in speed." That may well be true. But it's
not much of an epitaph.
However, I think the microkernel (as evidenced in Mach [and in the
Hurd], in Chorus, in Amoeba) is superior to the monolithic kernel,
as long as the message-passing is efficient.
I guess I'll now be subject to a flame war.
1A large collection of the correspondence -- or at
least that of the "major" contributors -- can be found
As I am interested in discussing this, I will refrain from
extensive citation. A version of much of the
discussion is available as Appendix A of Open Sources:
Voices from the Open Source Revolution (O'Reilly,
1999; ISBN 1565925823).
Dr. Salus is the author of "A Quarter Century of UNIX" (which you can obtain here, here, here and here) and several other books, including "HPL: Little Languages and Tools", "Big Book of Ipv6 Addressing Rfcs", "Handbook of Programming Languages (HPL): Imperative Programming Languages", "Casting the Net: From ARPANET to INTERNET and Beyond", and "The Handbook of Programming Languages (HPL): Functional, Concurrent and Logic Programming Languages". There is an interview with him, audio and video,"codebytes: A History of UNIX and UNIX Licences" which was done in 2001 at a USENIX conference. Dr. Salus has served as Executive Director of the USENIX Association.
This work is licensed under the Creative Commons
Attribution-NonCommercial-NoDerivs License. To view
a copy of this license, visit
or send a letter to Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.