Unix之父肯·汤普逊诞生


在81年前的今天,1943年2月4日(农历1942年12月30日),Unix之父肯·汤普逊诞生。

肯汤普森

1943年2月4日,Unix之父、图灵奖得主、美国工程院院士肯·汤普逊(Kenneth Lane Thompson,一般称之为Ken Thompson,肯汤普森,1943年2月4日-)出生于美国新奥尔良。在《编程人生》一书的访谈中,他回忆自己小学时受到的教育很烂,但有一堂课讲了二进制,自小喜欢逻辑的他立即被迷住了,他做了很多二进制运算,还借助一台十进制计算器扩展到各种进制。到了高中,他又迷上了电子,自己制作无线电、示波器和放大器。

1960年,Ken如愿进入加州大学伯克利分校主修电气工程。二年级的时候他有机会使用一台模拟计算机,因为没有别人抢,实际上成了他的专用。解释程序太慢,他不得不直接用汇编编程,并从中学会了什么是计算机。后来一个假期他又得到了解释程序的源代码清单,在不懂程序所用语言的情况下,他仔细研读,学会了编程,并在学校找到编程的工作。1965年本科毕业后他没有别的地方去,留校了。有个教授为他申请了硕士,于是他又读了一年硕士。硕士导师是著名的信息论和博弈论专家Elwyn Berlekamp。当然,Ken自己回忆,实际上他大部分都是在自学,就毕业了。

Berlekamp也是一位传奇人物,博士导师是香农、Gallager等大师,发明了Berlekamp 、Welch-Berlekamp 和 Berlekamp-Massey等著名算法。他花了不少时间研究围棋等博弈游戏,是组合博弈论的创始人之一。他还是加州大学伯克利分校数学系里唯一一位没有数学学位的教授。更有意思的是,他曾与同事共同创办了Axcom交易顾问公司,在其编写的算法指导下的基金创造了55%净回报率的奇迹。今天,这支基金仍然在运作,它就是传奇基金公司文艺复兴(Renaissance,另一家由数学教授创办的公司)旗下历史最长的Medallion。

离开校园后,Thompson加入了贝尔实验室。应市场的需要,当时贝尔实验室与麻省理工学院以及通用电气公司正在联合开发一个多用户分时操作系统,取名为Multics(多路信息计算系统),Thompson成为这个系统的开发人员之一。在开发Multics的期间,Ken创造出了名为Bon的编程语言。可惜因为这个系统不但开发周期长,成本高,而且庞大而缓慢,市场前景完全不被看好,最后贝尔实验室从这个项目中撤了出来。这对于Ken而言,简直是个巨大的不幸,因为他自己用写的一个“star travel”游戏就是完全基于Multics的,退出Multics项目意味着Ken将没有机器可以再玩这个游戏了。

面对此情此景,Ken作为一个创造者的本性立即体现了出来,于是他决定自己写一个操作系统来满足他玩游戏的需要,说干就干,Ken找到了一台废弃已久的老式PDP-7,并在这台机器上重写了他的游戏。在这个过程中,Ken有了一个主意,要开发一个全新的操作系统。利用PDP-7上的汇编语言,Ken只花了一个月就编写完了操作系统的内核,在这个一个月中,他一周一个内核,一个文件系统,一个编辑器和一个编译程序的完成。做完这个系统后,Ken将其命名为UNiplexed Information and Computing System,缩写为 UNICS,后来做了一下改动,UNIX诞生了。

为了开发Unix,Ken还开发了一种新的语言,即C语言的前身——B语言,这种语言简洁明了,接近于硬件语言。Unix的出现开始虽然并不为大家所看好,但是却引起了贝尔实验室另一位同事的注意,这就是Dennis M. Ritchie,于是Dennis主动加入进来共同完善这个系统。1972年,他们联手将Unix移植到当时最先进的大型机PDP-2上。由于Unix是如此的简洁、稳定与高效,以至于当时大家都放弃了PDP-2上自带的DEC操作系统,而完全改用Unix,这时的Unix已经开始走向成熟了。

在1973年之前Unix还不太为外界所知,到同年10月,Unix在IBM举办的操作系统原理专题研讨会上被提及,当Ken和Dennis在会上宣读论文并展示Unix后,整个会场轰动了,大家都立即涌上来索取这种新型的操作系统的程序。随着Unix的需求量的日益增加,Ken与Dennis决定将Unix进一步改写,以便可以移植到各种不同的硬件系统,由于Unix的源代码中不少是用汇编完成,不具备良好的移植性,正好Dennis在1973年在B语言的基础上开发出了C语言,C语言灵活,高效性,与硬件无关,并且不失其简洁性,正是Unix移植所需要的法宝,于是旧版的Unix与C语言完美结合在一起产生了新的可移植的Unix系统。随着Unix的广泛使用,C语言也成为了当时最受欢迎的编程语言,一直延续至令。

