Linus(四)——Linux 诞生
Unix始于20世纪 60 年代,在 70 年代得到了迅猛的发展,这时候的林纳斯还躺在祖父公寓里的摇篮里睡大觉,如果不是后来 Unix 王国自乱阵脚,出现阵营分裂和法律纠纷,可能 Linux 系统根本都不会出现。真实的情况是,Unix 浪费了大把的时间和机会,似乎就是为了等待这个大鼻子、头发纷乱的芬兰小子长大,然后一决高下。林纳斯赢得了自己的时间,他一刻不停地磨练自己的技艺,在清晨的微光中练习算法,在赫尔辛基的雪山上编译代码,随时随地地补充粮草和武器。21年之后,林纳斯抚着雪亮的刀锋上路了,他要去追寻属于程序员的最高荣耀。
1991年1月,林纳斯花费了 3500 美元,分期付款购买了一台杂牌组装电脑,内存 4 兆,CPU 33 兆赫,还有一台 14 英寸的显示器,然后又买了 MINIX 操作系统,用 16 张软盘把这个操作系统装到了计算机里。之后,林纳斯又用了一个月的时间,了解了 MINIX 的好和不好,并把这个系统改装成了自己得心应手的“战斗机” ,开始了战斗的人生。就是在这台电脑上,催生了 Linux 的初始版本。
Linux 的诞生离不开 MINIX,MINIX 是 Mini Unix 的缩写,是安德鲁·坦尼鲍姆教授编写的迷你版的 Unix 操作系统,源代码可以提供给大学和学生,用于操作系统教学,采用了微内核设计。其中的代码还作为《操作系统:设计与实现》的示例程序,这本书我们在 “Linus(三) ”中提到过,给了林纳斯极大的启发。
林纳斯使用了 MINIX 之后,发现这个系统有很多缺陷,比如性能问题、内核问题、文件系统问题,最大的问题是终端仿真器,也就是我之前总提到的 Terminal,登录学校里的 Unix Server 和上网时,林纳斯都需要终端,但是 MINIX 无法满足这个需求。如果普通人遇到这种问题,估计就是发会呆然后洗洗睡了,或者说“你行你上啊” ,但林纳斯不是普通人!
他决定抛开 MINIX,从硬件层面开始,重新设计一个终端仿真器。牛人就是不同凡响,这个决定表明了林纳斯需要从 BIOS、CPU 等硬件层面重新开发出一套系统,除此之外,还需要了解如何把信息写入显示器,如何读取键盘输入,如何读写调制解调器,早期储备的汇编语言和 C 语言能力终于派上了用场……
两个月之后,终端仿真器完成,对此林纳斯非常骄傲:
对我这次了不起的壮举,妹妹萨拉倒是知道,不过我把终端仿真程序演示给她看时,她在显示器上看到一长串字母 A 和一长串字母 B,看了大概五秒钟,然后说了一句“挺好的”就转身走了,显然没觉得有什么大不了的。我意识到这确实不像什么了不起的事。只不过,有些东西表面上可能看起来没什么,但背后却包含了大量繁杂的工作。这就好像你把一段刚铺好的柏油公路指给别人看,指望这样就能让他明白你耗费了多少人力物力,这根本不可能。当时是三月份,或者四月吧。不知道彼得盖坦大街上积雪是不是都化成雪泥了——我不知道,也不在乎。大部分时候,我都穿着睡袍,和我那台不招人喜爱的电脑缠绵在一起。窗户上那块厚实的黑窗帘遮得严严实实,把我和阳光隔离开来(外面的世界就更不必说了) 。Linux 操作系统就这样开始了,一发不可收拾。林纳斯的当时编程状态是这样的:编程——睡觉——编程——睡觉——编程——吃饭——编程——睡觉——编程——洗澡——编程……
实现了终端仿真器之后,林纳斯马不停蹄,开始添加磁盘驱动和文件系统,那一年林纳斯还在上课,但是课程很简单,他唯一的课外活动就是参加每周三晚的同学聚会,这个长着大鼻子的技术天才,常常会因为担心自己缺乏社交能力和容貌丑陋而失眠,对那时的他来说,唯一有趣的事情就是把驱动程序写出来。于是他咬咬牙对自己说,还得干下去。(看来没有女神的好处就是可以写个操作系统出来,然后把自己叫做上帝。)
随着工作的进展,终端仿真器正在开始向一个操作系统的方向发展,林纳斯显然也看清楚了这一点。
在创造 Linux 的整个过程中,我们没有看到林纳斯使用了什么样的高级工具,估计那时也没有,整个系统基本上是一行行代码敲出来的,纯手工打造,这些先贤的编程功底和效率让我们叹为观止,所以,现在,我决定打开终端,输入 vi,然后键入 to be continued,感受一下林纳斯当年编程的风采……
随着林纳斯不断地敲击键盘,他的终端仿真程序也不停地扩张,从刚开始的小树苗长成了一株盘根错节的大树,树根牢牢地抓住土地,枝丫努力地伸向天空,花朵和果实开始在高远的天空中烁烁发光,所有的细节都在林纳斯的掌控之中。懂行的技术人员都看得出来,这个大鼻子的芬兰小子是准备开发一个操作系统啊。
是年 6 月份,林纳斯基本确定了要开发一个操作系统内核的计划,并开始着手搜集 Unix 操作系统标准的相关资料。1991 年 7 月 3 日,格林尼治时间上午 10 点钟,林纳斯在 MINIX 新闻组发出了一封求助邮件,寻求有关 POSIX1 标准的帮助,他在邮件中写道:
1注:POSIX 全称是“可移植操作系统接口” (Portable Operating System Interface)。IEEE 最初制定 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。随着技术的发展,POSIX 开始不局限于 UNIX 系统,后续的 Linux 和 Windows NT 都部分地遵循了该标准。POSIX 在林纳斯开发的过程中起到了灯塔的作用,直接后果就是 Linux 系统从一开始就走在了正规军的康庄大道上,基本没有跑偏过。Linux 几乎可以适配各种类型的硬件体系结构。
由于我目前正在Minix系统下做一个项目,所以对POSIX标准定义很感兴趣。不知道有没有人能给我提供一个最新版的 POSIX规则 (最好是以一种机器可读的格式)?要是能有FTP地址就更好了。这份公开的邮件是标识 Linux 问世的最早证据。邮件发出后不久,有人就寄来了厚厚的 POSIX 标准,同时赫尔辛基工学院的阿里·莱姆克也对林纳斯的邮件做出了响应,为林纳斯提供了一个 FTP 地址,用来上传他即将完成的操作系统。
标准和 FTP 地址都有了眉目,林纳斯开始实现各种系统调用,以便让 shell 运行起来。这段时间的工作让林纳斯时常感到灰心丧气,看着增加的代码量,工作似乎前进了一大步,但是检验一下功能又仿佛没有任何进展。有时候他还不得不放弃之前的想法和已经完成的代码实现,另辟蹊径从头再来,即使是在天才面前,代码也能让人欢喜让人忧。
终于 shell 已经可以在新的操作系统上工作了,林纳斯开始编写复制(cp)和列表(ls)等程序。shell 程序一旦完成,就好像完成了从 0 到 1 的飞跃,一切都变得无比顺利,林纳斯面前仿佛出现了一条阳关大道,一切都豁然开朗了,他说,要有光,于是就有了光。对于这种状态,林纳斯表示“我很满意” ,并且开始用“Linux”称呼这个操作系统。
这种满意非常重要,因为那个夏天林纳斯除了伏在电脑面前噼噼啪啪地敲击键盘,什么都没做。芬兰四月到八月的日子是一年中最美好的时光,人们到布满小岛的海上航行,去海滩上晒日光浴,到夏日小木屋中消遣时光。但是林纳斯,他只是在永无休止地编写程序,忘记了白天和黑夜,黑色的窗帘遮蔽了灿烂的阳光,也遮蔽了外面的世界。他唯一的想法就是,得赶紧把这该死的系统做出来!
1991年8月25日,林纳斯在 MINIX 新闻组上发邮件做了一个调查,想知道大家希望这个新的操作系统具备什么特征。
1991年9月17日,林纳斯把已经完成的新操作系统上传到阿里·莱姆克提供的 FTP 服务器上,并准备用 Freax 作为操作系统的最终代号,结果遭到了阿里·莱姆克的激烈反对。阿里·莱姆克对林纳斯说:
“林哥,您咋会想到用这么变态的名字命名操作系统呢?原来的 Linux 不挺好的嘛!”
“那样不会显得自恋吗?”
“您这样就不对了,操作系统是开天辟地的大事,人民群众都等着用您的名字命名呢,看看他们的眼神,您能辜负他们的期望吗? Linux 天生不就是用来跟 Unix 遥相呼应的么?这是命,得认!”
“这……那我就不推辞了啊。 ”
以上为意译,不过基本上和古代皇帝的黄袍加身是一个意思。新的操作系统最终以 Linux 命名,并在 10 年后名扬天下,20 年后统治服务器领域,可谓 Linux 恒久远,Linus 永流传。