引言

尼尔·盖曼有部小说《美国众神》,这是一本很有意思的书。它说的是在美国这片历史并不长的土地上,随着移民文化而到来的各路新旧大神,彼此之间的阴谋与斗争。

书中有一个让我觉得很新奇的设定,就是新生事物也有着各自的神。例如高速公路之神、计算机之神、互联网之神等。这些神所获得的祭祀,就是来自人类频繁的使用。

当我看到布莱恩·W·克尼汉(Brian W. Kernighan)所著的《Unix传奇》一书时,我忽然发现,现代操作系统终于也有了自己的神。

不过,这并不是某一个人的故事,而是前后几十年间,一批又一批顶尖智慧的头脑共同创造出一个新世界的传奇。就是这样一群卓尔不凡之人,可称为Unix操作系统的众神。

这是一长串闪耀着光芒的名字,在这串智慧珍珠之中最耀眼的有肯·汤普森、丹尼斯·里奇、道格·麦基尔罗伊、阿尔·阿霍、彼得·温伯格、比尔·乔伊,还有布莱恩·克尼汉……

要讲述众神创世的故事,自然要先从他们的神殿说起。

计算机科学的神殿

从美国的金融中心纽约市出发,向北30多公里就会到达新泽西州的墨里山。此处风光秀丽,景色迷人,谁能想到闻名世界的科技殿堂就座落于此,这就是著名的贝尔实验室。

贝尔实验室由AT&T(美国电话电报公司)创建,其初衷是为了解决建设全国电话系统时遇到的科技问题。随着时间的推进,以及科技的不断发展,贝尔实验室在计算机科学领域做出了诸多开创性的贡献。

要说这个实验室有多牛叉,先上一组数字,这里诞生了9项诺贝尔奖和5项图灵奖。可以想象,在这里能占着一张办公桌的,那都是顶尖的人物。

那么,为什么贝尔实验室能吸引到如此之多的大神,而且还能引领计算机科学的创新呢?

答案就是宽松的研究环境、开放自由的学术氛围,以及由技术专家担任的管理团队。当然,充足的资金和优渥的待遇也是重要条件,反正AT&T公司是不差钱的主。

在贝尔实验室,管理层不会下达明确的目标和指令,研究者完全可以按照自己的意愿去工作。这看起来似乎有些不可思议,连要做什么都不知道,谁能保证投的钱不会打水漂,会不会有人上班就是在摸鱼呢。

这就是前沿科学的特点,它无法被设计,研究成果大多是在顶级的智慧群体之中交流、碰撞出来。所以在贝尔实验室想要站住脚,光靠脑子好使还不行。必须要充分融入这个集体之中,能提出自己独到的见解,也能无私地为他人提供帮助。

因此贝尔实验室根本不担心会有人在摸鱼,拿不出成果的人在这里自然也待不下去。能留下的,也会不断成长,最终成为神殿里的一员大神。

这样看来,大神们做的就是极具难度的开创性研究,出成果确实不容易。但研究成功,则是改变世界的创新。从投资的角度看,十个项目里能成功一个,就足以在业界保持领先了,付出的成本对AT&T来说还是很划算的。

这就是贝尔实验室能够获得成就的原因所在。接下来我们要说的就是众神开发Unix的创世之旅。

第二系统效应

计算机最基础的软件是操作系统,它可以看成是机器与人之间的一层接口。操作系统本就是计算机的一部分,没有操作系统的机器,则空有强大的计算能力却发挥不出应有的效能来。

麻省理工学院在1964年推出了CTSS(兼容分时系统),就是将CPU的算力按时间分片,可以支持多人同时操作。那时计算机是非常宝贵的资源,这一设计可以让更多人使用计算机,自然CTSS得到了许多关注。

麻省理工的研究者们决定趁热打铁,他们要在CTSS的基础上研发一套更好的操作系统,称之为Multics。目标是可以成为通用的信息处理系统。同时麻省理工也希望,其他有实力的研究机构与企业能参与到研发与生产中来。

因为贝尔实验室在很早就开始了对计算机操作系统的研究,因此获得了麻省理工学院的青睐,由贝尔实验室来负责操作系统软件的开发。而通用电气则负责计算机硬件的制造和生产。

在为Multics进行设计的时候,麻省理工的研究员们将自己诸多的美好理想都加了进去。这样其实会产生一个问题,就是新系统会被过度设计,而太复杂的设计是很难被开发出来的。

这种现象就是“第二系统效应”,第一版的成功会让人过于自信,从而在第二版上又过于超前,结果导致系统开发出来复杂难用。

