Living in the past
In a recent blog I talked about a paper our competitors at VirtualLogix had written and presented at the IEEE Consumer Communications and Networking Conference last January. The paper compares what the authors call the “hypervisor” and “micro-kernel” approaches to virtualization. They present benchmark results using their VLX system and our OKL4 as representatives of each category.
In the previous blog I explained how their benchmarking approach was flawed in several ways, and nothing useful can be learned from the results. Moreover, I explained that they perform a classical apples-vs-oranges comparison (without alerting the reader to the fact). In a word: the results they publish are rubbish.
I promised a followup looking at some of the (many) other defects in that paper. So, today I’m looking at what they say about microkernels.
In short, their description of microkernels presents a 1980’s view, and is completely out of touch with the last 15+ years of operating-systems research. This is like using a Ford Model T to represent cars, while the Prius is parked outside.
Who am I to say that, you may wonder? After all I’ve only been active in the area for a mere 15 years, when Michel Gien, one of the authors of that paper (and co-founder of VirtualLogix) was a founder of Chorus Systèmes, a company that started building microkernels almost 30 years ago? As the paper explains, the Chorus engineering team founded VirtualLogix in 2002. (In fact, they founded Jaluna, the company renamed itself VirtualLogix in 2006.) So, having been doing microkernels for 30 years, shouldn’t they know them?
Maybe the 30 years are the problem. The view of microkernels presented in the paper corresponds very well to that of the “first-generation” microkernels from the 1980s, of which Chorus and CMU’s Mach are the best-known representatives. By the early 1990s, those microkernels were generally known to lead to poorly-performing systems. As a result, the whole microkernel concept got a bad name, as people believed that the performance problems were an inevitable result of microkernel-based designs.
However, in 1993 (“only” 15 years ago), Jochen Liedtke showed that this conclusion was utterly wrong. He demonstrated that the poor performance of first-generation microkernels was a result of poor design and implementation of those systems. He showed how a well-performing microkernel must be built. And he provided a constructive proof: his prototype (then called L3) of what is now known as the L4 microkernel family, which became the prime representative of second-generation microkernels, and the benchmark against all others are still measured today.
L4 didn’t beat previous kernels by a mere 10%. Not even by a factor of two. It beat them by a staggering order of magnitude: Mach by a factor of 20, and Chorus by a factor of 10! And this was published in the toughest OS conferences of all, the ACM Symposium on Operating Systems Principles (SOSP), whose reviewers are the world experts and not easily fooled. In fact, the performance demonstrated by various versions of L4 has never been beaten to this day, and referred to as “the speed of light” by researchers building competing systems!
Given those facts, we can safely rule out Chorus as a representative of the state of the art in microkernels, and everyone who thinks of microkernels in Chorus terms is clearly out of touch. Yet, what the VirtualLogix paper says about microkernels is a perfect match to Chorus, while totally at odds with the well-published principles of L4.
Interestingly, the VirtualLogix folks actually cite one of Liedtke’s papers (their reference 16) where Liedtke very precisely and lucidly describes the principles behind second-generation microkernels. It is utterly baffling how they can provide a description of microkernels that is so at odds with the very paper they cite.
What Liedtke’s paper describes is what is nowadays considered the standard definition of a microkernel (check wikipedia if you don’t believe me), also known as the minimality principle of microkernels:
A concept is tolerated inside the microkernel only if moving it outside the kernel, i.e., permitting competing implementations, would prevent the implementation of the system’s required functionality.
If you look at the claimed characteristics of microkernels in the VirtualLogix paper, you’ll find that almost all of them violate this definition. In other words, what is described there may be Chorus or Mach, but not what is since the mid ’90s the accepted notion of a microkernel.
Btw, there’s another interesting claim in that paper: “… all projects to re-architect Unix along a micro-kernel approach failed so far…” If I was QNX, I’d be pretty upset about that statement. They have been successfully marketing a Posix-compliant (that’s the general definition of Unix-like) system that is implemented as a multi-server system on top of a microkernel. For over 20 years. Calling QNX, with tens of millions of systems deployed, a failure of a microkernel system seems a bit strong. But it ain’t my problem, of course.
Similar things could be said about Symbian OS, except that they haven’t been going for quite that long. But they are deployed in the hundreds of millions, almost as widely as OKL4! Do you consider that a failure?
This blog is getting long, so I’ll stop before I bore you. I’ll do a more detailed rebuttal of their claimed microkernel properties soon…