“如果不能在一个月内写出操作系统,那你就是个笨蛋!” ——说这话的人似乎就是个疯子,不过这确实是我当年的心理感受。
01
伯克利大学播下的种子
上世纪70年代,我坐在伯克利的一间教室中,上巴特勒·兰普森教授的操作系统课。
当时的我不可能知道, 巴特勒·兰普森会获得1992年图灵奖,他的头上会笼罩上一堆耀眼的光环:
著名的XEROX PARC研发中心的创建者
第一个个人计算机Alto的研发者
激光打印机,WYSIWYG(所见即所得),以太网(Ethernet),局域网(Local Area Network)等重要发明的参与者。
我非常清楚地记得,兰普森在课上讲述了CTSS——世界上第一个分时操作系统——然后以他独特的方式问道:
“有没有人不能在一个月内写出CTSS?!”
没人举手。
我也不敢举手,因为我觉得如果你不能在一个月内写出操作系统,那你就是个笨蛋。
兰普森在我心里埋下了一颗种子。
02
去荷兰当教授
博士毕业以后,我面临一个选择:去工业界还是留在学术界?这时我想起了一件事:
有一年暑假,我去IBM实习(当然,是为了赚点钱),有一天我穿了一件颜色“不合适”的衬衫上班,我的同事告诉我这么穿是不对的,还提出了“改进建议”, 从那时开始,我就觉得不适合在企业界做事了。
我的妻子是荷兰人,于是我就和她一起移居到了荷兰,在阿姆斯特丹的Vrije大学教书。其中有一门课就是操作系统。
70年代Unix刚刚流行起来,AT&T最初把Unix和源码都提供给大学和科研机构,所以使用Unix进行教学是非常自然的选择。
当时John Lions写了一本非常知名的书《莱昂氏UNIX源代码分析》。
这本书真是一行一行地解释Unix源码,受到大家的热烈欢迎!
可AT&T有些“精打细算”的人不喜欢这样,他们觉得:让全世界的学生来“围观”伟大的Unix源码是个非常可怕的主意,于是 Unix V7附带了一个License : 不能把V7 用于教学!
我认为这可能是IT公司犯的最傻的错误!
我想起了兰普森说的一个月写个操作系统的话,我为什么自己不写一个呢?
03
操作系统的泥潭
我很喜欢阿姆斯特丹,这是一座宜人、宁静的城市,我很喜欢这里的天气,一年中大部分时间都是灰蒙蒙的,下着毛毛细雨,很适合在室内和温暖的电脑呆在一起。
我开始写一个和Unix V7兼容的操作系统,具体花了多长时间我有点记不清了,但是即将完成的时候,我和你们一样,遇到了一个难以复现的巨大Bug:它运行15分钟以后就会崩溃!
这真是让人大伤脑筋!无奈之下,我就写了一个具备跟踪调试功能的PC模拟器,让操作系统在这个模拟器中运行,每次崩溃,我就会查看最近的10万行指令,看看到底发生了什么。
PC模拟器花费了我相当多的时间,如果我有商业头脑的话,应该把它做成产品,因为这就是未来的VMWare啊!
终于有一天,我的操作系统可以完美地在模拟器上运行了,永不崩溃。
赶紧移到真正的硬件上执行,让我崩溃的是,它又开始间歇性地罢工了!
谁说一个月就能写个操作系统?!
就在我要放弃的时候,我的一个学生罗伯特告诉我:当Intel CPU变热的时候,会产生15号中断 。
而我并没有捕获这个中断,因为CPU手册上并没有提到它。
感谢罗伯特,他把我从泥潭中拉来出来,我只需要加上一小段代码,操作系统就可以稳定运行了。
我决定把操作系统叫做Mini UNIX ,简称Minix。
04
写书
Minix可以稳定工作以后,我就决定像Lions那样,写一本书,这样就Minix就可以用来教学了。
这本书的每一章都有三个部分:
1. 讲述操作系统每个组件的通用设计原则
2. 这些原则是如何应用到Minix中的,以及关键的数据结构
3. 对源代码的详细描述
书名就叫做:
如果你想获得源代码的话,可以从出版社Prentice Hall 单独购买,售价 69 美元, 包括10张软盘。
69美元价格不便宜,但是也只是略高于制造成本,考虑到1987年Unix的大学教育许可证是300美元,商业许可证是28000美元,Minix第一次将一个类Unix的操作系统的成本降低到了学生可以接受到的水平。
在发布后的几个月内,Minix成为了一个狂热的产品,拥有自己的USENET新闻组comp.os.minix,其中有40000名订阅者。
许多人开始缠着我改进它, 我每天都要收到200封电子邮件,内容大都是:“我需要一个伪终端,这周五就要!”,我的回答通常是:
“No”!
因为我想让Minix保持简单,这样学生们可以理解,我不希望Minix变成一个像Unix那样复杂的用于生产环境的系统。
并且当时Unix的一个分支BSD非常稳定、成熟,有庞大的社区和追随者,所以我也没想让Minix进入这一市场,可是后来AT&T认为BSD侵犯了版权,对它发起了一场诉讼, 花了几年的功夫,这严重阻碍了BSD的发展。
在这几年中,有个叫Linus的芬兰小伙子购买了Minix源码,在上面玩得不亦乐乎,最后折腾出了一个全新的操作系统Linux, 伴随着互联网的大潮,全世界程序员都参与开发, Linux迅速发展起来,填补了免费Unix的空缺。
Linux的故事参见《Linus : 我财务自由后,我却失眠了!
05
意外之喜
Minix的独特之处就是“微内核”:操作系统只有很小部分功能运行在核心态,大部分功能文件系统、内存管理等都运行在用户态。
这样,当某一部分出错的时候,可以轻松恢复。甚至在不停机的情况下,就可以完成操作系统组件的升级。
这种特性对于高可靠的系统特别重要,如航空电子系统、喷气式战斗机、医院的呼吸机——系统失败就意味着有人死亡,其中大多数都是微内核。
前些年,有Intel的工程师联系我,问了我一些技术问题,还想让我对Minix 3进行一些针对性修改,后来我们就没有联系了。
没想到, 后来爆出一个大新闻, 从2008年开始,Intel 居然把Minix用到了它的CPU的ME(Management Engine)管理引擎当中。
这个ME相当于一个小型、低功耗电脑系统,运行在Ring -3 (Windows, Linux等运行在Ring 0), 我的Minix就驻扎在这里。
运行在Ring -3 的Minix 有一个网络堆栈、文件系统、很多驱动程序、甚至还有一个Web服务器!
听起来是不是很可怕?怪不得Google努力地从自家服务器中移除Minix。
不管如何,MINIX现在可能是世界上使用最广泛的x86电脑操作系统了。
06
蝴蝶的翅膀
根据混沌理论,亚马逊的一只蝴蝶煽动翅膀,就可能引起美国海岸的一场飓风。
如果当年罗伯特没有偶然地告诉我15号中断,就不可能有Minix。如果没有Minix,Linux也就不复存在。这样基于Linux的Android 也可能不存在, 现在苹果和三星的市值可能大为不同, IT界可能会走上另外一条道路。
我是Andrew S. Tanenbaum。
你可能没有直接使用过Minix,但是应该读过我写的书:
(完)
我的新书《半小时漫画计算机》京东、当当热销中,五折优惠,不容错过,长按二维码即可购买
另外,没有看过第一本《码农翻身》的小伙伴可以考虑下两本套装,都是5折,点击阅读原文即可购买。