果然,经过三年的辛苦开发,Multics复杂得连贝尔实验室的诸位大神都看不下去,以致于贝尔实验室宣布退出Multics的开发工作。实在是不想再把宝贵的人力搭进这样一个华而不实的系统里去了。

虽然Multics未获成功,但参与过此项目的大神们动了念头想自己搞一个操作系统出来。这个意料之外的产物就是后来对业界影响巨大的Unix操作系统。

Unix的诞生

参与过Multics项目的肯·汤普森,决心继续进行操作系统的开发。但贝尔实验室被Multics搞得精疲力尽,不愿意再支持肯的想法。

于是肯自己找了一台过时的DEC PDP-7计算机,开始捣腾起操作系统来。这里需要说明的是,在上世纪六十年代的时候,计算机的配置相比于现在是极低的,而且造价高昂。

PDP-7只有16K字节的内存,今天一个中等配置的手机内存也是它的一百万倍。要在这样的设备上实现操作系统功能,就必须要拥有高超的编程技巧与算法功底。幸好,肯·汤普森就是这样一位大神。

更为传奇的是,肯实现最初版本的这套操作系统只花了三周时间,还正好是趁他太太带着孩子去度假的空暇。从某种意义上说,全人类都要感谢肯的太太独自带娃所做出的贡献。

系统有了,接下来就是得给它取个响亮的名字了。在一次同事之间工作中的闲聊中,布莱恩·克尼汉对此发表了自己的看法。

他认为之前做的Multics取名就是野心太大,因为其含有“包罗万象”之意,结果迷失在复杂性的迷宫里。那么这套新的操作系统应该是简洁而功能聚焦的,要用“uni”代替“multi”,叫“UNICS”会比较有意义。

显然,克尼汉的见解得到了诸位大神的肯定,“UNICS”的命名得以保留,并在后来调整为更合适的“UNIX”。而布莱恩·W·克尼汉也享受了Unix命名者的殊荣。

这一命名完美地契合了Unix系统所具有的独特设计哲学,那就是简洁、专注。

设计哲学

肯·汤普森开发出来的原型Unix系统,深得贝尔实验室这帮大佬们的青睐。Unix的另一位热心开发参与者丹尼斯·里奇,他和肯都希望能购置一台比PDP-7更好的计算机。

但贝尔实验室的管理层被失败的Multics搞得心有余悸,说什么也不肯批这个条子。不过你以为这就让能诸位大神们轻言放弃吗?不可能的,大神们有的是暗渡陈仓的办法。

因为贝尔实验室每年要编写提交许多专利文件,因此在文字处理上有着迫切需求。乔·奥桑纳抓住了这个痛点,提出可以采购PDP-11用于编写专利材料,Unix小组可以为其提供软件。

肯·汤普森和丹尼斯·里奇如愿以偿地拿到了比PDP-7更好的PDP-11,两位大神立即在新机器上展开工作。由此,在PDP-11机器上Unix完成了从原型到初版的开发。

在此之后,Unix就一直在实验室里迭代。1975年5月,第六版Unix发布,从这一版本开始,Unix逐渐为外界所知,隐然有走红之势。

为什么这一版具有如此魅力?

因为现代操作系统的设计哲学(套路)就此形成,并稳定下来了。这一哲学包含两个方面,第一是简洁,第二是专注。

先说简洁,Unix的文件系统就是最佳示范。在Unix的世界里,一切皆文件。说到文件,我们首先想到的可能是打开一个文档,并在里面输入内容,最后保存关闭。这是一个关于普通文件的典型操作过程,只需要五个系统调用(creat, open, read, write, close)就可以全部完成。

那么,对于其他外接的设备,也可以将其视为一个特殊文件,只需要用五个系统调用组合使用,就能完成读写数据的工作。

这一理念有多么伟大,打个简单的比方就好理解了。拿开车来说,如果每个品牌的汽车驾驶方法都不一样,你想学车,就要把所有的开车方法都学一遍,你肯定会认为这是吃饱了撑的。

五个基本的系统调用就是统一的驾驶方法,不同的设备就像不同品牌的汽车。你不必关心汽车之间的差异,反正你坐进驾驶室就知道应该挂档、踩油门、上路。

再说专注,Unix系统里有许多程序,这些程序各司其责,只将一件事做好。例如echo就是回显文本;cat就是显示文件内容;ls就是显示磁盘目录内容。

那么,要实现复杂的功能怎么办?答案是借助于shell、管道与重定向机制,将独立的小程序组合起来,实现想要的功能。

