“我们只是想为自己创造一个更方便的编程环境,并希望其他人也能喜欢它(UNIX)。”
-丹尼斯·里奇和肯尼思·汤普森在1983年图灵奖颁奖仪式上的讲话
遭遇UNIX,对我来说是一件很有趣的事。当年来美之前,在国内接触过VMS和DOS操作系统。尽管用的不多,但还算是一个较熟的用户。来美后,电机系研究生用的系统只有UNIX。为了适应UNIX费了很长时间,但熟悉了UNIX之后就知道它的好了。从此后,只要提到操作系统,在我这里就只有UNIX了。对于吃工科饭的人来说,离开了UNIX还真的不行。就我现在的工作来说,一半以上时间是在UNIX或LINUX上做的。PC只是用来写报告和做一些文字工作。
提起计算机,大家都知道它由硬件和软件两部分构成。在我看来计算机也有两部分:编码器和处理器。它先把现实世界能归结为文字和数字的东西编码成0和1的集合,再用已有的逻辑和数学进行处理,以此分担我们的部分脑力活动。计算机最重要的部分就是人机界面。对于今天的大众来说,常用的是视窗系统、苹果系统和安卓系统。三个系统中除了效率最低的视窗外,苹果是建立在UNIX上的,安卓是建立在LINUX上的。LINUX和UNIX的系统命令几乎没有区别,由此可见UNIX的重要性。两位发明UNIX的研究人员因此获得了1983年的图灵奖,贝尔实验室关于UNIX的书,也是我们这些用户人手一册的参考书,他们在二十世纪最伟大的程序员排名中稳居前十名。他们是前贝尔实验室的研究员肯·汤普森和丹尼斯·M·里奇。
肯·汤普森出生于1943年2月4日,父亲是一位海军军官。二岁的汤普森就在圣地亚哥(San Diego)、西雅图(Seattle)、旧金山(San Francisco)、印第安纳波利斯(Indianapolis)、和德州(Texas)的金斯维尔(Kingsville)生活过。汤普森的少年时代是在金斯维尔渡过的。少年汤普森是金斯维尔无线电零件商店的常客,他在那里学到了大量的电子和无线电知识,他也是“火腿族”。三极管发明后,汤普森很快用自己的积蓄10美元邮购了一个。一天,他发现本地无线电零件商店的三极管只要1.5美元。从此,他就从本地无线电零件商店购买三极管了。后来,汤普森说这很可能是他父亲事先付给了无线电零件商店8.5美元,在暗中资助他。但汤普森从未知道真相。
位于德州的金斯维尔是一个石油工业中心。那里没电话,只有油井和油井、油井和汽车之间的短波通讯。汤普森常去的那家无线电零件商店也为那些油井服务,汤普森常常和店里的工作人员一起去爬油井,装卸、维修那些通讯设备。汤普森的另一个业余爱好是国际象棋,1970年代,汤普森写了一个国际象棋软件Belle参加全美国际象棋大赛,三次获得冠军。
汤普森于1960年来到加州大学伯克利分校(UC Berkeley)就读电机系。两年后,汤普森在学校的计算中心找到了一份工作,半工半读。他的工作是为学校写应用程序,同时帮助其他学生完成他们的程序设计。1963年和1964年,汤普森有两个学期在圣地亚哥的通用动力公司工作。1965年,汤普森从伯克利毕业,一年后,获硕士学位。此后,汤普森没在电机领域里工作过。他说:“从电子器件的角度来看,我曾是一个活跃的黑客,制作了一些小东西。有了计算机之后,我发现它们很相似。计算机会让人上瘾,电子器件也会让人上瘾,但电子器件脏多了,而且还会烧坏。”
里奇和汤普森在PDP-11上工作
1966年,汤普森来到了贝尔实验室(Bell Laboratories)工作。两年后,汤普森在贝尔遇到了里奇。一个伟大的UNIX传奇由此发端。
丹尼斯·里奇,1941年9月9日出生于纽约(New York)的弗芒山庄(Mount Vernon)。九岁那年,全家来到了新泽西(New Jersey)的萨米特(Summit)。他父亲是贝尔实验室开关系统实验室主管。里奇于1963年从哈佛物理系毕业。之后的五年,他在哈佛应用数学系攻读博士。在哈佛期间,里奇开始对计算机产生了兴趣,里奇有幸参与了MIT主持的大型主机分时系统的研究计划MAC。里奇完成了他的博士论文,但从未得到学位。里奇说:“论文太无聊了,我从未交上去。”
1968年,里奇加盟贝尔实验室,他在贝尔一直工作到退休。刚进贝尔的时候,里奇在计算机科学研究室遇到了汤普森。实验室给他们的工作很奇怪:调研一下计算机科学领域里有意义的课题。
这样的工作对于一般人来说可能会摸不着头脑,但是对里奇和汤普森这样的天才来说,是求之不得的机遇。1960年代的电子计算机,处于发展的关键时期。分时和批处理的概念及软件刚刚普及,操作系统正处于萌芽阶段。这是一个计算机软硬件英雄辈出的时代。
UNIX的演进
在讲里奇和汤普森发明UNIX之前,先来看看什么是操作系统。计算机操作系统是一个管理计算机硬件与软件资源的计算机程序。操作系统管理配置内存、决定系统资源的供需次序、控制输入输出设备、管理操作网络及文件系统等计算机的基本作业。操作系统也提供了一个用户与计算机的互动界面。计算机发明之初,并没有操作系统。当时计算机的操作方式是单个程序联机,为完成某项功能,要把完成该功能的计算机程序用纸带输入,计算机根据要求实现该功能。1950年代,出现了批处理。人们可以由磁带同时输入一组作业,将其编译为一组目标程序,再将各目标程序连接成最终目标程序,并执行最终目标程序实现该作业。在完成了第一批作业后,计算机操作员还要调入第二批作业然后生成目标程序完成作业,这一过程是操作系统的雏形。
1960年代初,计算机的运行速度和应用领域同时飞快地发展,人们为了充分利用计算机的功能,研发出了通道和中断处理技术、多道程序和分时系统。为了管理这些新功能和充分利用计算机的各种资源,人们意识到必须为计算机设计一个计算机功能及资源的管理程序,于是,计算机操作系统应运而生。最初的操作系统是IBM为其IBM360系统计算机开发的,该操作系统的通用性很差。
1960年,MIT的里克莱德教授(J. C. R. Licklider)启动了MAC,MAC以IBM大型主机连接160台终端。终端在学校及教职员的家中,MAC能使30位用户同时共享计算机资源。1965年,MAC不堪负荷,MIT决定开发大型分时系统。这就是有名的MULTICS——计算机史上最大的分时系统,连接一千部终端,支持三百个户同时使用。当时,操作系统的分时概念仍在学术与研究机构探索中,尚未成型,为此计算机硬件也要重新设计。
起初,MIT想和IBM合作。但是,IBM忙着应付自己的问题不想合作。通用电气公司(General Electric Company)当时也在发展大型主机,正在请MIT一起为 GE 645 大型主机制定规格。于是,1965年,GE、MIT、和人才济济的贝尔实验室一起开发MULTICS的软件部分。
1969年,MULTICS 经历四年的研发,并未达到预先的设计,贝尔实验室决定退出。功能未能达到设计规格的MULTICS被装在了MIT的 GE 645 计算机上。GE在该计划结束后一年内淡出了大型主机市场。MULTICS 如果成功,大型主机与集中资源的应用模式不会在1970年代初就萎缩了。MULTICS的失败让当时参与该计划的软件开发人员得到了宝贵经验。几年后,雄心勃勃的MULTICS 的伟大失败孕育出了一个伟大的成功——UNIX。
1969年,贝尔实验室的计算机科学研究室(Computing Science Research Department)成员退MULTICS 计划时,贝尔还没有一套完善便利的互动式编程环境。很多工程师们在为改善编程环境努力,里奇和汤普森草拟了一个新的文件系统,该文件系统就是早期UNIX的文件系统。里奇和汤普森对于贝尔退出MULTICS很生气,尽管MULTICS的分时系统很不完善。但是,MULTICS结束后,贝尔就得回到过去的批处理系统去了。这对里奇和汤普森来说是无法忍受的。十年后,里奇在回忆当年的情形时说:“我们想要的不仅仅是一个好的编程环境。凭以往的经验我们清楚地知道,人机互动的重要性。提供一个具有远程操作、分时系统的人机互动环境远比把程序敲进计算机里重要的多。”
尽管MULTICS和当时大多数操作系统一样很复杂,但是里奇和汤普森已经离不开MULTICS了,没有它,他们会很痛苦。里奇后来说:“我们已经很熟悉互动的编程环境了,你输入命令计算机实时地做出反应。这比先给工作台一堆卡片,一小时后再回来拿一叠计算机输出的数据好的多。”里奇和汤普森为此造就了计算机史上最成功的操作系统——UNIX。
当里奇和汤普森知道贝尔要停止MULTICS时,他们决定自己开发一个相似的操作系统。汤普森写了一个建议书,因为贝尔对MULTICS的失望,汤普森的建议被拒绝了。于是,他们决定自己开发。当时,汤普森正忙着用Fortran将原本在MULTICS系统中开发的“太空旅游”游戏转移到GE的系统上。GE大型主机的机时很贵,控制“太空旅游”的“飞船”的效果也不理想,于是汤普森只得另寻开发环境。
汤普森看上了一台已经没人用的数字设备公司(Digital Equipment Corporation)的 PDP-7 小型机, PDP-7 使用的是 Graphic-II 显示器,图形处理能力很强。它被用来连接大型主机。它有一个很快的硬盘和两个图形终端、一个键盘。汤普森和里奇决定联手在PDP-7开发一个具有人机互动功能的编程开发环境,他们设计了一套包含文件系统、进程子系统、及一小组工具的操作系统。里奇和汤普森决定从储存数据开始写他们的操作系统,于是,他们给出了一个文件系统和操作该系统的命令。他们写出了通过键盘键入的命令:创建、复制、删除文件等等。操作系统的最基本的东西,读入命令,储存数据就有了。最难的是他们没有一个系统环境让他们开发这一操作系统。里奇说:我们发现,我们必须从头开始。这台机器上没有任何软件。程序是在一台GE计算机上用汇编语言写就,然后生成目标程序,再用穿孔机在纸带上打孔,最后把纸带输入到PDP-7里。多年后,里奇说:“这样做真恐怖,但它工作的很好。” 两人写了一个编辑器装在了PDP-7上,这样,他们就可以在PDP-7上工作了。这一系统仅能支持2个用户——汤普森和里奇。
MULTICS失败的阴霾尚未消散,汤普森和里奇的同事布里渊·克宁翰(Brian Kernighan)戏称这一操作系统为 UNiplexed Information and Computing System,缩写为 UNICS,后来大家依谐音称之为UNIX,这一名字一直被叫到今天。
实际编写UNIX的是汤普森。里奇的主要贡献是建议把终端、打印机等设备也当作一个文件系统中的文件来处理。里奇说,这并不新鲜,只是有一点点创新。和后来的UNIX版本比起来,他们最初的版本很粗糙,但这是一个完整的系统。两年后,PDP-7已不能再用了。汤普森想在PDP-11 上继续UNIX的工作。里奇和汤普森知道他们不能让UNIX只在老旧的机器上运行,必须让它也能在新型计算机上运行。因为MULTICS的关系,汤普森知道要贝尔给他买一台新型计算机,并让他在上面写一个分时的操作系统几乎没有任何可能。但这难不倒他。当汤普森得知贝尔的专利办公室在找一种文字处理系统时,就写了一个办公室自动化系统的建议书,当时没人知道什么是办公室自动化系统。汤普森称其为办公编辑系统。对这一建议开始有些负面议论,1970年5月,该建议被批准了。一台当时最先进的台式计算机PDP-11,在1971年夏天被运到了贝尔实验室。它的硬盘要到12月份才到,这台计算机上没有任何任何软件。很快,汤普森就在PDP-11上搞定了那个文件编辑系统,专利办公室很满意。于是,汤普森有机会让贝尔买了一台更大一点的硬盘,和一个PDP-10内存管理系统。于是,UNIX的研发就在这台PDP-11上开始了。
当PDP-11的硬件准备妥当后,他们便把PDP-7上开发的UNIX移植到装有512Kb硬盘的PDP-11上了,并开发了一套文字处理工具。而这套工具便是后来 nroff / troff 。当时的UNIX提供了16K bytes 给系统、8Kbytes给应用程序,最大文件为 64K bytes。这个含文字处理工具的系统,被贝尔的专利部门采用,被称作 First Edition。UNIX移植成功后,汤普森用B语言为它添加了 Fortran Compiler,但因为B是一种解译语言(interpretive language),执行起来很慢,里奇为它写了一个编译器能生成机器码、并允许定义多种数据类型及结构,里奇称之为C语言。1973年,里奇和汤普森用C语言改写了全部的UNIX原始程序。于是,UNIX出现它的第一个正式版本–V5 (第五版)。
程序员人手一册的K&R C
1973年,UNIX的V5诞生后。里奇和汤普森决定让用户正式试用UNIX系统。用户是三位贝尔专利办公室的打字员,他们的试用非常成功。专利办公室决定正式使用UNIX,并大力支持两位开发者的工作。UNIX的最初成功很大一部分归功于PDP-11,当时贝尔对计算机的需求增加的很快。贝尔的工程师们急需多通道编程和分时系统。PDP-11是最佳选择。汤普森说:“这是一台具有很好的辅助功能的计算机,可靠、体积小、便宜,是当时硬件的最佳选择。但贝尔的工程师无法在上面使用DEC的软件时,他们到处寻找,听说有UNIX,就毫不犹豫地选择了它。”
UNIX在贝尔的内部和外部慢慢地成长。UNIX是一个很少有的没有被管理层要求快速上市的软件。从研发到正式发布,UNIX历经了十年的时间,UNIX已经被用户熟悉了,也被研发人员改进了很多,同时也获得了大量用户的赞许。里奇和汤普森刚完成UNIX的时候,UNIX很少有人知道。贝尔之外的人是在1973年10月,IBM的操作系统研讨会上才知道UNIX的。
1973年,UNIX在贝尔的装机数为25部。由于当年的贝尔是由AT&T及其子公司西方电器公司掌控的,贝尔主要业务是研究改进西方电器和AT&T的电信设备。同时根据军方合同,从事与国防有关的研发工作。AT&T因为有反托拉斯法的限制,无法从事任何与计算机销售有关的研发,AT&T的主管们对于当时UNIX的研发并没有多大的兴趣。贝尔内部对于UNIX也不是很在意。但为了应付贝尔内部各部门日益增加的UNIX用户与相关技术支持的需求,一个研发小组UNIX System Group(简称 USG)在贝尔成立了。该小组只是为贝尔内部的研发项目提供技术支持,并未从事研发,该小组也负责对外发放UNIX执照。当时的UNIX的研发,靠的是贝尔工程师们的自身努力。这种研发没有组织及系统性可言,而用户和研发人员都是工程师,这就使UNIX日后,不可避免地让一般人难以接受。
UNIX对贝尔之外的影响始于1974年汤普森和里奇在 Communications of the ACM 发表的一篇论文“UNIX Time-Sharing System”。1975年,UNIX-V6发布,UNIX-V6的功能胜过当时最昂贵的大型主机的操作系统,其最大特点是仅需做很少的程序修改就能移植到不同厂家的计算机上。UNIX-V6还附有完整的原代码,1976年起,正式由贝尔内部传播到各大学及研究机构。同年,UNIX因其良好的程序开发环境、网络功能、及实时性,被大多数电话公司采用。互动系统公司(Interactive System Corporation )把UNIX用于办公室自动化环境,成为第一家应用UNIX操作系统的私人公司。同年,UNIX被装到了Interdata8计算机上。这是UNIX首次安装在非PDP计算机上。从此UNIX开始被装到了各种不同的计算机上。
UNIX对于计算机硬件的真正独立,始于1977年。这是UNIX发展史上重要的一步,也是贝尔实验室大多数工程师喜欢它的重要原因。当时,里奇和汤普森尝试着把一个软件从UNIX机转到另一个计算机上,他们发现把一个软件从一台计算机转到另一台不同型号的计算机上很麻烦。还不如把整个系统从一台计算机转到另一台不同型号的计算机上容易。于是,他们决定把整个系统转过去,这样就不用去和软件的差异打交道了。他们从UNIX的核(Kernal)着手,确认那些需要重写的依赖于计算机机型的部分。没想到,只有10%的UNIX核需要重写。90%的UNIX核,包括文件系统、硬盘的供需次序、内存管理等等功能是独立于计算机机型的。
初期的UNIX是用汇编语言写的,为了能让UNIX在不同的计算机上工作。UNIX必须用高级语言重写。当时在计算机科学领域里一致认为,用高级语言写操作系统是低效而又不实际的。为了具有汇编语言的效率,里奇和汤普森发明了C语言。C语言具有高级语言语法和汇编语言的效率,能直接操作内存和输入输出系统而不需要用汇编语言。C语言能定义数据结构,操作比特和字符,C语言比汇编语言简单的多。有了C后,UNIX才真的成为独立于计算机硬件的操作系统。C语言也因此成了最受欢迎的系统编程语言了。
1978年,贝尔发布了对今后影响最重大的UNIX-V7(UNIX Time-Sharing System,7th Edition)。V-7包括 Fortran 77 编译器、Bourne Shell、文件处理工具、两台UNIX机器间的文件传输、数据处理工具、程序开发工具、简单的绘图工具、并支持C语言,V-7主要运行于 PDP-11 及 Interdata8 型计算机上。就当时来说其系统架构与功能已相当完备了。今天,该版UNIX被人们称为是最后一版真正的UNIX。由此可见V-7的重要性。
不久, DEC 推出了一款 32-bit supermini 主机 VAX, VAX 的操作系统是 VMS。这款迷你计算机的硬件无可挑剔,但 VMS 却让贝尔的工程师们大失所望,他们宁愿使用UNIX。于是,约翰·里瑟(John Reiser)和汤姆·伦敦(Tom London)以 V-7为基础把UNIX转移到了 VAX 上。该版本就是 UNIX V32。为了转移的方便,他们把 32-bit 的VAX当成是大一点的 PDP-11(PDF-11是16-bit), 为了提高执行效率,V32 放弃使用 VAX 硬件提供的虚拟内存的功能。即便如此,V32 也能支持 4Gb的地址。很快, V32 就被广泛地安装在VAX上了。
DEC 于1984年,推出来自己的 UNIX —— ULTRIX。
早在1973年11月,里奇和汤普森在普渡大学(Purdue)一场操作系统原理的座谈会上遇到了一位伯克利的教授鲍勃·法布里(Bob Fabry)。当天K&R发表的UNIX引起了法布里的极大兴趣。当时的伯克利还在使用大型计算机主机、批处理阶段,还没有UNIX这样的互动式开发环境。会后,他决定将UNIX带回伯克利。
1974年1月,贝尔实验室寄给伯克利一卷V-4的磁带,学生纪茨·斯丹迪福特(Keith Standiford)把它装在了计算机科学、数学与统计三个系合买的一台 PDP-11上。安装时,斯丹迪福特碰到了问题,便向贝尔求援。人在新泽西的汤普森通过速度只有 300-baud 的调制解调器在线进行侦错。这是 UNIX 的发展史上,贝尔与伯克利的第一次接触。
V-4顺利地在伯克利这台 PDP-11 上工作了。这是一台三个系所合买的计算机,计算机科学系好不容易装上了UNIX,而数学与统计系要使用 DEC’s RSTS system,经过协调,UNIX与DEC的系统以8:16小时的比例分配,供三个系轮流使用。一段时日后,UNIX的表现得到绝大多数学生们喜爱,他们纷纷将自己的作业转入UNIX的时段。一天占了16个小时的批处理时段则很少有人问津。
1975年初,DEC推出了新型的PDP-11,当时对UNIX的需求,在伯克利迅速增长。为了应付需求,计算机科学系决定再购买一台新型的PDP-11。这台机器让汤普森遇到了比尔·乔(Bill Joy)以及后来产生的 1BSD。这一事件是UNIX发展史上的标志性事件。当这台机器于1975年终运至伯克利时;汤普森受邀回母校当客座教授,科目就是UNIX。汤普森在校期间将新版V-6安装在新型PDP-11上。
比尔·乔
1975年,一位密执安大学毕业生比尔·乔来到了伯克利。当时比尔·乔和同学乔克·哈里(Chuck Haley,tar的作者)喜欢一起泡机房,汤普森也常来机房。他们成功地改进了 Pascal 的编译与侦错的能力,还提高了编译与执行速度。另外装上 ADM-3 的屏幕后,他们觉得 ed 文字编辑指令不好用;于是根据另外一个相似的 em 指令,开发展了自己满意的文字编辑工具指令 ex。
1976年夏,汤普森结束了他客座教授的工作回到了贝尔实验室。此时的比尔·乔和哈里已经开始探索UNIX核了,甚至还做出了一些修改。1977年初,比尔·乔制作了一卷磁带,上面写着 “Berkeley Software Distribution.”,这就是有名的 1BSD。其中包含新的 Pascal 编译器和 ex 编辑器。
1978年,伯克利进了几台新的显示屏ADM-3a,该显示屏支持光标地址显示,比尔·乔在其上完成了有人爱不释手;有人恨之入骨的文字编辑器——vi。1978 年,一个包含了加强功能的 Pascal 与 vi 及termcap的“Second Berkeley Software Distribution,” 即 2BSD, 迅速取代了1BSD。1975年,至少有75部 PDP-11 安装了2BSD。
比尔·乔多次公开说过,他要是知道vi会如此受“欢迎”的话,他宁愿当初没写 vi 。比尔·乔本想为vi加入一项多视窗功能,在他写这部分程序的时候,磁带机坏了,比尔·乔只好在没有备份的情况下工作,可程序写到一半,硬盘也坏了。在无可挽救又没有备份磁带的情况下,比尔·乔放弃了为 vi 增加多视窗功能。
1978年,比尔·乔在只有一台 VAX 的状况下,于1979年1月,在 VAX 上完成了支持虚拟内存的UNIX,V32 从此销声匿迹。不久伯克利的研究人员又加上了 Pascal;比尔·乔将 2BSD 上的工具转移了过来。这个版本就是 3BSD。一个首次支持虚拟内存的UNIX。
汤普森的国际象棋软件Belle
1970年代末,美国国防部高级研究计划机构(Defense Advanced Research Projects Agency,DARPA)正在为人工智能(Artificial Intelligence), 大规模集成电路及计算机视觉等研究找寻一个可共同作业的编程环境。硬件首选是VAX主机。操作系统是 VMS。但在 DARPA 与 DEC 商谈关于 VMS的支持事宜之后,DARPA没有得到满意的答案。这使他们倾向于UNIX。此时,UNIX已增加了支持虚拟内存的功能。
法布里教授写了一份建议书给 DARPA,建议他们以 3BSD 为基础,进行研发。这份建议书引起了DARPA的高度兴趣。 3BSD 也获得了 DARPA 成员的好评,最后,伯克利大学打败了卡内基·梅隆大学(Carnegie Mellon University)与 BBN(Bolt Baranek & Newman, Inc.),成功地获得了DARPA的资助合约。合约于1980年4月生效,为期18月。此后,DARPA便以 UNIX 为标准操作系统了。法布里教授取得DARPA合约后,成立了一个研发机构CSRG(Computer Systems Research Group)。比尔·乔负责软件开发。比尔·乔迅速以3BSD为基础,整合了新功能。1980年,伯克利发布了4BSD,没多久就被安装在近500台VAX上了。DARPA 采用了这个版本作为当时DARPA的标准 UNIX 操作系统。
当时,斯坦福大学发布了关于VMS与BSD UNIX在VAX上的执行效率评估。报告指出BSD UNIX在效率上不如 VMS 。比尔·乔得知后,花了不到一个星期的时间,重新调整了 UNIX kernal。也发表了一份报告,证明BSD在VAX上要比VMS优越的。1981年6月,这个新版本,以4.1BSD发布。
DARPA对4.1BSD相当满意,续约了两年,金额为先前合约的5倍。其中一半用于资助开发BSD UNIX。DARPA对UNIX的期望是;更迅速、更有效的文件系统、更大的程序可执行地址、弹性的编译能力、整合支持网络能力。同时,DARPA成立了一个指导委员会。
不久,比尔·乔开始整合BBN的TCP/IP,他对BBN程序的执行效率不满意,于是 他重写了一版自己的TCP/IP程序。并加入了一些网络工具。是为4.1aBSD,这个版本没有正式发布,仅在1982年4月开始供内部使用。
1982年春,比尔·乔加盟了刚创办的升阳公司(SUN Microsystems, Inc. ),成为升阳的第四号创办人。此后,UNIX开始随着升阳工作站一起,成为工业界最受欢迎的操作系统。
到了1980年代中期,UNIX已经成为计算机工业的操作系统标准了,尤其是在科技行业中。1984年9月17日的《财富》杂志说,世界上750所大学中的80%的计算机科学系在使用UNIX。任何一位计算机科学专业的毕业生,都必须学习UNIX。
UNIX改变了汤普森,他的工作更加自由了。过去,他在贝尔基本上一直在干自己想干的事。UNIX的成功,使汤普森更加自由了,贝尔基本上不管他了。作为二十世纪排名前十的程序员,有人问过他,有没有想过不做研究,而去赚大钱?汤普森说:“如果缺钱的话,你才会去忙着赚钱。而我的钱足够满足我的需要了。”有人问他为什么不以他的发明为基础,创建一家公司呢?汤普森说:“我没有兴趣创建公司,我很喜欢我现在的工作。”
后来,里奇参与了很多版本的UNIX研发。他说:“我一直在从事与UNIX相关的工作。”他还说:“我的兴趣和能量一直集中在与计算机相关的事情上。”
1983年的图灵奖授予了里奇和汤普森,图灵奖委员会在颁奖仪式上说:“UNIX的成功来自它对关键思路的选择和非凡的设计。UNIX为一代软件工程师开启了全新的视野和编程思路。UNIX开创了一个新环境,让软件工程师们可以在同行们的工作上开创新的领域。”
1998年,克林顿总统授予里奇和汤普森国家技术进步奖,以表彰他们在计算机领域里取得的成绩。
里奇和汤普森当年为了他们自己创建一个方便互动的编程环境,开发出了UNIX。他们的成就远远超出了他们最初的目标。对于未来,里奇说:“UNIX的普及靠的是非传统方式,我们从未想到UNIX会成为最先进的超级计算机Cray-2的操作系统,同时又是不到$1000美元的圣诞礼物的操作系统。我很确定UNIX将继续成为工业标准,但是,我仍然怀疑UNIX会排斥其他的操作系统,而成为唯一的操作系统。”
克林顿总统授予里奇和汤普森国家技术进步奖
汤普森在贝尔实验室有一个有名的趣闻。安装了UNIX的PDP-11被放在贝尔实验室供大家使用。很快,大家发现汤普森总能进入他们的帐户,获得最高权限。贝尔实验室的科学家心比天高,都被搞得很郁闷。有人出来分析了UNIX代码,找到后门,修改了代码,再重新编译了UNIX。大家都以为这个世界该清净了,没想到汤普森还是轻而易举地拿到他们的帐户权限,他们百思不解,只有继续郁闷。这一郁闷,就是14年,最后汤普森说出了缘由。的确有后门,不过后门不在UNIX代码里,而在编译UNIX代码的C编译器里。每次C编译器编译UNIX的代码,就自动生成后门代码。而贝尔实验室的人都用汤普森的C编译器。
汤普森于2000年从贝尔实验室退休,加入了软件公司Entrisphere。2006年,汤普森加入了谷歌至今。
里奇虽然发明了C语言,但他最爱的编程语言是Alef,在Plan9系统上运行,支持并行编程。Alef的语法和C相似,但数据类型和执行方式和C不同。说到编程语言,里奇对后来人的建议非常中肯:抱着学习的目的来开发你自己的语言,不要希望它被众人接受。这个建议不但对语言开发有用,也适用于大型系统的开发。里奇当初没想到C会风行世界。他开发C的初衷,是要消除自己对现有工具的不满。谁知里奇无心插柳,C竟然受到众多程序员的狂热拥戴,里奇自己也大惑不解。一次采访中,里奇说大概是因为C的抽象程度刚好既满足了程序员的要求,又容易实现。C一度是UNIX上的通用语言也是原因。但里奇对编程语言出色的审美意识奠定了C广为流传的基础。
里奇于2011年10月12日,在新泽西的伯克利高地去世,死因是前列腺癌和心脏病。苹果公司总裁乔布斯于一周前去世,里奇的死没有引起很大媒体的注意。
开发UNIX的另一位重要人物比尔·乔也有很多趣闻。据说他在伯克利,闲来无事想看看自己能不能写个操作系统,于是三天里内就写了一个自己的UNIX, 也就是BSD的前身。另一个传闻是,1980年初,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。当时正在读研究生的比尔·乔,拒绝把BBN TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。比尔·乔决定自己写,很快写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知道他们的代码还不如一个研究生的好。于是他们找来了比尔·乔一起开会。BBN问:你是怎么写出来的?比尔·乔说:很简单,你一边读协议,一边编程就行了。比尔·乔毕业后,在当时只有一间办公室的升阳工作, 没多久,就把第一个RISC CPU——Sparc设计出来了。2005年,比尔·乔加盟硅谷最有名的风险投资公司KPCB。KPCB的主要合伙人道尔(John Doerr)说:“他把合伙人的平均智商提高了二十个点。”
1970年到2000年,是计算机产业奠基的时代,也是英雄辈出的时代。这些人不但有着超人的天才,而且还能把握计算机产业的未来。他们不但为自己创造了足以流芳百世的业绩,也为我们创造了一个更为便捷、更为有效的工作环境,他们是这个时代的真正的革命者。
一个世纪前,人们要给远方的亲友送去问候,需要依靠邮差几天的传递。如今,人们只要坐在家中的电脑前轻点鼠标,万里之遥的友人便可在瞬间收到你发去的电子贺卡。计算机和网络技术的发展,使传统书信退出了历史舞台。人们不再苦苦等待千里之外的一封书信。短短一、两分钟,一封电子邮件就可以到达世界每一个角落。人们的交流、学习、会议等活动不再受到时空的限制。只要你愿意,短短几分钟内,便可以召集一个跨地区的,有上百人参加的会议。计算机技术使人们不再受到时空限制,社会的发展迎来了一个大沟通、大融合的时代。人们的交往更加频繁,更加及时,信息因此而更加丰富,工作效率不断提高,社会化进一步加强。今天,人们生活的任何一方面都无法离开计算机技术,而实现这一切的最重要的里程碑之一就是里奇、汤普森、和乔当年研发的UNIX操作系统。
转: