Francois-Rene Rideau fare@tunes.org
Mon, 16 Aug 1999 02:44:25 +0200

Dear Prof Shapiro,
   thank you for your e-mail.

> Whatever the "truth" about microkernels may be,
> a "glossary" isn't the right place for the discussion.
Thanks for your most adequate remark.
It seems our glossary has grown
into something much too much polemical,
and should be reorganized into a knowledge-base
with raw facts being well delimited from associated opinions.
We haven't invested in the technology necessary
to develop such a knowledge base,
having waited for TUNES to appear and provide this technology for too long.
Do you have any suggestion?

> At the very least the entry should give a definition
> before it engages in polemics.
> How about adding a definition?
Ok. Since I wasn't fully satisfied with the entry in FOLDOC,
I wrote the one below. What about it?
Can you either correct it, or point me to an existing satisfying definition?

Now, as far as polemics go, what is your take on microkernels?
Maybe you have pointers to articles that support or contradict
some of my opinions, and that I may link to?

Appended to this message is the text I prepended to the current entry.

Best regards,

[ "Far" | VN: Уng-V Bn | Join the TUNES project!   http://www.tunes.org/  ]
[ FR: Franois-Ren Rideau | TUNES is a Useful, Nevertheless Expedient System ]
[ Reflection&Cybernethics  | Project for  a Free Reflective  Computing System ]
My opinions may have changed, but not the fact that I am right.

PS: I invite Tunes members to proof-read the current entry
and the below text as well. My questions are also to you, guys.
Be careful not to include Prof. Shapiro in replies that only concern Tunes.

microkernel (also abbreviated K or uK) is
an approach to operating systems design
by which the functionality of the system
is moved out of the traditional "kernel",
into a set of "servers"
that communicate through a "minimal" kernel,
leaving as little as possible in "system space"
and as much as possible in "user space".
microkernels were invented as a reaction to traditional
"monolithic" kernel design,
whereby all system functionality was put in a one static program
running in a special "system" mode of the processor.
The rationale was that it would bring modularity in the system architecture,
which would entail a cleaner system, easier to debug or dynamically modify,
customizable to users' needs, and more performant.
The prototypical Microkernels is Mach, originally developed at CMU,
and used in some free and some proprietary BSD Unix derivatives,
as well as in the heart of GNU HURD.
MICROS~1 Windows NT is said to originally have been a microkernel design,
although one that with time and for performance reasons
was overinflated into a big piece of bloatware
that leaves monolithic kernels far behind in terms of size.
Latest evolutions in microkernel design led to things like
"nano-kernel" L4, or "exokernel" Xok.
At one time in the late 1980's and early 1990's,
microkernels were the craze in official academic and industrial OS design,
and anyone not submitting to the dogma was regarded as ridiculous.
But microkernels failed to deliver their too many promises
in terms of either modularity (see Mach servers vs Linux modules)
cleanliness (see Mach horror), ease of debugging (see HURD problems),
ease of dynamic modification (also see HURD vs Linux),
customizability (see Linux vs Mach-based projects),
or performance (Linux vs MkLinux, NetBSD vs Lites).
This led some microkernel people to compromise
by having "single-servers" that have all the functionality,
and pushing them inside "micro"kernel-space (WindowsNT, hacked MkLinux),
yielding a usual monolithic kernel under another name
and with a contorted design.
Other microkernel people instead took an even more radical view
of stripping the kernel from everything
but the most basic system-dependent interrupt handling
and messaging capabilities,
and having the rest of system functionality in libraries
of system or user code,
which again is not very different from monolithic systems like Linux
that have well-delimited architecture-specific parts separated
from the main body of portable code.
With the rise of Linux, and the possibility to benchmark
monolithic versus microkernel variants thereof,
as well as the possibility to compare kernel development
in various open monolithic and microkernel systems.
people were forced to acknowledge the practical superiority
of "monolithic" design according to all testable criteria.
Nowadays, microkernel is still the "official" way to design an OS,
although you wont be laughed at when you show your monolithic kernel anymore.
But as far as we know,
no one in the academic world dared raise any theoretical criticism
of the very concept of microkernel.
Here is our take at it.