这就是一种典型的分工合作思想。还是以汽车来说,现在的汽车厂商不可能自己生产所有的零部件,都是从零配件厂商采购之后,组装成车。

这里面shell是供程序所运行的环境,管道是程序间数据流通的通道。管道机制是真正的神来之笔。道格·麦基尔罗伊最初有这个想法,但总是被实现问题所困扰,直到有一天启发了肯·汤普森的思考。

如同被上帝亲吻了脑门,肯猛然省悟了管道的机理。他只用了一个小时就在系统调用中实现了管道。这就是将程序的孤岛给连接起来的竖线符:“|”。

举例来说,ls可以显示目录下的文件名。但如果你想知道目录下有多少个文件,你显然不愿意在ls里加一段代码再重新编译一遍。那么正好还有一个wc程序,它可以统计空格或换行分隔开的单词数。

你可能想到,要是能把这两个程序组合起来使用,那不就解决问题了吗?是的,一行命令就可以搞定:ls | wc

这就是Unix的迷人之处。

一门叫New B的语言

现在要说一下开发操作系统所使用的编程语言了。如果说操作系统是一座金碧辉煌的大厦,那么编程语言就是用来建造它的工具。

在上世纪七十年代初期,贝尔实验室的大神们是为此困扰不已的,因为他们没有称手好用的工具。其实IBM早在1964年就创建了PL/I,作为系统级的编程语言。但因为它也是中了“第二系统效应”的毒,包括了太多特性,以至于复杂难用。

后来剑桥大学教授马丁·理查兹设计开发了一款名为BCPL(Basic Combined Programming Language)的系统编程语言。它比PL/I要简单得多,因此Unix小组的成员们还能凑合着用。

但肯·汤普森这样的大神是会止步于此的,基于PDP-7的环境,他自己又重新设计并开发了一门新的语言,称之为B语言。从语言特性上来看,它和BCPL是非常接近的。

当性能更好的PDP-11计算机到货以后,好伙伴丹尼斯·里奇又对B语言进行了改造,使之能将新机器的性能发挥出来。这门语言被称为“NB”,它是“New B”的缩写。

我想作为一名中文阅读者,你此刻一定忍不住响亮地念了出来,然后一种爽快感令身心通透。很好,我的感觉也是这样。

这门叫“New B”的语言在后来经过改进,正式定名为“C”语言,人类历史从此翻开了新的篇章。这可以说就像普罗米修斯从太阳神的马车上取得火种之后,将之献给人类一样伟大。

这不是我在唬人吹牛,C语言的出现,将系统编程语言从石器时代带入了铁器时代。C语言简单易用,而且功能强大。首先就用在了开发新版本的Unix,这大大地提高了效率,还保证了稳定性。

其次,C语言使得系统移植变得轻而易举了。在早先的年代,硬件的架构是千差万别的,在不同的机器上如果要开发相同的功能,就得写出两套代码来。良好的可移植性,这也是Unix能够流行起来的重要原因。

最后,也是最重要的,C语言在贝尔实验室之外获得了广泛的使用。这让全世界的专业人士以及业余爱好者们可以共同为Unix开发软件,从而形成了一个强大的生态环境。

在上世纪九十年代初的芬兰赫尔辛基大学计算机系,一位长着大鼻子的自卑青年,就是用C语言开发出了改变世界的Linux操作系统,其实Linux本身也是遵循Unix系统调用接口规范的变种。这位青年就是Linus Torvalds。

即使直到今天,C语言也是系统编程领域的首选。尤其是当下物联网(IoT)概念火热,C语言在诸多低功耗嵌入式系统中被广泛应用,居然还把这门40年前的语言捧上了编程语言排行榜的榜首位置。

C语言,真的很“New B”。

技术布道者们

贝尔实验室在对各位技术大神的管理上,还有一点是为人所称道的,就是鼓励大家勤奋地写作,出版图书,积极传播技术价值。这对于Unix系统的发展,以及C语言的普及都产生了强大的推动作用。

一项技术被发明出来,只有被广泛使用才会有价值。贝尔实验室的管理层是深知这个道理的,所以实验室对于技术写作的支持并没有停留在口头上,而是建立了有效的机制和可靠的保障。

首先,实验室允许大神们在一段时期内专心从事写作,工资照发不误。这样一部优秀的技术图书可以尽可能快地得到出版。如果大神们白天要上班,只能在晚上或周末来写书,那就不知道会拖成什么样。

