



关于操作系统内核设计的书一般内容都庞大复杂,细致精微,读起来相当费劲。比起一般的技术书籍来说,阅读的过程痛苦程度高了很多。其实最要命的是将这些章节一一读完弄懂之后,我们稍有的成就感转瞬即逝,另一个问题接踵而来:我搞明白了这些东西,究竟能做什么用?要知道满大街的程序员,会被拉去开发操作系统的,一百个里边也许都没有一个。
操作系统是一种基础设施,在信息化的世界里,它就像电力和自来水一样。现在有不少呼声,我们要开发自己的操作系统。然而每次真正有适合PC端的操作系统开发出来,立刻会被网上一大批人一边倒地鄙视:“抄袭”、“拿Linux改个名就说是自己的”、“骗科研经费”等等说法不绝于耳。其实并非这些人真的体验过新的操作系统,也不是他们真的了解这些开发过程的容易或艰辛。而是每个人心里都很清楚,无论新的操作系统做得有多好,它都不会像Windows这样在千万个用户的电脑上流行起来。所以他们的鄙视之言永远都不会得到事实的反驳,他们可以放心大胆地在网络言论上通过“喷”来轻松地显示自己的睿智和存在感。
这是因为操作系统并非一个孤立的东西。就像自来水厂绝非一处水源加一个处理工厂。自来水厂的核心竞争力反而不是水源,而是那千万根连通到客户家中的水管。我很容易就能新找一处水源,建设一个自来水厂。但是谁家愿意为我把自己家的水管敲掉换成我的?
在漫长的时间里,我们已经习惯了使用Windows上的软件。就算现在有一款更好的操作系统,但它无法运行我需要的软件,我也会毫不犹豫地拒绝它。假设这款操作系统能完美地兼容Windows的软件,又会面临另一个问题:既然开发者都知道只需要给Windows开发软件,就能兼容另一个操作系统,那么开发者就永远只会给Windows开发软件了。本来因为软件数量不足而兼容Windows软件,然后又因此而导致软件数量更少了。这成为一个恶性循环!Windows只要略微升级,改变特性,这款新的操作系统也得随之升级,否则新版的软件又无法支持。命运完全悬于人手。
所以操作系统能形成垄断,并非因为技术有多高明。说什么Windows有几千万行代码所以永远也不能超过那完全是扯淡。难道说越臃肿的东西就越是强大?Windows的几千万行代码的规模反而有可能是历史的不断积累,垃圾代码无法清除(为了兼容旧版软件和扯不清的部门利益)而导致的。从头开发一个新的操作系统反而轻松很多。问题是操作系统天然属于占坑型的软件。一旦占住了这个坑,除非占坑者主动放弃,否则垄断很难被攻破。这不是一个技术问题。PC上的Windows如此,移动平台上的Android与iOS也如此。
那为什么我们还要学习它?
因为我们可以使用它,但不能任它忽悠我们,即便它像自来水一样便宜(目前Windows依然贵得离谱,这是当代奇葩之一),或者干脆就是免费的(比如Android)。笔者倾向于操作系统会越来越便宜,最终变成免费或者接近于免费的,经济上应该不会成为一个问题。但我们必须了解它,熟知它的问题。就像我们得了解我们每天喝的自来水,里边有漂白粉,甚至抗生素!
只有真正明白学了做什么用,才有可能有学习的动力,才有可能真正学好。如今要开发自主版权的操作系统的呼声,很大一部分来自安全的需要。没有人愿意让自己安全的命脉攥在别人的手里。其实我反而觉得,想要真正把握自己安全的命脉,与其等待自己开发的操作系统去夺了已经被占的坑,不如充分地了解现在占坑的操作系统是怎么运作的。一个操作系统不管多么封闭多么神秘,它总归是一堆二进制代码。它的执行过程是可以被分析被监控的。至于有人说缺少源代码,事实上国家是可以要求微软提供源代码的。问题倒在于分析源代码的人:如果你不懂操作系统,那么纵然三千万行源代码摆在你面前,里边堂而皇之地写上一百个漏洞,你又能找出来一个吗?
学习这些前辈们的作品,读者不但能了解前辈们的英明睿智,还能发现他们的局限。希望读者不要做一个单纯的膜拜者和盲从者。
如果你觉得Windows的64位版驱动要验签名了,内核有PatchGuard了,所以更安全了;如果你觉得你用的是“水果”,不越狱所以固若金汤;如果你觉得Android不root就是安全的,我只能说你还处于蒙昧无知的状态。如果你感觉到了哪里可能会有漏洞,而你可以一一填补,说明你混沌初开了。如果你像某些大公司的系统设计员一样,忽然冒出一个前无古人的想法,认为这样可以一劳永逸地解决安全问题,说明你开始了独立思考,可以着手安全问题了!如果你终于回到现实,甘愿像被缚的普罗米修斯一样,今夜痊愈,明日又开始新一轮的开膛破肚,永无休止,那你终于走上了正途!
想要开始这个奇妙的旅程,就打开本书,认真了解Windows内核设计的每个细节吧。我谨以此文,祝贺陈老师,祝贺《Windows内核设计思想》一书出版。
畅销书《天书夜读——从汇编语言到Windows内核编程》
《寒江独钓——Windows内核安全编程》作者谭文
2015年1月13日