每个人桌面上一台电脑,这曾经是无数计算机先驱的梦想,这个梦想很早就实现了,在1997年,乔老师和比老师就说过,「比尔,我们共同控制了100%的桌面系统市场」,当然乔老师没说的是,比老师控制了97%,乔老师还不到3%。时至今日,乔老师走了,比老师颓了,移动终端把传统的 PC 市场冲击的七零八落。普通用户都知道了Windows、Android、OS X 、iOS、BlackBerry等等,但是,他们依然不了解的是另一款在计算机发展史上起到了革命性作用的操作系统:Linux!
当大家使用 Google 搜索时,使用 Kindle 阅读时,使用淘宝购物时,使用 QQ 聊天时,很多人并不知道,支撑这些软件和服务的,是后台成千上万台 Linux 服务器,它们时时刻刻都在进行着忙碌的运算和数据处理,确保数据信息在人、软件和硬件之间安全的流淌。可以这么说,世界上大部分软件和服务都运行在 Linux 操作系统之上,神马云计算、大数据、移动互联网,说起来风起云涌,其实没有 Linux 全得趴窝(微软除外)。
但是,Linux 和它的缔造者 Linus Torvalds 一样低调,这么牛逼的一个物件,居然只有程序员知道它的传奇,这不科学!所以我准备在这个系列中写写Linus Torvalds:他是 Linux 和 Git 的缔造者,他是一个传统的黑客,与沃兹一样,少年成名,崇尚自由,一生只为寻找欢笑,他,是一个真正的程序员。
注:为了防止大家把 Linux 和 Linus 搞混,我在后面的文章中统一采用 Linus 的中文译名:李纳斯。
李纳斯在2001年出过一本自传,叫做《Just for Fun》,是他和大卫·戴蒙合著的,当年我有幸读到这本书,了解了很多李纳斯的生平轶事,那时我就琢磨,这个天才已经达到人生的巅峰了吧,结果这位兄台并未停止前进的步伐,转手就在2005年搞出了分布式版本控制系统 Git,目前几乎全世界的程序员都在用 Git管理他们的代码,著名网站 Github 就是基于 Git 构建的。无论是 Linux 还是 Git,得一即可得天下,结果这哥们以一己之力发起了俩项目,而且都是主力开发人员。最终的结果是,成全了程序员,陶冶了用户,造福了一方百姓。正如李纳斯自己所言:「My name is Linus, and I am your God.」
Linus(一)——生命的意义
终于,让李纳斯痛苦不堪的兵役终于结束了,除了敲锣打鼓欢庆重生之外,他开始继续拓展自己的编程之路,这时候,生命中最重要的一本书出现了,书的名字叫做《操作系统:设计和实现》,作者是 Andrew S. Tanenbaum。用李纳斯的原话表述就是「这本书把我推上了生命的高峰」。
那个时代 Unix 已经开发出来了。最早 Unix 是用汇编写的,开发过程中 Unix 的两位创始人Ken Thompson 和 Dennis Ritchie觉得用汇编写程序实在是太苦逼了,男人应该对自己好一点!于是老哥俩决定用高级语言来完成下一个版本,他们首先尝试了Fortran,失败!然后又基于BCPL(Basic Combined Programming Lanugage)创建了 B 语言,B 语言可以被认为是那个时代的解释型语言,不能直接生成机器码,效率上完全没法满足系统的需求,再次失败!我们都知道,一再失败的情况下总会有一位英雄人物挺身而出,这次是 Dennis Ritchie,他从失败的大坑中爬起来拍拍土抹抹泪,继续对 B 语言进行改造。这次 Dennis 为 B 增加了数据类型,并让 B 语言能够直接编译为机器码,然后又为这门语言起了个极其响亮的名字:「New B」,读一读神清气爽,念一念气冲云霄,从此一代语言巨星冉冉升起,40年后依然排在兵器排名榜第一位,怎一个牛字了得!当然,Dennis可能考虑了十几年后中国人民的感受,把「New B」改为了 C 语言,并用 C 语言重新编写了 Unix 的内核,Unix 与 C 从此珠联璧合,长相思守,再也无法分离。
操作系统、Unix 和 C 语言可以说是李纳斯心目中神山上的三座圣杯,为了至高无上的荣耀,他首先要攀上峰顶,把这三座圣杯捧在手中,然后再琢磨建造自己的宫殿的事儿。在那一年的夏天,李纳斯开始了高强度的阅读和学习,用他的话说就是做了两件事,「一件事是什么都没做,另一件事是读完了719页的《操作系统:设计和执行》。那本红色的简装本教科书差不多等于睡在了我的床上」。
Unix 始于上个世纪60年代,在70年代得到了迅猛的发展,这时候的李纳斯还躺在祖父公寓里的摇篮里睡大觉,如果不是后来 Unix 王国自乱阵脚,出现阵营分裂和法律纠纷,可能 Linux 系统根本都不会出现。真实的情况是,Unix 浪费了大把的时间和机会,似乎就是为了等待这个大鼻子、头发纷乱的芬兰小子长大,然后一决高下。李纳斯赢得了自己的时间,他一刻不停的磨练自己的技艺,在清晨的微光中练习算法,在赫尔辛基的雪山上编译代码,随时随地补充的粮草和武器。二十一年之后,李纳斯抚着雪亮的刀锋上路了,他要去追寻属于程序员的最高荣耀。
1991年一月,李纳斯花费了三千五百美元,分期付款购买了一台杂牌组装电脑,内存4兆,CPU 33兆赫,还有一台14英寸的显示器,然后又买了 MINIX 操作系统,用十六张软盘把这个操作系统装到了计算机里。之后,李纳斯又用了一个月的时间,了解了 MINIX 的好和不好,并把这个系统改装成了自己得心应手的「战斗机」,开始了战斗的人生。就是在这台电脑上,催生了 Linux 的初始版本。
Linux 的诞生离不开 MINIX,MINIX 是 Mini Unix 的缩写,是 Andy Tanenbaum 教授编写的迷你版的 Unix 操作系统,源代码可以提供给大学和学生,用于操作系统教学,采用了微内核设计。其中的代码还作为《操作系统:设计与实现》的示例程序,这本书我们在 Linus(三)中提到过,给了李纳斯极大的启发。
李纳斯使用了 MINIX 之后,发现这个系统有很多缺陷,比如性能问题、内核问题、文件系统问题,最大的问题是终端仿真器,也就是我之前总提到的 Terminal,登录学校里的 Unix Server 和上网时,李纳斯都需要终端,但是 MINIX 无法满足这个需求。如果普通人遇到这种问题,估计就是发会呆然后洗洗睡了,或者说「你行你上啊」,李纳斯不是普通人!
他决定抛开 MINIX,从硬件层面开始,重新设计一个终端仿真器。牛人就是不同凡响,这个决定表明了李纳斯需要从 BIOS、CPU等硬件层面重新开发出一套系统,除此之外,还需要了解如何把信息写入显示器,如何读取键盘输入,如何读写调制解调器,早期储备的汇编语言和 C 语言能力终于派上了用场……
这份公开的邮件是标识 Linux 问世的最早证据。邮件发出后不久,有人就寄来了厚厚的 POSIX 标准,同时赫尔辛基工学院的 Ari Lemke 也对李纳斯的邮件做出了响应,为李纳斯提供了一个 FTP 地址,用来上传他即将完成的操作系统。
注:POSIX 全称是可移植操作系统接口(Portable Operating System Interface)。IEEE 最初制定 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。随着技术的发展,POSIX 开始不局限于 UNIX 系统,后续的 Linux 和 Windows NT 都部分的遵循了该标准。POSIX 在李纳斯开发的过程中起到了灯塔的作用,直接后果就是 Linux 系统从一开始就走在了正规军的康庄大道上,基本没有跑偏过。Linux 几乎可以适配各种类型的硬件体系结构。
标准和 FTP 地址都有了眉目,李纳斯开始实现各种 System Call,以便让 Shell 运行起来。这段时间的工作让李纳斯时常感到灰心丧气,看着增加的代码量,工作似乎前进了一大步,但是检验一下功能又仿佛没有任何进展。有时候他还不得不放弃之前的想法和已经完成的代码实现,另辟蹊径重头再来,即使是在天才面前,代码也能让人欢喜让人忧。
Linux 从一诞生就被打上了开源的烙印,这一点对 Linux 的后续发展起到了至关重要的作用。从1991年内核0.01版本发布,到1994年1.0版本闪亮登场,世界各地无数的开发者为 Linux 提交了代码,李纳斯为 Linux 建立了讨论组 comp.os.linux,全世界爱好开源和 Linux 的程序员与黑客都在上面讨论问题,他们就像群蜂筑巢一样,不断的通过个体和群体的力量交替推进 Linux 的飞速发展。
李纳斯还不止于此。他不仅单枪匹马写出了 Linux 的内核,而且做出了开源的决定。他把 Linux 放到了互联网上,并且允许那些希望使用和改进它的人们根据开源协议修改和提交源代码。这两点对互联网的影响是极其深远的,估计李纳斯当年也没有想到,当时的两个小小的涟漪,经过时间和空间的放大,十几年后形成了一股互联网巨浪,到现在 Linux 依然处于风口浪尖。
对于 Linux 取得的成功,李纳斯将其归结为是由自己的缺点导致的:
1、 我很懒散
2、 我喜欢授权给其他人
其实这两个所谓的缺点,正是优秀程序员和领导者必备的要素,它们让 Linux 成为世界上最大的开源协作项目,为喜爱 Linux 的人们带来了最美好的技术和应用,现代的互联网几乎是运行在 Linux 之上的,可以说,李纳斯改变了世界,你每一次伐开心后在淘宝上买包包,都有李纳斯贡献的力量!
Linus(六)——来到硅谷
当李纳斯透露出自己的就业计划之后,马上有多家公司递来橄榄枝,其中包括著名的 Linux 公司 Red Hat。这种感觉是如此美妙,就像你刚刚掏出一支香烟,面前已是千百个打火机舞动。但是李纳斯本着不加入任何一家 Linux 公司的原则,拒绝了 Red Hat,参加了另一个名不见经传的公司的面试,这家公司叫做 Transmeta,中译名「全美达」,你们可以从维基百科上查到这家公司,不过我打赌,知道这家公司的读者不会超过千分之一,这并不是咱们孤陋寡闻,因为美国人民刚开始也不知道这家公司在干嘛,全美达官网在1997年中上线,两年半后网站的建设情况是「This web page is not yet here」,又过了很久人们才从内部员工透露出的一点信息得知,这家公司似乎是搞处理器的。这是我所知道的唯一一家保密措施强过苹果的公司,如果不是李纳斯,这家公司就像是根本没有存在过。
就是这样一家公司,面试了在开源社区名满天下的技术天才、Linux 操作系统的缔造者李纳斯,并且将其招至麾下,一待就是六年。从某种程度上,这六年严重的影响了 Linux 操作系统前行的脚步,因为李纳斯没有足够的时间开发 Linux 了。
虽然根据 Transmeta 与李纳斯的协议,他可以继续从事 Linux 的开发,而且他确实也想这么做,比如白天为 Transmeta 工作,编写 X86 解释程序,晚上继续 Linux 的伟大事业。不过真实的情况是,晚上丫睡着了……
关于加班和睡眠,李纳斯是这么解释的:
很多人都认为加班加点的工作才算真正的工作。我可不这么想。无论是 Transmeta 的工作还是 Linux 的工作,都不是靠牺牲宝贵的睡眠时间换来的。事实上,如果你想听真话,我要说,我更喜欢睡觉。
事实上李纳斯在拿到第一笔真正的财富之前,一直处于日子紧巴巴的状态。当时另两位带头大哥比尔·盖茨和史蒂夫·乔布斯早已名满天下家私万贯,同时有大量的技术人员、商人和公司通过 Linux 及其相关技术获取了巨额财富,对此,李纳斯的态度是:「和我有毛关系」,他似乎对一大群才气不高的编程人员能够享受到大笔的财富并不在意。这种情况一直持续到所有的有识之士都坐不住了:李纳斯,你再也不能这样下去了!
伦敦的一位企业家希望李纳斯在他羽翼未丰的 Linux 公司做个董事会成员,报酬是一千万美金。李纳斯说,不用。企业家惊呆了,当他喃喃自语「卧槽你特么知道一千万美金是啥概念吗」的时候,李纳斯已默默走远。
Red Hat 公司为了感谢李纳斯的卓越贡献,为他提供了一些期权,李纳斯的回复同样是,不用了,我不会给你独家的授权许可的。Red Hat 的人差点疯掉:「李爷期权您就收着吧,我们什么都不要行了吧」「唔这样啊,那就放这吧」,这就是李纳斯!
正是这笔期权让李纳斯收获了第一笔巨额财富,因为 Red Hat 1999年8月11日在纳斯达克上市了。李纳斯先是意识到自己从身无分文突然变成了拥有五十万美元的土豪,然后是一百万,五百万,李纳斯终于变得亢奋起来,原来期权也是钱啊!终于不用再为生计发愁了,对着这个事情,李纳斯的定义是:我真是最幸运的家伙!
事实上李纳斯从来没有想过 Linux 能够获得如此巨大的成功。他只是为了自己方便写了一个操作系统内核并想借此获得一点回报而已,「假如我事先知道了要做到如 Linux 这般成功需要做多少基础和琐碎工作的话,那我肯定会相当沮丧的。这意味着你首先要非常优秀,并且你所做的大部分决定都导致了正确的结果。」
Linux 不仅给李纳斯带来了名声和财富,同时给大众带去了巨大的好处。年轻一代中最聪明的程序员和黑客都在使用 Linux 的产品,正是开放的 Linux 给这些天才的程序员带去了巨大的创作热情和喜悦,他们在 Linux 平台上完成了一个又一个杰出的作品,这些技术形成的生产力,对互联网的发展起到了巨大的推动作用,直到今天。
Linus(八)——巨星碰撞
在 Linux 出现之前,桌面操作系统的市场基本上是由比老师和乔老师控制的,虽然乔老师控制的少了一些。Linux 出现之后,桌面操作系统的格局并没有太大变化,但是服务器端市场的变化却是翻天覆地的。原本比尔希望通过 Windows NT 和 Server 系列在服务器领域复制桌面操作系统的辉煌,从而千秋万载,一统江湖。然而,世界的发展永远是多元的,没人能通过一己之力改变历史发展的多维性,比尔·盖茨也不行。于是 Linux 出现了,并以星星之火可以燎原之势一举拿下服务器操作系统的半壁江山。
李纳斯看完之后不明白乔布斯要干什么,只是觉得很厉害的样子。毕竟李纳斯还坐在外公腿上拨弄电脑键盘的时候,苹果的沃兹已经纯手动打造出苹果的第一代个人电脑 Apple I 了。李纳斯决定去见一下儿时的偶像,并了解一下苹果的新操作系统。
两代科技巨星的会面被安排在苹果总部 Infinity Loop,乔布斯带着原 Next 公司技术总监 Avie Tevanian(Mach 之父)接见了李纳斯,双方进行了友好而亲切的会谈,然后会谈的结果和某国常规会谈一样,就是没有结果。
其时乔布斯十年放逐回归苹果,举手投足已是大宗师气势,他对李纳斯说,我大苹果虽然现在看起来有点颓,不过海盗精神永存,我们已经准备好重新起航了。目前个人电脑领域仍然只有两个玩家:微软和苹果。如果 Linux 和苹果能够珠联璧合,那一切将是最好的安排,所有的开源爱好者都能够用上优雅与极客并存的 MacLinux 了。然后 Mach 之父 Avie Tevanian 向李纳斯详细介绍了整合 Mach 和 Linux 内核作为 OS X 混合内核的计划,之后庞大的 OS X 体系将构建在 Mach 和 Linux 内核的基础之上。 同时乔老师表示,基于 Mach 和 Linux 的内核系统将采用开源的方式运作,这样全世界的开源爱好者都可以为 Mac 和 Linux 开发程序。
乔布斯认为自己的扭曲现实力场加上苹果巨大的市场潜力一定会让李纳斯怦然心动,没想到这个芬兰小子在计算机面前待久了,水米油盐不进,任凭乔布斯口吐莲花,我自巍然不动。首先李纳斯对 Mach 就不感冒,他认为 Mach 几乎犯下了所有的设计错误,它让系统变得复杂而效率低下;其次李纳斯觉得乔布斯可能没意识到,Linux 的潜在用户要比苹果系统多;第三李纳斯乐观的认为,虽然 Linux 的目标不是占领桌面操作系统,但是显然「我们很快就能做到这一点了」。所以李纳斯当时的反应是:
为什么我要关心这些?我为什么要对苹果公司的故事感兴趣?我不觉得苹果公司里有什么有趣的事情。我的目标也不是占领什么桌面操作系统的市场。(嗯,虽然 Linux 马上就要做到这点了,但这从来就不是我的目标)
现在看来,李纳斯当时对 Linux 在桌面操作系统的前景过于乐观了,虽然他天纵奇才桀骜不驯,但是也无法预测到 OS X 和 iOS 在十年后引领移动开发的浪潮。不过即使知道 OS X 未来的大发展,心高气傲的李纳斯也不会接受苹果的收编,因为 Linux 一直是独立和自由的软件图腾。
无论如何,这次非正式的会谈没有达成任何实质性的效果,但是对后来的 IT 格局产生了巨大的影响。苹果不再关注 Linux,而是转向了 BSD。2001年苹果任命 FreeBSD 的发起人之一,老牌 BSD 黑客 Jordan Hubbard 为 BSD 技术经理,后升为 Unix 技术总监,负责 OS X 操作系统底层核心 Darwin 的研发,最终,Mach 与 BSD 技术整合在一起,形成了混合内核。另外,苹果开始觉得开源项目也不是那么靠谱,后续他们先后研发并开源了优秀的编译器项目 LLVM 和 Clang,一举替换了整条 GCC 编译链,为 OS X 和 iOS 的性能优化和语言特性提供了巨大的帮助。这也算是苹果对那些牛叉哄哄的开源人士的回击:看,我们也可以做开源,而且比你们做的好。
Linux 则继续在开源、独立、自由的方式下一路狂奔,虽然在桌面操作系统领域的成就乏善可陈,但是在服务器端大放异彩,目前几乎整个互联网都是运行在 Linux 及其衍生产品之上的,可以说没有 Linux,互联网不可能得到如此迅猛的发展。
十年以后,移动互联网时代来临。OS X 上长出了 iOS,Linux 上则诞生了 Android,这两个移动开发领域的双子星都有一个老祖宗,那就是 Unix。一次话不投机的会谈让 OS X 和 Linux 分道扬镳,在十几年后的今天,它们又以一种不同的方式相见了,世界永远都是多元的,可能冥冥中自有天意吧。
Linus(九)——Linus 和 Git
很多人在完成了类似 Linux 这样宏伟的软件产品之后,基本上就止步不前了。但是李纳斯却从未停歇创新的脚步。2003年加入开放源代码开发实验室之后,李纳斯重新全职投入 Linux 内核的研发,并开始酝酿自己的另一个跨时代的产品。
2002年,Linux 内核开发团队开始采用 BitKepper 作为代码版本管理工具。BitKeeper 是一套分布式的版本管理工具,它满足了 Linux 内核开发的技术需求。但是 BitKeeper 只是暂时对 Linux 等开源软件团队免费,并不是自由软件。2005年 BitMover 公司不再免费赞助 Linux 开发团队。对此李纳斯表示非常遗憾,但遗憾之后他并没有自怨自艾伤心落泪,而是愤怒的与其他几个小伙伴花了几个星期完成了一套新的分布式代码管理工具,命名为 Git。两个月之后,Git 发布了官方版本,并在不同的项目中应用,自由软件社区给予了 Git 广泛的支持。
不过我最喜欢李纳斯说过的一句话是:Talk is cheap, Show me the code。他一直用自己的编程人生诠释着这句话。2006年的时候,Linux 内核代码的2%依然是李纳斯完成的,他是代码贡献最多的人之一(是年37岁)。到了2012年,他对内核的贡献主要是合并代码,编程变少了,但是他依然对是否将新代码并入到 Linux 内核具有最终决定权。