其次,图书出版后,作者是可以获得版税的。当然,版权还是属于贝尔实验室,但要是出的书爆款了,这收入也是很可观的。没有规定说计算机科学家就要安贫乐道,名利双收的好事为什么要拒绝呢。

贝尔实验室由此也形成了开放、互助、乐于分享的良好风气。一个人在写作的时候遇到问题,随时可以向他人求教,并得到有效的帮助;谁的稿子写好了,首先就是让身边的同事们审阅,并得到认真的反馈。

所以贝尔实验室所出的技术图书质量极高,作者们除了对内容精益求精,在遣词造句上也用心良苦。多少经典著作成为技术爱好者的圣经、高校的必修教材。许多都流传至今,出现在程序员们的必读书单上。

下面就列举一些最耀眼的明珠吧。

  • 《C程序设计语言》,Brian W. Kernighan / Dennis M. Ritchie,C语言的创造者亲自写的,“hello, wrold”就是这本书里走向世界;
  • 《编译原理》,Alfred V. Aho / Monica S.Lam / Ravi Sethi / Jeffrey D. Ullman,传奇的龙书;
  • 《计算机算法的设计与分析》,Alfred V.Aho / John E.Hopcroft / Jeffrey D.Ullman,算法经典;
  • 《C++程序设计原理与实践》,Bjarne Stroustrup,C++之父教你怎么玩转它;
  • 《编程珠玑》,Jon Bentley,豆瓣上说这是历史上最伟大的计算机科学著作之一;
  • 《Unix编程环境》,Brian W.Kernighan / Rob Pike,Unix的命名者给你讲它的编程哲学;
  • ……

失败的商业化之路

在1980年之后,AT&T因其在通信行业的垄断地位,被美国司法部给盯上。迫于压力,AT&T不得不将公司进行拆分,而这也成为了AT&T衰落的开始,贝尔实验室的命运也从此走向了没落。

拆分之后,从科研部门分离出去的一个名为Unix系统实验室(Unix System Laboratories, 简称USL)的机构。USL虽然名为实验室,但实际上是专注于运营支持,后来更是将业务扩大到销售和推广。

得益于AT&T早期将Unix免费分发给大学生们去使用,无意中培养出了一批精通Unix系统的工程师,从而形成了一定规模的市场。USL则将Unix专业商品化,意欲有一番大作为。

本来应该要好好培育这个市场,但是AT&T和USL却向加州大学伯克利分校,就Unix的版权问题发起了诉讼。此事还要从早前AT&T将Unix免费发放给大学做研究说起。

加州大学伯克利分校的计算机系统研究组的比尔·乔伊和同事们,在原有的Unix基础之上改造升级,形成了伯克利发行版(BSD)。而用户是可以免费使用BSD发行版的。

AT&T显然认为BSD版侵犯了自己的知识产权,所以就有了起诉伯克利一事。但伯克利并没有就此服输,而是持续将原有代码删除,代之以新的实现。就是说功能一样,但代码实现是完全不一样的。

这样做也无法让AT&T罢手,于是又发起新的诉讼。这一次法院判伯克利胜诉。这两家在长期的官司中消耗了太多的时间与资本,可以说最后的结果是AT&T功亏一篑。

本来还想指着卖Unix来赚钱,一看市场上有那么多免费使用的版本。于是就想通过打官司禁止发行免费版,这就是整个想法都不对了,除了把Unix市场的水搅浑,谁也没有得到好处。

Linux的横空出世,让受够了Unix争执的技术人看到了新希望。Linus在设计Linux之初,遵循的就是POSIX规范。Unix用户可以相当平滑地过渡到Linux上,在此之后就是属于Linux的时代了。

Unix以另一种方式,继续着自己的传奇。

结语

如今的贝尔实验室所在地,已是人去楼空,一片破败荒凉景象。是非成败转头空,谁能想到这里的门槛曾是地球上最难踏进来的。

而大神们也都有了各自的归宿。肯·汤普森在2000年之后退休,当了阵子飞行员,算是真的放飞自我了。后来进入谷歌公司,与贝尔实验室的老战友罗布·派克共同推出了现在炙手可热的Go语言。

丹尼斯·里奇在2011年驾鹤西去,不觉也已十年,或许他正在天堂里跟上帝探讨宇宙的终极算法吧。

布莱恩·克尼汉则写下了《Unix传奇:历史与回忆》一书,让我们得以永远铭记众神的不朽光辉,还有那无比的荣耀!

