本文发表在 rolia.net 枫下论坛闲话操作系统
最近在看Eric.Raymond写的一本《Unix编程艺术》,里面讲了不少计算机的、特别是Unix的历史渊源,出于个人爱好,我对电脑的发展史一向比较关心,也看过一点相关的书本、资料,于是就当是作笔记也好,写学习总结也好,把我所知道的关于计算机操作系统的历史拉拉杂杂地写下了一点文字(如果有人喜欢看,以后也会写些其他方面的),想到坛子里也许还有同好,就贴了上来,欢迎交流,欢迎拍砖(如能有根有据地拍,那就更求之不得:)。
闲话少说,开练。
关于操作系统的定义,我没有找到一个权威的解释,基本上可以说,它是一个程序,一个介于计算机硬件和计算机用户/开发者之间的程序,用户通过它来操作计算机,开发者用它提供的接口来编写程序。操作系统大概可算是最重要(也可算是最复杂)的程序,基本上,它决定了我们能用电脑干什么和怎样用电脑,软件当然是千变万化,不断发展,但无论是在那一种操作系统下跑的软件,必然受限于操作系统所提供的功能,换句话说,它只能在操作系统划下的圈子里翻筋斗。
第一代计算机是电子管(vacuum tube)计算机(大约1945~1959)是没有操作系统的,比如1945年问世的第一台电脑ENIAC,那玩意每秒只能做5000次加减法,连现在地摊上最廉价的计算器都不如,你给它写个操作系统,它也跑不动啊。所以那时操作电脑都是赤祼祼地跟主机打交道,要它干活,得一步步地按开关来告诉它(键盘是没有的,因为用的是机器语言,开关就够用了,后来出现了汇编语言,才出现打孔带这种输入方式),至于输出,它是靠两排小灯泡的闪烁来实现(跟眨眼睛差不多,闭着就是0,开着就是1,所以按照信息技术的理论,眉目岂止能传情,任何信息都可以通过眨眼睛来表达:)。蓝色巨人——IBM(国际商用机器公司)从这时就开始涉足计算机,在这个时代,他们推出的产品是700系列。
第二代的计算机是晶体管(transistor)计算机(大约1959~1964),这个时代的计算机都是所谓的大型机,代表产品是IBM的1403机,运算能力比第一代快多了,达到了每秒几十~几百万次,这个数字看起来还不错,操作系统够简单的话,是可以跑得动的,操作系统也就是在这时候出现的(也有一种说法,说是在五十年代中期就出现了简单的操作系统,但没看到进一步的介绍,)。那时的大型机基本上是一种型号配一种操作系统,通用?没门。这时候的计算机工程师通常也是横跨硬、软件领域,非常的牛X,比如著名的CRAY巨型机,就是由Seymour Cray一手包办软硬件设计,让很多计算机FANS惊为天人,后来,苹果电脑横空出出世,Steven Wozniak也曾再现这种辉煌,这种包办一款电脑软硬件设计的壮举,搁现在,相信没人 可以办到了。在文明发韧之初,类似情形比较常见,古希腊的那些大牛,亚力士多德什么的,都是学贯文理,很多领域都插上一杠子,往往还成了创始人,到了牛顿,虽然差点,文科基本没沾边(神学据说他钻研颇深,但成就如何不得而知),但在理科的好几个领域也是开宗立派、威风八面,现在的科学家大概只有高山仰止的份了。但学术的传承有好几千年,牛顿到现在也有三四百年了,而计算机的历史到今天满打满算也不过六十一年,居然就到了这份上,可见其发展之快。
那时的操作系统跟我们现在所看到的其实大相径庭,当时只是把它称作Batch System,它的功能也非常单一,仅仅是把一些常用的操作指令进行了封装以供程序调用,甚至都谈不上用户界面。
但就在这个时代,有一个特别值得一提的操作系统已经开始酝酿,就是大名鼎鼎的OS/360。
(待续)
这款操作系统出自蓝色巨人——IBM(国际商用机器公司)之手,IBM在电脑史上的地位堪称泰山北斗,甚至有专家说过,“电脑的历史就是IBM的历史”。而“360系统”堪称IBM历史上最重要的项目之一。
在61年年底,IBM开始打算实施“360系统电子计算机计划”,据当时的估算,整个计划投资约需50亿美元(这可是在60年代初,十几年前的“曼哈顿工程”才花了20亿),这是不折不扣的大手笔,要知道,当时IBM的年营业额还不到这个数字。
之所以如此花钱,是因为这项计划要做一些以前没人做过的事,这将是一个通用的系统(360就是360度的意思,表示该系统全面的应用范围),该系列不同型号的计算机将能享用同样的设备,如磁带机、打印机等,能使用同样的软件,并且可以相互连接,一起工作,这些在今天看来理所当然的事,在当时可是闻所未闻。
该项目在硬件设计上很有创新,乃至IBM不得不自己动手设计制造芯片(因为买不到),但更大的困难却是在软件方面,要让所有的软件适用于所有的电脑(当然,仅限于360系列),这个理念让IBM的软件工程师们伤透脑筋,投入到这个项目中的软件工程师超过2000人(Windows2000也只动用了1700名),花费超过5亿美元,竟然超过了硬件研发的费用,所有这些都是创纪录的。
负责这项艰苦卓绝的开发任务的,是Frederick Brooks,当时年仅三十,他是世界上第一批获得计算机科学博士学位的人之一,有趣的是,当开发这个新型操作系统的计划提出时,Brooks本是最强硬的反对派,因为他觉得这个项目的难度骇人听闻,实在是不切实际。但当IBM的管理层拍下板来,要Brooks担当重任时,他居然慨然应允,高风亮节,实在是令人佩服。
360操作系统的开发用了5000个人年(人年就是一个人一年的工作量),由于从未有过开发这种大型软件的经验,开发组陷入了“有史以来最可怕的软件开发泥潭”,最终也没能实现当初的设想。Brooks后来根据这次开发任务的经验,写了一本《人月神话》(The Mythical Man-Month),成为软件工程领域内的经典著作(某种程度上是宣扬的一种失败论)。他本人更在99年获得了计算机领域的最高奖——“图灵奖”。
尽管软件开发工作未获全胜,但360项目还是取得了辉煌的成功,IBM在籍此在计算机行业几乎是一统天下,IBM/360更被誉为人类从原子能时代进入信息时代标志。此后IBM开发的大型机系列都保持了与360系统的兼容,直到最新的z系列,在360上写的程序仍可以不经修改的运行,“兼容”这一概念从此开始深入人心。
(待续)
需要交待一下,360计划虽然是在61年开始启动,但等到完成己是1964年,它的主要部件采用了集成电路(Intergrated Circuit,IC),属于第三代计算机,它也是第三代计算机的标志产品,还有前面提到的CRAY巨型机,也属于第三代。Cray此人厉害无比,不可一世的IBM几次栽在他手上,在IBM研制360时,Cray还在CDC(控制数据公司,好象那时的计算机公司起名都很低调,象IBM、DEC都是平铺直叙,不象现在的IT公司,名字一个比一个花哨)工作,他带领的团队只花了700万美元就搞出了一台比IBM的产品快上3倍的东东,让IBM震惊不己,而他的诀窍就在于开创性地使用了并行技术(就是用多个处理器并行工作),这项技术到现在还是制造超级计算机的基础。
Cray后来离开CDC自立门户,于1972年开了家用自己名字命名的公司(这好象是西方的传统,象HP、DELL都是这么来的,Microsoft也差点就叫Alan-Gates),专搞巨型机,并练就了一门叫做“向量处理”的绝技,独步天下,在80年代,他的产品一度占到世界巨型机总数的70%(“侏罗纪公园”里的恐龙DNA就是用CRAY机来处理的,呵呵),让IBM丢尽脸面。不过CRAY公司其亡也忽焉,后来渐渐没落,公司几次易手,先后被SGI和TERA收购,巨型机老大的位子不久就被IBM夺回去了。
说了半天,也没提操作系统,有点跑题了,呵呵。其实是因为关于CRAY机的操作系统,我也一抹黑:(,只是听说它的操作系统都是由Cray博士用机器码(就是0101001......)写出来的,居然没出现什么BUG,我真是无语了~~
(待续)
CDC和CRAY并非唯一斩IBM于马下的公司,在小型机领域,IBM也是一败涂地,胜利者叫做DEC(数据设备公司,成立于1957年,明明是家计算机公司,招牌上却不带计算机字样,之所以如此,是因为当时IBM在计算机领域只手遮天,不敢撄其锋芒也),创始人Ken.Olsen,是计算机历史上一个颇有悲剧色彩的人物,他能力非凡, 白手起家创建了长期排名世界第二的计算机公司,在1986年被《财富》杂志评选为“全美历史上最成功的企业家”,但最终却因经营不善,被他自己一手创建的公司扫地出门(Steve.Jobs倒也有此经历,不过他卷土重来了),更因为对PC的错误估计(1977年曾说“我们没有理由认为人们会需要家用电脑”)被人们引为笑柄(其实犯这种错误的名人多了,不一一列举)。
为了不引起IBM注意,DEC推出的第一台机器都不敢叫计算机,而是取了个暧昧的名字叫做“程序数据处理机”(PDP,呵呵,了解电脑发展史的人肯定如雷贯耳)。PDP-1于1959年推出,全晶体管构造,在当时还是电子管计算机当道的年月,可说是相当先进。相比当时的那些大块头,这台只有冰箱大的机器显得相当小巧,这台设计精良的机器让DEC发展迅速,仅仅几年功夫,DEC就从借来的七万美元起家发展到年销售额几百万美元,在六十年代初,这可是个很可观的数字。
DEC坚持走小型机的道路让一些本来只能望着昂贵的计算机兴叹的单位终于可以买上一台,它独创的分时技术也为更多的人使用计算机创造了机会,在众多的受益者当中,有一个叫Ken Thompson,在操作系统的历史上值得大书特书。
(待续)
Unix可能是世界上最有影响的操作系统,它的第一版是由Ken Thompson在一台PDP-7上完成的。
Thompson当时供职于AT&T的Bell Labs(贝尔实验室,一个资格极老、极牛的科研机构,晶体管就是在这里发明的,96年AT&T被拆分后划归朗迅),Bell Labs曾经参与了一个叫做Multics(Multiplexed Information and Computing System)的研究联盟,该项目旨在建立一个多功能的“信息应用工具”,以支持多用户对大型机的交互式分时操作,但跟IBM的360计划一样,这个志向高远的项目不幸以失败告终,尽管也得到了几个不太成功的系统。Thompson参与了这个开发项目,散摊子的时候,他收获了一些灵感,还有一个自己编写的游戏(不务正业啊~~这个叫做《星际旅行》的游戏只比公认的史上第一款游戏《太空争霸战》(1962)晚了几年而已)。
Thompson首先是在GE(通用电器,没错,他们那时也造计算机)的大型机上玩,糟糕的是,在这台机器上,源自Multics项目的操作系统运行的很不尽人意,玩起游戏来,响应忽快忽慢,让Thompson很是不爽(我们当然能够理解,想想你正在魔兽中杀的过瘾,机子忽然停下来狂读硬盘是何等扫兴),于是他以开发一个新的交互式操作系统的名义,向领导要求配备一台DEC-10——另外还有一个原因,据Thompson的死党Dennis Ritchie(也是个大牛人,C语言的发明者,Unix的合作发明者)透露,在Ge上玩一次游戏的费用高达75美元(当时的机时可是很贵的),想来如此挥霍公款,Thompson心下也有点惴惴,要台机子自己瞎掰,就安全的多——但刚在Multics项目上遭遇失败的领导们断然拒绝了他的无理要求(呵呵,可怜的Thompson),最后,Thompson只搞到了一台已经废弃的PDP-7。
(待续)
PDP-8是DEC的第一台采用集成电路的计算机(第三代),也就是说PDP-7还是一台晶体管计算机,这就好比,你向领导打报告要配一台酷睿2,最后却只能在仓库里翻一台286出来用,Thompson的沮丧可想而知。PDP-7的配置如何,我没查到资料,但PDP-11也只有512KB的磁盘,PDP-7想来更少得多,内存应该只几十K(别吃惊,这个数字我估计得很乐观了,几十K内存也是可以做不少事的,Gates同学写的第一个BASIC解释器可是在一台4K内存的Altair上跑),显示器当然是别想,一台电传打字机把输入输出都包了(什么?没显示器怎么玩游戏?谁告诉你是游戏一定是视频的?)。后来,Thompson在忆苦思甜的时候告诉Raymond,我那时用的机子那个惨啊,内存磁盘加一块还赶不上现在一个最便宜的手机~~
要在这么烂的的机器上玩游戏,当然得下一番功夫,原有的系统肯定是不能支持了,得重头干,没说的,为了游戏。经过Multics项目的煅炼,Thompson对于写操作系统已很在行,反正机器烂,不可能搞什么复杂的名堂,什么项目计划书呀,都免了,就跟Ritchie两人合计合计,他一个人花了两天时间就搞出来一个原型,厉害吧?WindowsNT的主设计师(也是VMS的设计师)David Cutler曾有一句名言——“Who can't write an OS in a week?”,固然牛气哄哄,比起Thompson似乎还颇有不如,呵呵。
(待续)
那是1969年,Thompson搞出来的这个东西就是Unix的雏形,尽管把它称作Unix还有点勉强,但已经显示出Unix的一些基本特征——简洁、高效、比当时所有的操作系统都更注重交互性、对程序员友好(它就是程序员写出来给自己用的,是当时唯一允许程序员边写代码边测试的系统),也许,还有那么一点散漫,而且,即使如此恶劣的硬件条件下,它仍然具备一个简陋的文件系统,有特殊的文件类型以支持目录和设备,甚至,可以支持多任务(想想晚它十几年问世的DOS还只能支持单任务,就知道Thompson有多牛了,当然,DOS可以用变通的方式支持多任务,但毕竟不是原生的)。当然, 还有很多Unix的特性它还不具备,比如,它的核心是用汇编写的(汇编器也是Thompson自己写的),当然不具备可移植性,并且,只支持两个用户(想来就是Thompson和Ritchie,呵呵)。
有一点值得一提,这个系统除了用汇编以外,还用到了另外一种语言,就是解释型的B语言(也是Thompson自己发明的,这家伙真是自力更生模范的说~~),主要用来写应用程序。B语言是Thompson在一种叫作BCPL(Basic Combined Programming Language,由剑桥大学的Matin Richards在CPL语言的基础上简化而来,CPL是在ALGOL 60语言上发展而来,至于ALGOL 60可就牛了,它被称作是“计算机科学诞生的标志”,这些语言通通源自剑桥)的语言的基础上简化改进而来(之所以叫B语言,就是把BCPL精简提炼的意思),它非常简单(不支持数据类型和结构,放在今天真难以想像),并且极亲近硬件,可以把它看作是一种稍微高级了一点的汇编语言。后来,Ritchie给B语言加上了数据类型和结构的支持,推出了一代王者——C语言(意思是“BCPL”中排在B之后,在TIOBE语言排行榜上至今在一、二名徘徊),并将Unix用C语言重写,那就是后话了。
(待续)
经过一番鼓捣,Thompson的游戏终于可以在PDP-7上跑起来了,但这台机子毕竟太烂,而且还是借来的,Thompson他们一直期待着能搞台更好的机器用,在1970年,这个机会来了,Bell Labs的专利部门需要一套“文字处理系统”(他们的专利可是很多的),当时可没有现成的Word,Thompson就把这活接下来了, 并名正言顺地买了一台PDP-11/20(比当初申请的DEC-10还是便宜多了)。
他们首先把Unix从PDP-7上移植了过来,汇编写的代码没什么可移植性,所以基本上就是在PDP-11上重写了一次,这种没多大创造性的工作想来做起来并不怎么愉快,给后来Thompson下定决心,用高级语言(C语言)来写操作系统增加了动力(MULTICS可能是最早用高级语言写操作系统的尝试,当时用的是PL/I,以失败告终,那时的普遍观念,操作系统是不宜用高级语言来写的)。
在PDP-7上,他们曾经写过一个叫做roff的文本格式化程序,再配上一个编辑器,一个“文字处理系统”基本上就齐活了,于是Bell Labs的专利局成了Unix的第一个商业用户,这是在1971年11月,在与系统配套的手册中,该版本被称做“First Edition”,有些史料就把这一年作为Unix的诞生之日。
顺便说一下,Unix这个名字是Thompson在Bell Labs的同事Brian Kernighan取的,在1970年,Kernighan开玩笑地把Thompson在PDP-7上的那个简陋系统称为“UNICS”,意思是“UNiplexed Informationand Computinig System”,这是相对于MULTICS来的, MULTICS是“Multiplexed Information and Computing System”的意思,后来,UNICS变成了Unix并且流传开来(这种简化应该是出自一种黑客趣味)。
(待续)
1972年Unix发布了第二版,最大的改进是添加了后来成为Unix标志特征之一的管道功能,所谓管道,就是程序之间交流数据的通道。这一设计,对鼓励简洁、小巧、灵活,而又注重通用和协作的Unix程序设计风格意义重大,与此相关的,还有过滤器这一设计,Unix下的程序大多小而精,但相互之间的协作性极好,与WINDOWS下推崇大而全的程序设计风格大异其趣,这是在系统设计之初就埋下了种子的。这一年,Unix的装机数达到10台,都是Bell Labs内部的机器。
在写第二版的时候,Thompson和Ritchie曾经试图用B语言来重写核心,但因为B语言功能太弱,最后放弃了。Ritchie因些萌生了搞一个新语言的想法,它必须强大到可以写系统级软件。于是,在对B语言进行了卓越的改进之后,一个传奇——C语言诞生了,这是在1973年,此后,这一语言包揽了绝大多数的系统级开发,在前两年泄露出来的WINODWS2000的多达几百M的源代码中,大家看到,除了极少的汇编和C++,绝大部分代码都是C语言写就,在记者问到Ritchie为什么C语言会如此受欢迎时,Ritchie很低调的回答,可能是C语言的抽象程度既能满足需要,又比较容易掌控。跟Unix一样,C语言确实是一种简洁而优美的语言,“审美”是这种殿堂级软件设计思想的核心,爱因斯坦曾经说过,描述基本物理理论的数学方程中必须有美,与软件设计倒是不谋而合(但世事难料,比如Windows,或者Perl,这些许多人认为比较臃肿、丑陋的设计也都活得有滋有味,当然,能挺多久难说)。顺便说一下,虽然C语言如此威猛,但身为C语言之父的Ritchie最爱的语言却并不是它,而是一种我听都没听说过的Alef。
有了C语言这柄利剑,Thompson和Ritchie很快就重写了Unix,在MULTICS项目失败以后,用高级语言写操作系统的梦想终于实现了,好多年后,Ritchie骄傲的写到,很肯定,Unix的成功很大程度上源自其以高级语言作为表述方式所带来的可读性、可改性和可移植性。看着这个基本上达到了预想的作品,Thompson和Ritchie不免有些沾沾自喜,觉得可以拿出去“炫”一把了,于是在1974年,他们在《美国计算机通信》(Communications of the ACM)上发表了一篇文章,第一次对外面的世界展示了Unix的存在。
且说这个新版的Unix搞出来以后,Bell Labs里的很多科学家都挺感兴趣,经常跑到那台PDP-11上去鼓捣一番,但很快他们就发现,自己设置的帐户Thompson总能轻易地闯进去,Bell Labs里的人物岂是泛泛之辈,怎甘受此羞辱,于是就有人把源码翻了出来,经过一番分析,去掉了后门,然后重新编译,于是,整个世界清静了——且慢,正在他们沾沾自喜的时候,却发现,帐户又被Thompson破解了,这下大家彻底郁闷了,这一郁闷就是好多年,Thompson的洋洋自得就别提了。直到14年后,Thompson才突然良心发现,道出了个中巧妙,原来代码中的后门是有的,不光是系统本身,还藏了一个在C编译器中,系统本身的后门虽然被清除了,可还是用有后门的编译器来编译的啊!哈哈。
而Ritchie就厚道多了,他只是很热心地向大家推介他的C语言,并鼓励大家使用C语言中的函数调用——这真是一种先进的设计方法,何况还有Ritchie信誓旦旦地保证——C语言中的函数调用的机器开销真的很小很小,于是,人人都开始写函数,搞模块化,等到大家终于搞清楚,在PDP-11上,函数调用的机器开销竟达到50%时,已经是积习难改、欲罢不能了,至于Ritchie,当然是躲到一边偷笑去了(话说回来,这种设计思想毕竟是正确而先进的,只是在当时落后的硬件条件下,显得有些奢侈,呵呵)。
Thompson和Ritchie在Communications of the ACM上的文章发表后,引起了许多大学和实验室的关注,因为文中着重鼓吹Unix的简约设计及在低性能机器上的良好表现,大家(主要是那些用落后机器的穷单位,嘿嘿)都想见识一下。本来这是笔送上门来的生意,但AT&T有点特殊情况,因为它由来已久的垄断地位,早在1958年就被反托拉斯调查,根据那次调查达成的协议,AT&T不准进入计算机相关的商业领域(IBM少了个大对头),也就是说,AT&T不能拿Unix卖钱(交待一下,Unix虽然是Thompson他们自作主张搞出来的,但毕竟是AT&T员工的工作成果,因此AT&T享有版权),而且依据那次协议,AT&T有义务将电话(这是本行)以外的技术许可给任何提出要求的人——这条有点匪夷所思,简直是欺负人嘛:)——正是这条协议,给Unix的流传大开方便之门。于是,在仅收取工本费之后,Thompson开始将Unix的磁带和磁盘一包包的寄往世界各地(是不是有点史诗味道?:)——据说,每一包里都附了张小纸条,上书“love,ken”——真是剑胆琴心的说~~~~
寄出去的Unix是第五版,附有源代码。犹如散落的火种,这些被安装在各处管理松散的廉价计算机上(这点很重要,如果是安装在昂贵的大型机上,就没有那么多机会让人瞎鼓捣了)的操作系统,点燃了许多计算机爱好者的创造热情,他们日以继夜扑在上面,摆弄代码,添加功能,然后彼此交流,相互炫耀。不少大学都开始拿Unix作教学之用。
大家在遇到麻烦的时候,可以向Thompson他们的小组打电话 , 或者通过原始的UUCP(Unix to Unix Copy Program, Bell Labs开发的一的种在Unix机器之间通过电话线和MODEM通讯的程序)发送问题,甚至可以跑到Bell Labs去与他们当面交流。Unix许多重要的改进和发展正是由这群主要来自于各所大学的爱好者们完成的,这些成果被反馈到Bell Labs。在1979年发布的第7版Unix中包含了很多由爱好者们贡献的创意乃至代码,这是公认的第一个完整意义上的Unix。可惜由于版权问题及商业利益的影响,这种开历史先河的发展模式并没有持续多久,幸好,在好多年以后,在Internet的支持下,我们将会看到,Linux,这一Unix的变种,成功地将这一模式予以了辉煌的再现。
最早散布出去的UNIX几乎都是装在DEC的PDP机器上,在1976年前后,开始有好事者将其移植到其他种类的机器上,包括Interdata系列、IBM的Series1系列以及VM/370。这时,Thompson和Ritchie用C语言编写系统的苦心开始得到回报——即使是设计大不相同的异构机器,移植工作也进行的相当顺利(当然,是相对的),Ritchie甚至宣称,将UNIX移植到别的机器上比把一个应用程序移植到另一个操作系统中还要简单。1978年,DEC公司推出新的拳头产品VAX后,UNIX很快就被移植到上面,尽管没有支持VAX特有的换页功能(一种内存管理的技术),但仍然很快流行开来,对DEC苦心开发的专门用于VAX机器的VMS构成了重大威胁。
UNIX在初期主要是用于DEC的机器,尽管没有正规的技术支持,但仗着灵活、快捷、容易修改和扩充以及资源丰富(包括支持的硬件设备更丰富,DEC的操作系统只支持自己的系列产品)的强大优势,很快就严重影响到DEC自身的软件推广。碰上这样的飞来横祸,DEC当然是非常恼火,他们对使用UNIX而带来的硬件问题拒不提供支持,但尽管如此也不能阻挡大家对UNX的热情。而VAX/VMS乃是DEC寄予厚望的战略级产品,技术那是相当的优秀,居然甫一推出,就又遭到UNIX的追杀,也难怪老板Olsen会口出恶言,讥讽UNIX是“蛇油”(意为“骗人的万用药”)了。DEC苦撑了几年之后,终于不支,改变态度,于1982年推出了自己的UNIX变种——DEC ULTRIX,但在推广策略上,仍是以自家的VMS为主导。DEC公司的保守作风终于酿成大祸,在别的公司推出专门针对UNIX设计的机器后,DEC的江湖地位每旷愈下,在PC问世后,更是一蹶不振,后来连年亏损,1992年把Olsen赶下台也没解决问题,终于在1998年,这个曾经的传奇——一度排名世界第二的计算机公司被后起之秀COMPAQ并购,不过96亿美元的天价也算是对它价值的承认。COMPAQ后来被HP以260亿美元收购,HP后来被……HP这么大的块头,估计一时半会也没人吞得下它,呵呵。
DEC的机器曾是UNIX诞生的温床,但DEC的没落UNIX却起到了相当重要的推波助澜的作用,如果DEC当时采取拥抱UNIX的策略,也许计算机产业又是另一番格局了。当然,世事难料,这种推测也只是扯淡罢了。
VAX是一种32位的小型机,因为它惊人的寻址能力(达4GB,尽管由于成本关系,大多数VAX机器也只配备了1M内存),DEC为它设计了革命性的换页技术,的确让Unix有点赶不上趟,但这项让DEC引以为傲的技术优势并没有保持多久,仅仅一年之后,一个叫做Bill Joy的来自Berkeley(加州大学伯克利分校,University of California at Berkeley)的学生就在Unix上实现了这一技术。
Berkeley是一所很牛的大学,做为一所州立大学,它在很多领域都能和那些财大气粗的私立学校相抗衡,它不仅拥有数以十计的诺奖得主,而且还是许多社会潮流的源头,比如嬉皮文化、反越战运动等。在九十年代末的一次美国大学评比中,它的不少专业都名列前茅,比如文学、新闻等,当然,更值得说的是,它的电脑和电子工程技术专业名列全美第一,甚至把更鼎鼎大名的MIT、Stanford都甩到了后面。Berkeley与Bell Labs似乎关系不错,早在Thompson发表那篇宣言般的论文之前,就搞了一份Unix来用,还专门为此买了一台PDP-11/45,比较丢人的是,他们鼓捣了几天也没把Unix装上去,最后还得劳动Thompson亲自出马,呵呵。其实原因是出在Unix自身,因为他们买的那台PDP太高级,竟然配备了双硬盘,Unix那时还不支持。
其实早在此之前,Joy就已经致力于Unix的研发。在1997年年初,Joy就编写并发布了一个以BSD(Berkeley Software Distribution)命名的Unix版本(有个传说,说最初Joy用三天时间就写成了一个简陋但可用的Unix,忍不住怀疑搞操作系统的都是一伙超人~~~~:),BSD后来影响如此之大,足可与AT&T的原版相提并论。在第一版的BSD中,Joy就搞出了些新意思,他写了Unix中的第一个Pascal编译器(Pascal由瑞士的Niklaus Wirth教授于1970年发明,是一种影响深远的语言,许多现代语言,例如Java都受过它的影响,尤其以应用于教学著称,当然也应用于许多实际的项目,著名的如Delphi,它甚至被用来写操作系统,Apple早期的MAC系统就是用他们自己的特殊版本的Pascal写的),以及Unix中的第一个全屏编辑器VI(到现在仍是Unix中最常用的程序之一,虽然编辑器出了无以数计,但能与VI相提并论的,大概也只有Emacs了,这又关涉到另一个大牛人,先按下不表:),另外,他还写了一个重要的C语言函数库termcap(也流行了好多年)。
早期的BSD并不全是Berkeley搞出来的,里面含有大量属于AT&T的代码,以及一些其它大学贡献的代码。这时的AT&T由于不能用UNIX赚钱,所以态度很不明朗,对于教育及科研机构的政策很宽松,只收取象征性的费用,提供源码,并且没什么使用限制(很高明的推广策略,事实证明成效斐然,堪与微软对盗版暧昧的纵容相比),对于企业用户的收费就很高(一份带源码的拷贝要2万美元,装多台机器的话还得另加,比起BSD来这还算便宜,一份源码版的BSD要4万),而且限制多多。但也不能说它把UNIX商品化, AT&T没有自己的UNIX开发计划,而且既不作广告推销,也不提供技术支持、售后服务,对产品品质也不作任何保证(如果出现什么BUG,你也得自己认了~~),至于没有试用期,一手交钱一手交货那就不用提了,跩到这个份上,也实在不象做生意的样子:)。
但Bell Labs内部还是成立了几个小组(类似学校里的兴趣小组,当然也可能怀有商业用心:),承担了一部分UNIX的技术支持工作(非官方),并且进行进一步地开发。Thompson和Ritchie他们的小组就叫“Research”,他们主要搞研发(并不限于UNIX),对技术支持没多大兴趣,挑大梁的是另外两个,一个叫PWB(Programmer's Workbench,他们对UNIX做了不少改进,并且发布了一个自己的版本PWB/UNIX),一个叫USG(UNIXSupport Group)。糟糕的是,这几个小组互相看不顺眼(文无第一,武无第二,这也是没办法的事:),对UNIX的理解也不尽相同,乃至各自散发出去的的版本都不是很兼容,UNIX复杂到让人头大的谱系这时就已开了滥觞。
在这种状况下,UNIX尽管在教育科研领域声誉日隆、炙手可热,但对计算机产业的影响仍然有限,毕竟它还只是一种非标准化、非商业运作的技术,只能拿来用,没法靠它赚钱。后来AT&T的政策松动了一些,在1978年前后,才开始出现商业公司提供UNIX的技术服务。1980年,AT&T发布了UNIX的distribution binary许可证(可分发二进制版),这下别的公司终于可以用UNIX来卖钱了,第一家买下这种许可证的公司是Onyx Systems,值得一提的是,它的产品是微机(比较另类的一种,采用Z80000的CPU),UNIX与微机的渊源可谓由来久矣。
差不多与此同时,有公司开始开发UNIX的克隆版——就是全盘复制UNIX的功能,可以兼容UNIX的程序,但代码完全重写。第一个版本是Whitesmiths公司推出的IDRIS(它雇了几个前AT&T的程序员,还曾经推出第一个商业C语言编译器,),开始为了避免版权纠纷,Whitesmiths有意在库名称及参数顺序等地方作了些小改动,后来AT&T高姿态地宣布不追究这些细节,于是开发与UNIX完全兼容的系统成为可能,很快很多公司(包括几乎所有的业内大腕)就开始蜂涌而上了:)。顺便说一下,上世纪末的时候,有一家澳大利亚公司曾开发出一个兼容Windwos的操作系统,但因为版权关系,没来得及推广就夭折了:(。
举几个开发过UNIX克隆版本的公司名字,有IBM(名字叫AIX,1986年发布),HP(HP-UX,1982年),SGI(IRIX,1987年),Microsoft(XENIX,1980年),SUN(Solaris,1985年),Apple(MacOS X,2001年)~~~~其中有一些主要源自BSD的版本,如SUN和Apple,但追根究底,仍是来自那个出于Bell Labs的天才发明。Bell Labs的一位高层人物后来曾说,UNIX和晶体管是Bell Labs最重要的两项成就。如此评价,Thompson和Ritchie应该可以得意地笑了:)。
待续。。。。。。。。。更多精彩文章及讨论,请光临枫下论坛 rolia.net
最近在看Eric.Raymond写的一本《Unix编程艺术》,里面讲了不少计算机的、特别是Unix的历史渊源,出于个人爱好,我对电脑的发展史一向比较关心,也看过一点相关的书本、资料,于是就当是作笔记也好,写学习总结也好,把我所知道的关于计算机操作系统的历史拉拉杂杂地写下了一点文字(如果有人喜欢看,以后也会写些其他方面的),想到坛子里也许还有同好,就贴了上来,欢迎交流,欢迎拍砖(如能有根有据地拍,那就更求之不得:)。
闲话少说,开练。
关于操作系统的定义,我没有找到一个权威的解释,基本上可以说,它是一个程序,一个介于计算机硬件和计算机用户/开发者之间的程序,用户通过它来操作计算机,开发者用它提供的接口来编写程序。操作系统大概可算是最重要(也可算是最复杂)的程序,基本上,它决定了我们能用电脑干什么和怎样用电脑,软件当然是千变万化,不断发展,但无论是在那一种操作系统下跑的软件,必然受限于操作系统所提供的功能,换句话说,它只能在操作系统划下的圈子里翻筋斗。
第一代计算机是电子管(vacuum tube)计算机(大约1945~1959)是没有操作系统的,比如1945年问世的第一台电脑ENIAC,那玩意每秒只能做5000次加减法,连现在地摊上最廉价的计算器都不如,你给它写个操作系统,它也跑不动啊。所以那时操作电脑都是赤祼祼地跟主机打交道,要它干活,得一步步地按开关来告诉它(键盘是没有的,因为用的是机器语言,开关就够用了,后来出现了汇编语言,才出现打孔带这种输入方式),至于输出,它是靠两排小灯泡的闪烁来实现(跟眨眼睛差不多,闭着就是0,开着就是1,所以按照信息技术的理论,眉目岂止能传情,任何信息都可以通过眨眼睛来表达:)。蓝色巨人——IBM(国际商用机器公司)从这时就开始涉足计算机,在这个时代,他们推出的产品是700系列。
第二代的计算机是晶体管(transistor)计算机(大约1959~1964),这个时代的计算机都是所谓的大型机,代表产品是IBM的1403机,运算能力比第一代快多了,达到了每秒几十~几百万次,这个数字看起来还不错,操作系统够简单的话,是可以跑得动的,操作系统也就是在这时候出现的(也有一种说法,说是在五十年代中期就出现了简单的操作系统,但没看到进一步的介绍,)。那时的大型机基本上是一种型号配一种操作系统,通用?没门。这时候的计算机工程师通常也是横跨硬、软件领域,非常的牛X,比如著名的CRAY巨型机,就是由Seymour Cray一手包办软硬件设计,让很多计算机FANS惊为天人,后来,苹果电脑横空出出世,Steven Wozniak也曾再现这种辉煌,这种包办一款电脑软硬件设计的壮举,搁现在,相信没人 可以办到了。在文明发韧之初,类似情形比较常见,古希腊的那些大牛,亚力士多德什么的,都是学贯文理,很多领域都插上一杠子,往往还成了创始人,到了牛顿,虽然差点,文科基本没沾边(神学据说他钻研颇深,但成就如何不得而知),但在理科的好几个领域也是开宗立派、威风八面,现在的科学家大概只有高山仰止的份了。但学术的传承有好几千年,牛顿到现在也有三四百年了,而计算机的历史到今天满打满算也不过六十一年,居然就到了这份上,可见其发展之快。
那时的操作系统跟我们现在所看到的其实大相径庭,当时只是把它称作Batch System,它的功能也非常单一,仅仅是把一些常用的操作指令进行了封装以供程序调用,甚至都谈不上用户界面。
但就在这个时代,有一个特别值得一提的操作系统已经开始酝酿,就是大名鼎鼎的OS/360。
(待续)
这款操作系统出自蓝色巨人——IBM(国际商用机器公司)之手,IBM在电脑史上的地位堪称泰山北斗,甚至有专家说过,“电脑的历史就是IBM的历史”。而“360系统”堪称IBM历史上最重要的项目之一。
在61年年底,IBM开始打算实施“360系统电子计算机计划”,据当时的估算,整个计划投资约需50亿美元(这可是在60年代初,十几年前的“曼哈顿工程”才花了20亿),这是不折不扣的大手笔,要知道,当时IBM的年营业额还不到这个数字。
之所以如此花钱,是因为这项计划要做一些以前没人做过的事,这将是一个通用的系统(360就是360度的意思,表示该系统全面的应用范围),该系列不同型号的计算机将能享用同样的设备,如磁带机、打印机等,能使用同样的软件,并且可以相互连接,一起工作,这些在今天看来理所当然的事,在当时可是闻所未闻。
该项目在硬件设计上很有创新,乃至IBM不得不自己动手设计制造芯片(因为买不到),但更大的困难却是在软件方面,要让所有的软件适用于所有的电脑(当然,仅限于360系列),这个理念让IBM的软件工程师们伤透脑筋,投入到这个项目中的软件工程师超过2000人(Windows2000也只动用了1700名),花费超过5亿美元,竟然超过了硬件研发的费用,所有这些都是创纪录的。
负责这项艰苦卓绝的开发任务的,是Frederick Brooks,当时年仅三十,他是世界上第一批获得计算机科学博士学位的人之一,有趣的是,当开发这个新型操作系统的计划提出时,Brooks本是最强硬的反对派,因为他觉得这个项目的难度骇人听闻,实在是不切实际。但当IBM的管理层拍下板来,要Brooks担当重任时,他居然慨然应允,高风亮节,实在是令人佩服。
360操作系统的开发用了5000个人年(人年就是一个人一年的工作量),由于从未有过开发这种大型软件的经验,开发组陷入了“有史以来最可怕的软件开发泥潭”,最终也没能实现当初的设想。Brooks后来根据这次开发任务的经验,写了一本《人月神话》(The Mythical Man-Month),成为软件工程领域内的经典著作(某种程度上是宣扬的一种失败论)。他本人更在99年获得了计算机领域的最高奖——“图灵奖”。
尽管软件开发工作未获全胜,但360项目还是取得了辉煌的成功,IBM在籍此在计算机行业几乎是一统天下,IBM/360更被誉为人类从原子能时代进入信息时代标志。此后IBM开发的大型机系列都保持了与360系统的兼容,直到最新的z系列,在360上写的程序仍可以不经修改的运行,“兼容”这一概念从此开始深入人心。
(待续)
需要交待一下,360计划虽然是在61年开始启动,但等到完成己是1964年,它的主要部件采用了集成电路(Intergrated Circuit,IC),属于第三代计算机,它也是第三代计算机的标志产品,还有前面提到的CRAY巨型机,也属于第三代。Cray此人厉害无比,不可一世的IBM几次栽在他手上,在IBM研制360时,Cray还在CDC(控制数据公司,好象那时的计算机公司起名都很低调,象IBM、DEC都是平铺直叙,不象现在的IT公司,名字一个比一个花哨)工作,他带领的团队只花了700万美元就搞出了一台比IBM的产品快上3倍的东东,让IBM震惊不己,而他的诀窍就在于开创性地使用了并行技术(就是用多个处理器并行工作),这项技术到现在还是制造超级计算机的基础。
Cray后来离开CDC自立门户,于1972年开了家用自己名字命名的公司(这好象是西方的传统,象HP、DELL都是这么来的,Microsoft也差点就叫Alan-Gates),专搞巨型机,并练就了一门叫做“向量处理”的绝技,独步天下,在80年代,他的产品一度占到世界巨型机总数的70%(“侏罗纪公园”里的恐龙DNA就是用CRAY机来处理的,呵呵),让IBM丢尽脸面。不过CRAY公司其亡也忽焉,后来渐渐没落,公司几次易手,先后被SGI和TERA收购,巨型机老大的位子不久就被IBM夺回去了。
说了半天,也没提操作系统,有点跑题了,呵呵。其实是因为关于CRAY机的操作系统,我也一抹黑:(,只是听说它的操作系统都是由Cray博士用机器码(就是0101001......)写出来的,居然没出现什么BUG,我真是无语了~~
(待续)
CDC和CRAY并非唯一斩IBM于马下的公司,在小型机领域,IBM也是一败涂地,胜利者叫做DEC(数据设备公司,成立于1957年,明明是家计算机公司,招牌上却不带计算机字样,之所以如此,是因为当时IBM在计算机领域只手遮天,不敢撄其锋芒也),创始人Ken.Olsen,是计算机历史上一个颇有悲剧色彩的人物,他能力非凡, 白手起家创建了长期排名世界第二的计算机公司,在1986年被《财富》杂志评选为“全美历史上最成功的企业家”,但最终却因经营不善,被他自己一手创建的公司扫地出门(Steve.Jobs倒也有此经历,不过他卷土重来了),更因为对PC的错误估计(1977年曾说“我们没有理由认为人们会需要家用电脑”)被人们引为笑柄(其实犯这种错误的名人多了,不一一列举)。
为了不引起IBM注意,DEC推出的第一台机器都不敢叫计算机,而是取了个暧昧的名字叫做“程序数据处理机”(PDP,呵呵,了解电脑发展史的人肯定如雷贯耳)。PDP-1于1959年推出,全晶体管构造,在当时还是电子管计算机当道的年月,可说是相当先进。相比当时的那些大块头,这台只有冰箱大的机器显得相当小巧,这台设计精良的机器让DEC发展迅速,仅仅几年功夫,DEC就从借来的七万美元起家发展到年销售额几百万美元,在六十年代初,这可是个很可观的数字。
DEC坚持走小型机的道路让一些本来只能望着昂贵的计算机兴叹的单位终于可以买上一台,它独创的分时技术也为更多的人使用计算机创造了机会,在众多的受益者当中,有一个叫Ken Thompson,在操作系统的历史上值得大书特书。
(待续)
Unix可能是世界上最有影响的操作系统,它的第一版是由Ken Thompson在一台PDP-7上完成的。
Thompson当时供职于AT&T的Bell Labs(贝尔实验室,一个资格极老、极牛的科研机构,晶体管就是在这里发明的,96年AT&T被拆分后划归朗迅),Bell Labs曾经参与了一个叫做Multics(Multiplexed Information and Computing System)的研究联盟,该项目旨在建立一个多功能的“信息应用工具”,以支持多用户对大型机的交互式分时操作,但跟IBM的360计划一样,这个志向高远的项目不幸以失败告终,尽管也得到了几个不太成功的系统。Thompson参与了这个开发项目,散摊子的时候,他收获了一些灵感,还有一个自己编写的游戏(不务正业啊~~这个叫做《星际旅行》的游戏只比公认的史上第一款游戏《太空争霸战》(1962)晚了几年而已)。
Thompson首先是在GE(通用电器,没错,他们那时也造计算机)的大型机上玩,糟糕的是,在这台机器上,源自Multics项目的操作系统运行的很不尽人意,玩起游戏来,响应忽快忽慢,让Thompson很是不爽(我们当然能够理解,想想你正在魔兽中杀的过瘾,机子忽然停下来狂读硬盘是何等扫兴),于是他以开发一个新的交互式操作系统的名义,向领导要求配备一台DEC-10——另外还有一个原因,据Thompson的死党Dennis Ritchie(也是个大牛人,C语言的发明者,Unix的合作发明者)透露,在Ge上玩一次游戏的费用高达75美元(当时的机时可是很贵的),想来如此挥霍公款,Thompson心下也有点惴惴,要台机子自己瞎掰,就安全的多——但刚在Multics项目上遭遇失败的领导们断然拒绝了他的无理要求(呵呵,可怜的Thompson),最后,Thompson只搞到了一台已经废弃的PDP-7。
(待续)
PDP-8是DEC的第一台采用集成电路的计算机(第三代),也就是说PDP-7还是一台晶体管计算机,这就好比,你向领导打报告要配一台酷睿2,最后却只能在仓库里翻一台286出来用,Thompson的沮丧可想而知。PDP-7的配置如何,我没查到资料,但PDP-11也只有512KB的磁盘,PDP-7想来更少得多,内存应该只几十K(别吃惊,这个数字我估计得很乐观了,几十K内存也是可以做不少事的,Gates同学写的第一个BASIC解释器可是在一台4K内存的Altair上跑),显示器当然是别想,一台电传打字机把输入输出都包了(什么?没显示器怎么玩游戏?谁告诉你是游戏一定是视频的?)。后来,Thompson在忆苦思甜的时候告诉Raymond,我那时用的机子那个惨啊,内存磁盘加一块还赶不上现在一个最便宜的手机~~
要在这么烂的的机器上玩游戏,当然得下一番功夫,原有的系统肯定是不能支持了,得重头干,没说的,为了游戏。经过Multics项目的煅炼,Thompson对于写操作系统已很在行,反正机器烂,不可能搞什么复杂的名堂,什么项目计划书呀,都免了,就跟Ritchie两人合计合计,他一个人花了两天时间就搞出来一个原型,厉害吧?WindowsNT的主设计师(也是VMS的设计师)David Cutler曾有一句名言——“Who can't write an OS in a week?”,固然牛气哄哄,比起Thompson似乎还颇有不如,呵呵。
(待续)
那是1969年,Thompson搞出来的这个东西就是Unix的雏形,尽管把它称作Unix还有点勉强,但已经显示出Unix的一些基本特征——简洁、高效、比当时所有的操作系统都更注重交互性、对程序员友好(它就是程序员写出来给自己用的,是当时唯一允许程序员边写代码边测试的系统),也许,还有那么一点散漫,而且,即使如此恶劣的硬件条件下,它仍然具备一个简陋的文件系统,有特殊的文件类型以支持目录和设备,甚至,可以支持多任务(想想晚它十几年问世的DOS还只能支持单任务,就知道Thompson有多牛了,当然,DOS可以用变通的方式支持多任务,但毕竟不是原生的)。当然, 还有很多Unix的特性它还不具备,比如,它的核心是用汇编写的(汇编器也是Thompson自己写的),当然不具备可移植性,并且,只支持两个用户(想来就是Thompson和Ritchie,呵呵)。
有一点值得一提,这个系统除了用汇编以外,还用到了另外一种语言,就是解释型的B语言(也是Thompson自己发明的,这家伙真是自力更生模范的说~~),主要用来写应用程序。B语言是Thompson在一种叫作BCPL(Basic Combined Programming Language,由剑桥大学的Matin Richards在CPL语言的基础上简化而来,CPL是在ALGOL 60语言上发展而来,至于ALGOL 60可就牛了,它被称作是“计算机科学诞生的标志”,这些语言通通源自剑桥)的语言的基础上简化改进而来(之所以叫B语言,就是把BCPL精简提炼的意思),它非常简单(不支持数据类型和结构,放在今天真难以想像),并且极亲近硬件,可以把它看作是一种稍微高级了一点的汇编语言。后来,Ritchie给B语言加上了数据类型和结构的支持,推出了一代王者——C语言(意思是“BCPL”中排在B之后,在TIOBE语言排行榜上至今在一、二名徘徊),并将Unix用C语言重写,那就是后话了。
(待续)
经过一番鼓捣,Thompson的游戏终于可以在PDP-7上跑起来了,但这台机子毕竟太烂,而且还是借来的,Thompson他们一直期待着能搞台更好的机器用,在1970年,这个机会来了,Bell Labs的专利部门需要一套“文字处理系统”(他们的专利可是很多的),当时可没有现成的Word,Thompson就把这活接下来了, 并名正言顺地买了一台PDP-11/20(比当初申请的DEC-10还是便宜多了)。
他们首先把Unix从PDP-7上移植了过来,汇编写的代码没什么可移植性,所以基本上就是在PDP-11上重写了一次,这种没多大创造性的工作想来做起来并不怎么愉快,给后来Thompson下定决心,用高级语言(C语言)来写操作系统增加了动力(MULTICS可能是最早用高级语言写操作系统的尝试,当时用的是PL/I,以失败告终,那时的普遍观念,操作系统是不宜用高级语言来写的)。
在PDP-7上,他们曾经写过一个叫做roff的文本格式化程序,再配上一个编辑器,一个“文字处理系统”基本上就齐活了,于是Bell Labs的专利局成了Unix的第一个商业用户,这是在1971年11月,在与系统配套的手册中,该版本被称做“First Edition”,有些史料就把这一年作为Unix的诞生之日。
顺便说一下,Unix这个名字是Thompson在Bell Labs的同事Brian Kernighan取的,在1970年,Kernighan开玩笑地把Thompson在PDP-7上的那个简陋系统称为“UNICS”,意思是“UNiplexed Informationand Computinig System”,这是相对于MULTICS来的, MULTICS是“Multiplexed Information and Computing System”的意思,后来,UNICS变成了Unix并且流传开来(这种简化应该是出自一种黑客趣味)。
(待续)
1972年Unix发布了第二版,最大的改进是添加了后来成为Unix标志特征之一的管道功能,所谓管道,就是程序之间交流数据的通道。这一设计,对鼓励简洁、小巧、灵活,而又注重通用和协作的Unix程序设计风格意义重大,与此相关的,还有过滤器这一设计,Unix下的程序大多小而精,但相互之间的协作性极好,与WINDOWS下推崇大而全的程序设计风格大异其趣,这是在系统设计之初就埋下了种子的。这一年,Unix的装机数达到10台,都是Bell Labs内部的机器。
在写第二版的时候,Thompson和Ritchie曾经试图用B语言来重写核心,但因为B语言功能太弱,最后放弃了。Ritchie因些萌生了搞一个新语言的想法,它必须强大到可以写系统级软件。于是,在对B语言进行了卓越的改进之后,一个传奇——C语言诞生了,这是在1973年,此后,这一语言包揽了绝大多数的系统级开发,在前两年泄露出来的WINODWS2000的多达几百M的源代码中,大家看到,除了极少的汇编和C++,绝大部分代码都是C语言写就,在记者问到Ritchie为什么C语言会如此受欢迎时,Ritchie很低调的回答,可能是C语言的抽象程度既能满足需要,又比较容易掌控。跟Unix一样,C语言确实是一种简洁而优美的语言,“审美”是这种殿堂级软件设计思想的核心,爱因斯坦曾经说过,描述基本物理理论的数学方程中必须有美,与软件设计倒是不谋而合(但世事难料,比如Windows,或者Perl,这些许多人认为比较臃肿、丑陋的设计也都活得有滋有味,当然,能挺多久难说)。顺便说一下,虽然C语言如此威猛,但身为C语言之父的Ritchie最爱的语言却并不是它,而是一种我听都没听说过的Alef。
有了C语言这柄利剑,Thompson和Ritchie很快就重写了Unix,在MULTICS项目失败以后,用高级语言写操作系统的梦想终于实现了,好多年后,Ritchie骄傲的写到,很肯定,Unix的成功很大程度上源自其以高级语言作为表述方式所带来的可读性、可改性和可移植性。看着这个基本上达到了预想的作品,Thompson和Ritchie不免有些沾沾自喜,觉得可以拿出去“炫”一把了,于是在1974年,他们在《美国计算机通信》(Communications of the ACM)上发表了一篇文章,第一次对外面的世界展示了Unix的存在。
且说这个新版的Unix搞出来以后,Bell Labs里的很多科学家都挺感兴趣,经常跑到那台PDP-11上去鼓捣一番,但很快他们就发现,自己设置的帐户Thompson总能轻易地闯进去,Bell Labs里的人物岂是泛泛之辈,怎甘受此羞辱,于是就有人把源码翻了出来,经过一番分析,去掉了后门,然后重新编译,于是,整个世界清静了——且慢,正在他们沾沾自喜的时候,却发现,帐户又被Thompson破解了,这下大家彻底郁闷了,这一郁闷就是好多年,Thompson的洋洋自得就别提了。直到14年后,Thompson才突然良心发现,道出了个中巧妙,原来代码中的后门是有的,不光是系统本身,还藏了一个在C编译器中,系统本身的后门虽然被清除了,可还是用有后门的编译器来编译的啊!哈哈。
而Ritchie就厚道多了,他只是很热心地向大家推介他的C语言,并鼓励大家使用C语言中的函数调用——这真是一种先进的设计方法,何况还有Ritchie信誓旦旦地保证——C语言中的函数调用的机器开销真的很小很小,于是,人人都开始写函数,搞模块化,等到大家终于搞清楚,在PDP-11上,函数调用的机器开销竟达到50%时,已经是积习难改、欲罢不能了,至于Ritchie,当然是躲到一边偷笑去了(话说回来,这种设计思想毕竟是正确而先进的,只是在当时落后的硬件条件下,显得有些奢侈,呵呵)。
Thompson和Ritchie在Communications of the ACM上的文章发表后,引起了许多大学和实验室的关注,因为文中着重鼓吹Unix的简约设计及在低性能机器上的良好表现,大家(主要是那些用落后机器的穷单位,嘿嘿)都想见识一下。本来这是笔送上门来的生意,但AT&T有点特殊情况,因为它由来已久的垄断地位,早在1958年就被反托拉斯调查,根据那次调查达成的协议,AT&T不准进入计算机相关的商业领域(IBM少了个大对头),也就是说,AT&T不能拿Unix卖钱(交待一下,Unix虽然是Thompson他们自作主张搞出来的,但毕竟是AT&T员工的工作成果,因此AT&T享有版权),而且依据那次协议,AT&T有义务将电话(这是本行)以外的技术许可给任何提出要求的人——这条有点匪夷所思,简直是欺负人嘛:)——正是这条协议,给Unix的流传大开方便之门。于是,在仅收取工本费之后,Thompson开始将Unix的磁带和磁盘一包包的寄往世界各地(是不是有点史诗味道?:)——据说,每一包里都附了张小纸条,上书“love,ken”——真是剑胆琴心的说~~~~
寄出去的Unix是第五版,附有源代码。犹如散落的火种,这些被安装在各处管理松散的廉价计算机上(这点很重要,如果是安装在昂贵的大型机上,就没有那么多机会让人瞎鼓捣了)的操作系统,点燃了许多计算机爱好者的创造热情,他们日以继夜扑在上面,摆弄代码,添加功能,然后彼此交流,相互炫耀。不少大学都开始拿Unix作教学之用。
大家在遇到麻烦的时候,可以向Thompson他们的小组打电话 , 或者通过原始的UUCP(Unix to Unix Copy Program, Bell Labs开发的一的种在Unix机器之间通过电话线和MODEM通讯的程序)发送问题,甚至可以跑到Bell Labs去与他们当面交流。Unix许多重要的改进和发展正是由这群主要来自于各所大学的爱好者们完成的,这些成果被反馈到Bell Labs。在1979年发布的第7版Unix中包含了很多由爱好者们贡献的创意乃至代码,这是公认的第一个完整意义上的Unix。可惜由于版权问题及商业利益的影响,这种开历史先河的发展模式并没有持续多久,幸好,在好多年以后,在Internet的支持下,我们将会看到,Linux,这一Unix的变种,成功地将这一模式予以了辉煌的再现。
最早散布出去的UNIX几乎都是装在DEC的PDP机器上,在1976年前后,开始有好事者将其移植到其他种类的机器上,包括Interdata系列、IBM的Series1系列以及VM/370。这时,Thompson和Ritchie用C语言编写系统的苦心开始得到回报——即使是设计大不相同的异构机器,移植工作也进行的相当顺利(当然,是相对的),Ritchie甚至宣称,将UNIX移植到别的机器上比把一个应用程序移植到另一个操作系统中还要简单。1978年,DEC公司推出新的拳头产品VAX后,UNIX很快就被移植到上面,尽管没有支持VAX特有的换页功能(一种内存管理的技术),但仍然很快流行开来,对DEC苦心开发的专门用于VAX机器的VMS构成了重大威胁。
UNIX在初期主要是用于DEC的机器,尽管没有正规的技术支持,但仗着灵活、快捷、容易修改和扩充以及资源丰富(包括支持的硬件设备更丰富,DEC的操作系统只支持自己的系列产品)的强大优势,很快就严重影响到DEC自身的软件推广。碰上这样的飞来横祸,DEC当然是非常恼火,他们对使用UNIX而带来的硬件问题拒不提供支持,但尽管如此也不能阻挡大家对UNX的热情。而VAX/VMS乃是DEC寄予厚望的战略级产品,技术那是相当的优秀,居然甫一推出,就又遭到UNIX的追杀,也难怪老板Olsen会口出恶言,讥讽UNIX是“蛇油”(意为“骗人的万用药”)了。DEC苦撑了几年之后,终于不支,改变态度,于1982年推出了自己的UNIX变种——DEC ULTRIX,但在推广策略上,仍是以自家的VMS为主导。DEC公司的保守作风终于酿成大祸,在别的公司推出专门针对UNIX设计的机器后,DEC的江湖地位每旷愈下,在PC问世后,更是一蹶不振,后来连年亏损,1992年把Olsen赶下台也没解决问题,终于在1998年,这个曾经的传奇——一度排名世界第二的计算机公司被后起之秀COMPAQ并购,不过96亿美元的天价也算是对它价值的承认。COMPAQ后来被HP以260亿美元收购,HP后来被……HP这么大的块头,估计一时半会也没人吞得下它,呵呵。
DEC的机器曾是UNIX诞生的温床,但DEC的没落UNIX却起到了相当重要的推波助澜的作用,如果DEC当时采取拥抱UNIX的策略,也许计算机产业又是另一番格局了。当然,世事难料,这种推测也只是扯淡罢了。
VAX是一种32位的小型机,因为它惊人的寻址能力(达4GB,尽管由于成本关系,大多数VAX机器也只配备了1M内存),DEC为它设计了革命性的换页技术,的确让Unix有点赶不上趟,但这项让DEC引以为傲的技术优势并没有保持多久,仅仅一年之后,一个叫做Bill Joy的来自Berkeley(加州大学伯克利分校,University of California at Berkeley)的学生就在Unix上实现了这一技术。
Berkeley是一所很牛的大学,做为一所州立大学,它在很多领域都能和那些财大气粗的私立学校相抗衡,它不仅拥有数以十计的诺奖得主,而且还是许多社会潮流的源头,比如嬉皮文化、反越战运动等。在九十年代末的一次美国大学评比中,它的不少专业都名列前茅,比如文学、新闻等,当然,更值得说的是,它的电脑和电子工程技术专业名列全美第一,甚至把更鼎鼎大名的MIT、Stanford都甩到了后面。Berkeley与Bell Labs似乎关系不错,早在Thompson发表那篇宣言般的论文之前,就搞了一份Unix来用,还专门为此买了一台PDP-11/45,比较丢人的是,他们鼓捣了几天也没把Unix装上去,最后还得劳动Thompson亲自出马,呵呵。其实原因是出在Unix自身,因为他们买的那台PDP太高级,竟然配备了双硬盘,Unix那时还不支持。
其实早在此之前,Joy就已经致力于Unix的研发。在1997年年初,Joy就编写并发布了一个以BSD(Berkeley Software Distribution)命名的Unix版本(有个传说,说最初Joy用三天时间就写成了一个简陋但可用的Unix,忍不住怀疑搞操作系统的都是一伙超人~~~~:),BSD后来影响如此之大,足可与AT&T的原版相提并论。在第一版的BSD中,Joy就搞出了些新意思,他写了Unix中的第一个Pascal编译器(Pascal由瑞士的Niklaus Wirth教授于1970年发明,是一种影响深远的语言,许多现代语言,例如Java都受过它的影响,尤其以应用于教学著称,当然也应用于许多实际的项目,著名的如Delphi,它甚至被用来写操作系统,Apple早期的MAC系统就是用他们自己的特殊版本的Pascal写的),以及Unix中的第一个全屏编辑器VI(到现在仍是Unix中最常用的程序之一,虽然编辑器出了无以数计,但能与VI相提并论的,大概也只有Emacs了,这又关涉到另一个大牛人,先按下不表:),另外,他还写了一个重要的C语言函数库termcap(也流行了好多年)。
早期的BSD并不全是Berkeley搞出来的,里面含有大量属于AT&T的代码,以及一些其它大学贡献的代码。这时的AT&T由于不能用UNIX赚钱,所以态度很不明朗,对于教育及科研机构的政策很宽松,只收取象征性的费用,提供源码,并且没什么使用限制(很高明的推广策略,事实证明成效斐然,堪与微软对盗版暧昧的纵容相比),对于企业用户的收费就很高(一份带源码的拷贝要2万美元,装多台机器的话还得另加,比起BSD来这还算便宜,一份源码版的BSD要4万),而且限制多多。但也不能说它把UNIX商品化, AT&T没有自己的UNIX开发计划,而且既不作广告推销,也不提供技术支持、售后服务,对产品品质也不作任何保证(如果出现什么BUG,你也得自己认了~~),至于没有试用期,一手交钱一手交货那就不用提了,跩到这个份上,也实在不象做生意的样子:)。
但Bell Labs内部还是成立了几个小组(类似学校里的兴趣小组,当然也可能怀有商业用心:),承担了一部分UNIX的技术支持工作(非官方),并且进行进一步地开发。Thompson和Ritchie他们的小组就叫“Research”,他们主要搞研发(并不限于UNIX),对技术支持没多大兴趣,挑大梁的是另外两个,一个叫PWB(Programmer's Workbench,他们对UNIX做了不少改进,并且发布了一个自己的版本PWB/UNIX),一个叫USG(UNIXSupport Group)。糟糕的是,这几个小组互相看不顺眼(文无第一,武无第二,这也是没办法的事:),对UNIX的理解也不尽相同,乃至各自散发出去的的版本都不是很兼容,UNIX复杂到让人头大的谱系这时就已开了滥觞。
在这种状况下,UNIX尽管在教育科研领域声誉日隆、炙手可热,但对计算机产业的影响仍然有限,毕竟它还只是一种非标准化、非商业运作的技术,只能拿来用,没法靠它赚钱。后来AT&T的政策松动了一些,在1978年前后,才开始出现商业公司提供UNIX的技术服务。1980年,AT&T发布了UNIX的distribution binary许可证(可分发二进制版),这下别的公司终于可以用UNIX来卖钱了,第一家买下这种许可证的公司是Onyx Systems,值得一提的是,它的产品是微机(比较另类的一种,采用Z80000的CPU),UNIX与微机的渊源可谓由来久矣。
差不多与此同时,有公司开始开发UNIX的克隆版——就是全盘复制UNIX的功能,可以兼容UNIX的程序,但代码完全重写。第一个版本是Whitesmiths公司推出的IDRIS(它雇了几个前AT&T的程序员,还曾经推出第一个商业C语言编译器,),开始为了避免版权纠纷,Whitesmiths有意在库名称及参数顺序等地方作了些小改动,后来AT&T高姿态地宣布不追究这些细节,于是开发与UNIX完全兼容的系统成为可能,很快很多公司(包括几乎所有的业内大腕)就开始蜂涌而上了:)。顺便说一下,上世纪末的时候,有一家澳大利亚公司曾开发出一个兼容Windwos的操作系统,但因为版权关系,没来得及推广就夭折了:(。
举几个开发过UNIX克隆版本的公司名字,有IBM(名字叫AIX,1986年发布),HP(HP-UX,1982年),SGI(IRIX,1987年),Microsoft(XENIX,1980年),SUN(Solaris,1985年),Apple(MacOS X,2001年)~~~~其中有一些主要源自BSD的版本,如SUN和Apple,但追根究底,仍是来自那个出于Bell Labs的天才发明。Bell Labs的一位高层人物后来曾说,UNIX和晶体管是Bell Labs最重要的两项成就。如此评价,Thompson和Ritchie应该可以得意地笑了:)。
待续。。。。。。。。。更多精彩文章及讨论,请光临枫下论坛 rolia.net