I thought this was stupid. Yes, it makes every single piece simple. But the interactions make it far more complex than it would be if many of the services were included in the kernel itself, as they are in Linux. Think of your brain. Every single piece is simple, but the interactions between the pieces make for a highly complex system. It's the whole-is-bigger-than-the-parts problem. If you take a problem and split it in half and say that the halves are half as complicated, you're ignoring the fact that you have to add in the complication of communication between the two halves. The theory behind the microkernel was that you split the kernel into fifty independent parts, and each of the parts is a fiftieth of the complexity. But then everybody ignores the fact that the communication among the parts is actually more complicated than the original system was -- never mind the fact that the parts are still not trivial.
That's the biggest argument against microkernels. The simplicity you try to reach is a false simplicity.
Linux started out much smaller and much, much simpler. It didn't enforce modularity, so you could do a lot of things more straightforwardly than you ever could with Minix. One of the original problems I had with Minix was that if you had five different programs running at the same time and they all want to read five different files, the tasks would be serialized. In other words, you would have five different processes sending requests to the file system: "Can I please Read From File X?" The file system daemon that handles reading takes one of them and sends it back, then takes the next one and sends it back, and so on.
Under Linux, which is a monolithic kernel, you have five different processes that each do a system call to the kernel. The kernel has to be very careful that they don't get: confused with each other, but it very naturally scales up to any number of processes doing whatever they want. It makes Linux much faster and more efficient.
Another problem with Minix was that you got the sources but the licenses didn't allow you to do a lot. Take someone like Bruce Evans, who performed major surgery on Minix and made it much more usable. He couldn't just incorporate his improvements. He was restricted to only making patches. From a practical standpoint that's a complete disaster. He couldn't legally make a bootable image available to people so they could easily upgrade. So users had to take a multiple-step process to even get a usable system, which was horribly impractical.
The only time I ended up communicating with Andrew Tanenbaum was in early 1992. Imagine logging on one blizzardy morning and running across the unedited version of this:
From: ast@cs.vu.nl (Andy Tanenbaum)
To: Newsgroups: comp.os.minix
Subject: LlNUX is obsolete
Date: 29 Jan 92 12:12:50 GMT
I was in the U.S. for a couple of weeks, so I haven't commented much on LINUX (not that I would have said much had I been around), but for what it's worth, I have a couple of comments now.
As most of you know, for me MINIX is a hobby, something that I do in the evening when I get bored writing books and there are no major wars, revolutions, or senate hearings being televised live on CNN. My real job is a professor and researcher in the area of operating systems.
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:
1. 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. MINIX is a microkernel-based system.
The file system and memory management are separate
processes, running outside the kernel. The I/O
drives are also separate processes. LlNUX is a
monolithic style system. This is a giant step back
into the 1970's.
2. PORTABILITY
MINIX was designed to be reasonably portable, and has
been ported from the Intel line to the 680xO (Atari,
Amiga, Macintosh), SPARC, and NS32016. LlNUX is tied
fairly closely to the 80x86. Not the way to go.
Don't get me wrong, I am not unhappy with LlNUX. It
will get all the people who want to turn MINIX in BSD
UNIX off my back. But in all honesty, I would suggest
that people who want a **MODERN** *free* OS look
around for a microkernel-based, portable OS, like
maybe GNU or something like that.
Andy Tanenbaum ( ast@cs.vu.nl)
I knew I needed to defend my honor, so I wrote back:
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Subject: Re: LINUX is obsolete
Date: 29 Jan 92 23:14:26 GMT
Organization: University of Helsinki
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!
In article <12595@star.cs.vu.nl> ast@cs.vu.nl (Andy Tanenbaum) writes :
>I was in the U.S. for a couple of weeks, so I haven't commented much on LINUX (not that
>I would have said much had I been around), but for what it is worth, I have a couple of
>comments now.
>As most of you know, for me MINIX is a hobby,
something that I do in the evening when
>I get bored writing books and there are no major
wars, revolutions, or senate hearings
>being televised live on CNN. My real job is professor
and researcher in the area of
>operating systems.
You use this as an excuse for the limitations of
minix? Sorry, but you lose: I've got more excuses
than you have, and linux still beats the pants off
minix in almost all areas. Not to mention the fact
that most of the good code for minix seems to have
been written by Bruce Evans.
Re 1: You doing minix as a hobby-look at who makes
money off minix, and who gives linux out for free.
Then talk about hobbies. Make minix freely available,
and one of my biggest gripes with it will disappear.
Linux has very much been a hobby (but a serious one;
the best type) for me: I get no money for it, and it's
not even part of any of my studies in the university.
I've done it all on my own time, and on my own
machine.
Читать дальше