《Unix传奇》:众神的创世记相关推荐

  1. Unix传奇(下篇)

    2010年04月09日 陈皓 评论 75 条评论 44,560 人阅读 [本文曾于2007年3月于我在CSDN上的BLOG发布,现在我把其搬到酷壳来,一来是觉得这段历史相当传奇,值得大家再看看,二来也 ...

  2. 有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼

    自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象.它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹. 2020年,UNIX诞生50周 ...

  3. 闪耀在UNIX传奇往事中的启示,UNIX见证者带你一览究竟

    ▎4月20日晚8点,锁定直播间:UNIX传奇往事的启示--暨<UNIX传奇>新书发布会. UNIX是现代操作系统的鼻祖.从UNIX到FreeBSD,再到OS X,最后到iOS应运而生.由于 ...

  4. Unix传奇 (上篇)

    Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然.总结过去,我们才会知道我们明天该如何去规划,该如何去走.在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考 ...

  5. 《UNIX 传奇》读书笔记

    春节读完了 Brian W. Kernighan 的最新著作<UNIX 传奇>,却一直没时间输出点什么,今日趁将机械键盘拾掇出来使用之时,且做笔记沉淀一二. Brian W. Kernig ...

  6. 计算机大佬Brian Kernighan的新书《UNIX传奇》带你了解UNIX的前世今生

    UNIX传奇:历史与回忆 UNIX诞生的见证者 Brian W. Kernighan 带你看懂UNIX操作系统发展史 探寻9项诺贝尔奖+4项图灵奖的传奇起源 50年历史文化,120位天才人物 写给对U ...

  7. Unix传奇 (下篇)

    Unix传奇(下篇) 陈皓   <<<<   U nix传奇(上篇) Unix与黑客文化 黑客的文化和Unix的商业化存在着必然的联系.自从Unix出现,黑客文化就与之而来. ...

  8. 91期百淘感想-创世记

    91期百淘感想-创世记 圣经上说,上帝创造世界,只用了7天. 第一日:上帝创造了天地 第二日:空气 第三日:陆地与海洋,还有植物 第四日:日月星辰 第五日:鸟类和鱼类 第六日:哺乳动物.昆虫.人类 第 ...

  9. 一周程序员新书精选:UNIX传奇、算法设计等上榜TOP10

    刚刚过完清明小长假,不知道小伙伴们都去了哪些打卡胜地?或宅在家里的你翻阅了哪本书?做了哪些规划?如果什么都没安排,就来看一看小编给您准备的精选书单吧. 1.机器学习公式详解 TOP3 这本书是读透&q ...

  10. UNIX传奇(上篇)

    了解过去,我们才能知其然,更知所以然.总结过去,我们才会知道我们明天该如何去规划,该如何去走.在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津 ...

最新文章

  1. github访问不了_用ssh套娃翻到大陆公网给校园内网服务器装R包以及使用GitHub
  2. python白名单验证-JWT黑名单和白名单
  3. CPU的基本结构和功能
  4. vue-router常见问题解决方案。(滚轴回到顶部、页面跳转同一页面报错、手机电脑端路由跳转)
  5. Python的用途是什么? Python编程语言有10多种编码用途。
  6. 北妈每日一题:JS从无序乱码找我要的数字!
  7. python获得对象对应的类名称
  8. 用java编写圆锥_求java大神帮忙 求大神帮助!Java
  9. html 背景区域设置,HTML5 背景的显示区域实现
  10. JS中的逻辑运算符、||,位运算符|,
  11. Spring Boot与Docker(一):微服务架构和容器化概述
  12. ModelSerializer序列化(Apiview)
  13. 搭建PyQt环境(Vs Code)
  14. SublimeText集成印象笔记插件简略步骤
  15. excel批量删除所有空白行
  16. 心田花开:小学三年级语文下册古诗词整理【全】
  17. ArcGIS如何画中国地图
  18. linux查看隐藏大文件夹,Linux系统隐藏文件/文件夹操作教程
  19. 史上最简单的spark教程第二章-快速开发部署你的第一个Java+spark程序
  20. 读文献——《Deep Residual Learning for Image Recognition》

热门文章

  1. WPS专业版自带字体
  2. 解决VM虚拟机鼠标闪烁的问题
  3. php ajax mysql视频教学视频_PHP入门教程之AJAX 与 MySQL
  4. 在VFP里玩SQL查询
  5. win7如何调整计算机c盘,Win7系统增加C盘空间的方法
  6. JavaMD5加密MD5Utils工具类
  7. python 关于Python看金庸小说的实验
  8. java jar在电脑哪里_例举jar文件怎么打开
  9. 什么是网络,网络类型,网络结构
  10. 转载python操作wps V9 API,测试好用