说到Unix与C语言,还有一段小故事,当时安装了Unix的PDP-11被放在贝尔实验室供大家使用,有一天大家伙发现Ken总是可以得到最高的权限轻松进入他们的帐户,在贝尔实验室这种高人云集的地方,这简单是太不能容忍了,于是有若干高人跳了出来,仔细分析Unix代码,找到后门,修改后再重新编译整个Unix,当所有人都以为这个世界应该从此清静了的时候,却发现Ken还是很容易就取得了他们的帐户权限,为此大家郁闷不已。直到很多年后,Ken才道出其中的原委,原来代码里确实存在后门,不过并不在Unix代码中,而是藏在编译Unix的编译器里,每次编译器编译时就会自动加入后门代码,而当时整个贝尔实验室都用的是Ken所写的C编译器。

由于Unix与C语言的深远影响,1983年美国计算机协会将当年的图灵奖破例颁给了软件工程师出身的Ken与Dennis,并在当年还决定新设立一个奖项――软件系统奖,以奖励那些优秀的软件开发者,当然首个软件系统奖也是非他们两人莫属了。

完成Unix这样的伟业之后,也许是受了老师Berlekamp的影响,Ken的兴趣转移到计算机象棋程序上,开发了一个名为Belle的国际象棋专用计算机,在当时那可是打遍天下无敌手。他还编写了一个程序扩展象棋残局库。

Ken的职业生涯也并非一帆风顺。1980年代,他在Dennis Ritchie的支持下,与Rob Pike、Brian Kernighan、Tom Duff、Doug McIlroy、Bjarne Stroustrup、Bruce Ellis等众多大牛合作,开始投入雄心勃勃的Plan 9操作系统开发中,这个项目的目的是开发出能取代Unix的新一代分布式多用户和图形化的操作系统。1992年、1995年先后发布了两个正式版本。但Linux的迅猛发展渐渐使Plan 9丧失了成长空间。1990年代后期,朗讯公司取消了商业计划,Plan 9最终也没能真正走出实验室。

此后,朗讯又启动了Inferno操作系统研究项目,Ken继续投身其中。这个名字吓人(取材自《神曲》中的地狱之火)的项目有Dis虚拟机、先进的编程语言Limbo和协议Styx,在1997年发布了第一版,并用于朗讯两个产品之中,而且公司还成立了专门的业务部门。应该说取得了一定的成功。但是,这时候互联网兴起,Sun开发的Java开始大红大紫。而朗讯公司完全没有意识到,其实Inferno完全可以与Java环境竞争,从互联网大潮中分一杯羹,在营销和运营模式上完败。三年后Inferno业务部门被关闭,知识产权出售给英国公司Vitanuova。

2000年12月,Ken正式退休。后曾以Fellow头衔在另一家通信设备公司Entrisphere工作到2006年。2007年9月,他以杰出工程师的身份加入Google,再次与老朋友Rob Pike一起出征,这次他的任务是为Google设计基础设施。他在《编程人生》一书访谈中表示,自己的工作是操作系统方面的事情,是各部分之间的胶水。他有特权可以做自己想做的事情,面临的挑战是,使许多不可靠的机器能像一台可靠的多处理器机器那样工作。虽然对Google大规模海量用户的计算环境以及相关的制度还不太适应(比如,他甚至还没有资格提交代码),但他总体上还是很喜欢这里的工作。2009年11月他们工作的第一个成果发布,这就是引起广大程序员关注的Go语言——带垃圾收集、编译型的并发系统语言。某种程度上,他们的工作似乎是Inferno的延续,Go语言的源代码中,有一些直接衍生自Inferno。下一步还会有什么惊喜呢?让我们拭目以待。

Unix使Ken获得了众多荣誉,图灵奖、美国国家技术奖、IEEE Tsutomu Kanai奖,还有前几天刚刚颁发的2011年日本国际奖(奖金45万美元)。此外,Ken在开发编辑器的过程中发明了正则表达式,在开发Plan 9操作系统的过程中发明了UTF-8编码,这些成就也值得我们感念。

应该说,Ken Thompson是幸运的,他因兴趣进入计算机界,整个职业生涯几乎能随兴之所至。难怪他认为优秀开发人员的标志是热情。不过,有一点可能会令我们惊讶,他建议自己的儿子去读生物而非计算机,理由是计算机发展太慢了。

1999年肯·汤普逊(左)和丹尼斯·里奇因开发C语言和 Unix 操作系统一起获得了美国国家技术奖,克林顿授奖。

肯·汤普生和丹尼斯·利奇