Microkernel


这几周发现常去的一些网站上关于 microkernel 的话题不约而同地热了几分,甚是奇怪,莫非部分原因是最近 Apple 老是跳来跳去?

说详细一点,好像也确实也是从OS X,进而 Mach 牵扯出来的话题,故事的大背景有旷日持久的论战和纠葛不清的业界实践,这本身就算一出戏,何况还有像 Linus vs. Tanenbaum 这样的蒙太奇桥段。

OSNews 上 Diego Calleja 有篇文章 Why Monolithic Kernels Aren’t the End of the World ,对应 Thom Holwerda 的 Why I Like Microkernels,两篇文章都不是技术性很强的讨论。鄙人同意前者,因为强调恪守 microkernel 的框框的结果是至今没有没有一个可以令人信服的实现,我自己的观点一直是,不能实现的理想等于没有理想--也是基于同一个道理,我觉得 Google 进入中国采取的“顺从”措施可以理解--有时候革命并不总是好过改良,要取得进步也不意味着不能妥协。搬到现在我说的话题里,就是:是不是好的设计跟是 microkernel 还是 monolithic kernel 没有血统关系。Microkernel 所“固有(?)”的优势比如安全,稳定,模块化和易维护,并不是 monolithic 就不可企及的特性,而糟糕的设计同样可以让 microkernel 变成一无是处的四不像。有的人花20年时间用口水证明 monolithic kernel 不会有好的设计,另有一些人则用 20 年的时间动手来改进 Solaris 和 Linux 内核的结构,你觉得哪种做法更有建设性?现在已经有 kernel module,有FUSE,有 user-space driver framework 等等一系列尝试,加上 udev, klibc 或者 libusb 等等试验,Linux 正把一部分功能移到用户空间,当然,我们恐怕永远看不到一个最终变成了 microkernel 的 Linux 内核,不过不断前进,在实践中检验,这总是好的。

相比之下,microkernel 在业界的实践并不总是像理论研究的时候说得那般简单而又有优势,而且有时候人们的“以为”和实际实现常常有差别

Mach,Minix,L4 ,QNX --什么?Symbian OS ?鬼才知道--可能是 microkernel 在业界比较 solid 的事实存在。不过我们看看,Avie Tevanian 领导下的 Apple 也没有死板地把僵硬的概念引入 OS X,就像 ADC 在 Porting UNIX/Linux Applications to Mac OS X 里那样说的“The kernel is not a pure microkernel implementation, since the address space is shared with the BSD portion of the kernel and the I/O Kit.”;Hurd 可能是唯一一个构建在 L4(come on,nano-kernel?)上的接近产品的作品,可是连它自己都还没有得到大规模使用的机会;QNX ?我们怎么证明一个 closed source 的东西,Nucleus,说得和做的是一样的呢?

最后一个想法是,沿用并改良 legacy 本身也是一种极大的创新,这种行为并不因为没有使用 microkernel 就显得落后或者不好不酷不牛X,其需要的聪明才智和付出的努力并不亚于考察 microkernel 是否可用以及把 microkernel 移植到现有系统中。另外嘛,其更大的积极意义还在于对已付出的社会资源的节约。

我自己当然尊重并总是欣喜地关注各种探讨和实践,这些过程总能丰富知识,带来闪光的新想法进而带动现实世界的发展--只要不变成口水仗和毫无意义的指责这指责那就好。我们期待能和 Mach 这样的例子一样,涌现更多的好玩故事或者传奇:项目的 lead developer,Richard Rashid 1991年加入 Microsoft,在很多 Microsoft Research 的top-level 位置上待过,另外就是前面提到的 Avie Tevanian。

最后还有一个是 Apple Matters:How Long Will Apple Keep the MACH Microkernel? 这篇文章显得过于幼稚,漏洞多到像小马哥的风衣,权且一笑 ;-)

[tags]os, microkernel, os x, mach, qnx, mimix, l4[/tags]