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 not-yet-released Windows/NT.
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" inappropriate.

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 here. 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).