Linux 为什么还要坚持使用宏内核?

所以归根到底,决定一款产品是否成功的要素不仅仅取决于它的设计,也在于它的实现

计算机领域往往经过完善设计的产品最终结果都是失败了,像UNIX赢了Multics,设计很好的Lisp并没有C语言流行, 又像同设计OSI的愿景最后由TCP/IP协议完成

Worse Is Better 就是说的这个道理


linux kernel在发展过程中,形成了自己的工程方法论,注定无法向微内核方向演化

kernel 强调不断翻新,轻视特征和实现的稳定性

例如,没有固定的api,甚至源代码级的固定api也不允许存在

内核内部子系统接口变动是家常便饭。提倡厂商将驱动合入内核以便于跟上变动,跟不上变动的子系统和驱动被kernel维护者抛弃被认为是很正常的

想想看,如果子系统必须要随着同版本的整个系统一起编译,谁还愿意设计成分离地址空间和通过ipc 通讯的工作模式

总的说来,kernel 开发的思想是将软件系统看做动态变化的生物,而非完美设计的机器。争取通过日常工作流程,自然地发现问题,清理陈疴

微内核思想来自学术界,想象的操作系统各部分能够分隔清楚,接口定义良好,这和获得很大成功的kernel实践经验格格不入

最后,linux kernel 很成功,没有改变基本模式的动力