现如今,市面上常见的操作系统有Windows、macOS、Linux,这三种操作系统呈现三足鼎立的局面,且各自在所擅长的领域发光发热,引领着整个时代的进步。
如果说,想要了解操作系统的发展历史,那么有一个神级的、绕不开的存在——UNIX,它就是那盘古——开天辟地,它就是那虚无中的——道生一、一生二、二生三、三生万物。
Unix年谱
你可能会疑惑:UNIX在整个操作系统的发展史中到底是怎么样的一个存在呢?为什么会如此的德高望重?为什么如今却鲜有耳闻关于它的事迹?
如果你也跟我一样,对这些问题存在好奇心,请跟随我一起来探个究竟。
1. 贝尔实验室
AT&T(美国电话电报公司)由分布在美国各地的多个电话公司组成,在其发展的早期阶段,AT&T意识到它需要一个研究机构,来系统解决在建设全国电话系统中遇到的科学与工程问题。1925年,AT&T创办了研发子公司贝尔电话实验室,意在解决这些难题,该机构通常被简称为贝尔实验室。贝尔实验室最初位于纽约市西街463号,后来搬到墨里山。
20世纪60年代,这里容纳了3000名员工,其中包含1000名拥有物理、化学、数学以及各种工程方面博士学位的人才。贝尔实验室早期研究设计物理、化学、材料学和通信系统,研究员们追随自己的兴趣,探索各个领域,这里不仅孕育出了大量的诺奖获得者,还做出了大量改变世界的科技成果,其中最早的是晶体管。晶体管的诞生推动了半导体行业的发展,继而为大型集成电路奠定了基础,大型集成电路的出现也推动了计算机行业的突飞猛进。
不得不说早期的贝尔实验室是研究员们的天堂,这里自由、进步、民主,我们所熟知的肯.汤普逊、丹尼斯.里奇、布莱恩.克尼汉、罗布.派克等计算机领域的知名专家就曾在这里工作。
贝尔实验室
2. Unix雏形
20世纪60年代,麻省理工学院推出了兼容分时(系统在用户间快速切换,令每位用户觉得整台计算机为我所用)系统 —— CTSS,在那个大多数系统都采用'批处理'技术的年代,分时系统已经是一个很大的进步。见到CTSS如此高效,麻省理工学院的研究员们决定做一个更好的版本,他们想做一套信息处理工具,并向大众提供计算服务。1965年,他们开始设计Multics系统(多路复用信息和计算服务),麻省理工学院邀请了两家公司来帮忙。美国通用电气公司(GE)——负责设计和生产拥有全新硬件特性、能更好支持分时和多用户的新计算机。贝尔实验室——由于其在20世纪50年代设计了自己的操作系统,拥有丰富经验,因此在这个项目中帮忙做操作系统。其中就包含肯.汤普逊、丹尼斯.里奇。
Multics本应该成为前途无量,引领时代的操作系统,奈何由于大家过于期待,添加太多每个人都期望的新特性,结果导致塞进去了过多东西得到了一个复杂的系统。在贝尔实验室看来,作为一套信息处理工具,它已经无法实现以合理的代价为实验室提供计算服务的目标,并且太贵。
于是就在1969年4月退出了该项目,留下麻省理工学院与GE继续苦战。肯.汤普逊在2019年的一次采访中形容他为Multics做的事:“巨轮上的一道凹槽,它搞出来的东西连我自己都不想用”。Multics虽然最终完成,但是却没有被广泛接受,从某种层面来看是失败的。
由于退出了Multics项目,参与该项目的贝尔实验室成员得找其他事情来做。此时,肯.汤普逊还是想做操作系统,但是由于Multics伤透了贝尔实验室管理层的心,不想给操作系统购买硬件。肯和其他同事只能纸上谈兵,设计各种操作系统组件,却无法开展实际工作。后来,肯.汤普逊找到一台DEC PDP-7计算机,不仅在上面写了一个太空旅行游戏,还花了三周时间(大神级程序员的世界无人可敌)为它写了操作系统。
PDP-7操作系统诞生之后,却没有名字。据说,这个时候布肯.汤普逊、丹尼斯.里奇、布莱恩.克尼汉等同事在聊天时,布莱恩.克尼汉说:“从拉丁词来看,Multics意图包罗万象,而新的操作系统顶多择一而从,应该拿uni来替代Multi,叫它UNICS”。因为UNICS发音接近eunuchs(太监的意思,丹尼斯.里奇后来形容这个名字正中Multics要害),后来就变成了UNIX。
肯.汤普逊
肯.汤普逊小传:1943年出生,父亲曾在美国海军服役,小时候随海军住过全世界很多地方。他小时候喜欢捣鼓电器,在加利福尼亚大学伯克利分校读电子工程,后来迷上计算机。1966年拿到伯克利分校硕士学位,并于同年加入贝尔实验室。
肯不仅发明了Unix系统,还是是B语言、Go语言、Unicode编码的发明人,同时还是国际象棋高手与飞行员(1992年12月,还到莫斯科驾驶过一架米格29战机)。2006年加入谷歌公司,至今一直致力于Go语言等相关开发工作。
对于肯.汤普逊的人生经历,笔者只能用彪悍一词来形容。
3. 初版Unix
PDP-7的Unix操作系统虽然有趣,但是却被局限在一台小型机上无法施展拳脚以及探索更大发挥空间。早期Unix团队提交申请购买一台DEC PDP-10(36位字长的内存,申请预算50万美元)的申请,但是管理层对于研发Multics的痛苦经历记忆犹新,就没有批准,并表明立场“我们不做操作系统”。Unix团队退而求其次,再次申请购买一台刚发布、较便宜的PDP-11(1971年,PDP-11大约6.5万美元,PDP-10大概50万美元),也被驳回了。直接购买机器的愿望在无法满足的情况下,他们发现专利部门为了满足专利申请文档的编写,在现有阶段计算机系统无法满足需求,就以专利部门为满足日常需求为由申请购买专门硬件。
后来,管理层同意购买一台PDP-11,Unix小组则需要配合开发配套软件。于是,肯和丹尼斯很快就将PDP-7上的Unix移植过来(PDP-11硬件能力十分有限,只有24KB内存空间和半兆磁盘空间,其中操作系统占用了16KB内存,仅有8KB留给用户使用)。就这样,打字员们白天使用PDP-11处理专利文档,晚上Unix小组则开发自己的软件系统。专利部门由于尝到了甜头,又为Unix小组申请购买了一台PDP-11,组员们便可以在白天全天进行开发,这个版本的Unix就成了第一版。
肯、丹尼斯与PDP-11
4. C语言
C语言的起源可以追溯到20世纪70年代初,丹尼斯与肯一起参加到了Multics操作系统的开发过程中,在此期间积累了大量的经验。在后来退出该项目后,与肯一起进行Unix操作系统的开发。在Unix的开发过程中,ken想使用高级语言进行系统的编写。但是,鉴于硬件资源的稀缺(主要是计算机内存太小),便对BCPL语言进行改造得到了B语言,由于B语言本身的一些特点决定了其不能用于大型系统级别软件的开发,只能作为一种简单的脚本语言使用。后来,丹尼斯在B语言的基础之上添加了一些新的特性(按丹尼斯所说就是带有类型的B语言),并为其编写编译器,当时称该语言为“NB”(即 New B),后来发展成了C语言。B语言与C语言的主要区别之一就是,B语言无类型,C语言支持数据类型、以及对数据类型指针做算数运算。对于把Unix从汇编语言转换为高级语言来说,C语言在当时就是不二选择。
直到后来丹尼斯在C语言加入struct,已经有足够表现力来编写操作系统代码。肯在1973年使用C语言对Unix做了改造,Unix也就成为了主要使用C语言编写的大型软件。在第6版Unix中,大约有9000行C语言代码和700多行汇编语言代码。
正是因为C语言的出现,也为操作系统的可移植性奠定了坚实的基础(在以前,操作系统都是由汇编编写,各自不同的硬件厂商之间并不兼容,可想而知想要对操作系统进行移植难度有多大,不亚于重新编写)。
在1978年,布莱恩.克尼汉与丹尼斯.里奇一起编写了C语言圣经《C语言程序设计》一书,为C语言的推广起到了重要作用。
丹尼斯.里奇
丹尼斯.里奇小传:丹尼斯生于1941年,其父是阿利斯泰尔.里奇,曾在墨里山贝尔实验室工作多年。丹尼斯在哈佛大学完成物理学本科学位和应用数学的研究生学位。后来,博士论文通过审核,由于不肯花钱按学校要求装订,结果没拿到博士学位(哈哈,牛人的世界无法理解)。1967年正式加入贝尔实验室,成为计算机科学研究中心技术团队的一员。在最初几年一直参与Multics开发,期间积累了大量关于操作系统以及高级语言的经验,后来退出该项目后,就和肯以及其他同事的一起探索中搞出了Unix操作系统与C语言。
5. 为Unix做出贡献的先驱们
最初Unix只是在贝尔实验室内部进行传播,在Unix出现之后,实验室的同事们献计献策,不仅提供了很多好的改进操作系统的点子,还编写了很多好用的工具、命令。大部门工具、命令一直沿用至今,在很多操作系统上都可以看到它们的踪影。一次偶然机会,笔者在普林斯顿大学网站内发现一篇关于贝尔实验室中对Unix做出重要贡献的人员名单表格,分享给各位。
Unix贡献者
如果把Unix操作系统比作一台汽车的心脏——发动机的话。那么,这些工具、命令就像是汽车的各种外围设备以及硬件,正是由于这些工具、命令的存在才让整个操作系统多姿多彩、容光焕发,给人们提供了各种场景下的解决方案。
6. 百花齐放
1973年,AT&T开始向高校发放Unix许可,只收取象征性的费用。加利福尼亚大学伯克利分校是最活跃的许可获得者之一,该校的一些研究生对系统做出了重大贡献,最终演化出伯克利软件发行版本(BSD),后期又出现了大量基于BSD版本的操作系统,使得整个Unix生态出现了一种百花齐放的局面。1975年~1976年,肯.汤普逊在伯克利度过一个休假年,教授学生操作系统相关课程。
期间,有个叫比尔.乔伊的研究生修改Unix的本地版本源代码,加入了一些自己的程序,包括著名的vi文本编辑器(至今仍是最流行的Unix编辑器之一)和csh(C语言的shell)。后来,还为Unix设计了至今仍在使用的TCP/IP网络接口,有了这些接口,就能用与文件和设备相同的读写系统调用来读写网络连接,进而很容易的添加网络功能。
比尔在几年后从研究生院退学,与朋友一起创办了大名鼎鼎的工作站先驱——Sun微系统公司,公司的工作站软件基于伯克利Unix,其中包括比尔在系统、网络和工具等方面的研发成果(Sun公司后来又催化出了Java语言)。
比尔.乔伊
1974年,首届Unix用户组会议在纽约召开。
1977年,悉尼新南威尔士大学计算机科学教授约翰.莱昂斯为第6版Unix源代码逐行写了评注,并在几年后出版。
至此,Unix在实验室外面也得到了迅猛的发展。
7. Unix之战
20世纪80年代后期,许多Unix系统的供应商开始使用Unix商标,并销售基于第7版本系统的软件。然而,在AT&T的system V和伯克利发行版本之间存在不兼容问题。此时,急需一套共同标准。于是,成立于1984年的行业联盟X/Open,希望打造标准代码环境,使程序无需修改就可以运行在任何Unix系统之上。
但是,AT&T和一些盟友成立了自己的Unix国际与开放软件基金会制定的标准对打,结果出现了两个互相竞争的不同“开放”标准。POSIX标准和由X/Open管理的“单一Unix规范”,前者用于基本的库函数,后者为各个Unix版本的库、系统调用和大量常用命令规定统一标准。
1992年,AT&T以侵犯Unix知识产权为由起诉伯克利,声称伯克利未经允许使用AT&T的代码,并对AT&T的代码做了大量修改、还添加了TCP/IP 等代码。伯克利于是就删除、重写了来自AT&T的代码,并发布了他们认为不包含AT&T专利的Unix版本。但是,AT&T并不认可,诉讼随之而来。
本来无论从何种角度来看,Unix都应该是前程似锦、风光无限、未来可期的一个操作系统。就这样在经过多年的诉讼之后,却慢慢地被市场所规避。直到他们突然意识到,自己一手好牌打得稀烂时,才恍然悔悟。这个时候,却发现已经出现了另外一个新生事物。
1993年网威公司买下Unix的版权,也许是意识到花在律师身上的钱远大于在销售Unix中赚到的钱,网威公司首席执行官雷.诺达决定解决掉所有官司。
8. 新生事物
AT&T试图从软件中赚钱,对Unix的限制越来越多,其中也包含了对高校的限制。BSD则没有这些限制,顿显优劣。同时,AT&T和BSD之间的斗争不断,也推动了他人对新生事物的探索——试着编写自己的类Unix系统,创立不受限制的操作系统。1987年,阿姆斯特丹自由大学教授——安迪.塔嫩鲍姆编写出类Unix操作系统——Minix。Minix在系统调用层面兼容Unix,但是完全重新编写,并采用不同的内核组织方式。安迪为了它的传播,编写了一本教科书,同时还提供免费的源代码。
由于,Minix仅用于教学。后来,一位来自芬兰的21岁大学生,在不满Unix以及Minix现状的情况之下,参考Minix并使用GNU提供的各种工具开发出了自己的类Unix系统——Linux,这个芬兰大学生就是——李纳斯.托瓦兹。
1991年8月25日,李纳斯在网上发布了这个项目。如同肯和丹尼斯没料到Unix成功一样,李纳斯也没料到只是他做着玩的一个小玩意在日后的整个互联网中会大放异彩。
李纳斯.托瓦兹
现如今,基于Linux内核的各种操作系统组成了整个互联网世界,并运行在全球95%以上的计算机设备之上。其中包含:数十亿台的安卓手机,各种大型计算机,Google、Facebook、亚马逊等公司的服务器,物联网IOT(Internet of things)设备,你我的汽车、电视、各种手持设备等等。
9. Unix的未来
贝尔实验室在近几十年中通过多次拆分、并购,已经不再是那个最初的贝尔实验室,知名度也大不如以前。但是,在其整个发展过程中,通过各位研究员的辛苦付出,为人类所创造的贡献是有目共睹的。无论未来贝尔实验室何去何从,都不可否认其在人类历史上的重要地位。
至于,Unix的未来,笔者觉得自己没有资格去评说。只是知道,Unix是整个互联网发展的主要推力,正是由于它的存在才使得整个人类进入了更好的未来。
10. 为什么是贝尔实验室
Unix成功的一大部分原因,还应该归功于贝尔实验室的管理与组织结构等这些非技术因素,总结起来包含以下几点:稳定的环境至关重要经费有保障富含难题的环境聘请优才优秀的技术管理员工之间无私的协作充满乐趣的环境正是由于早期贝尔实验室的这些特性,才能够使得具有各种领域高超技能的人才汇聚在一起,构思着改变世界的项目。
11. 写在最后
本文整理自曾在贝尔实验室工作,并参与过Unix开发的布莱恩.克尼汉教授编写的《Unix传奇》一书,文中内容大部分引用书中章节,感兴趣的小伙伴可以购买书籍,阅读更详尽的Unix传奇故事。Unix传奇
笔者以前也曾写过几篇相关文章《我眼中的C语言及其起源》、《那些对Unix做出贡献的先辈们》,感兴趣的小伙伴可以自行搜索。
最后想说的是,Unix不仅是个操作系统,更是个具有传奇色彩的故事。只有看懂了它,才能更好的懂得互联网未来的发展方向。