Unix 50 年:Android 和 iOS 操作系统,源自于同一个失败的项目
原文来自 Ars Technica,原标题《Unix at 50: How the OS that powered smartphones started from failure》,作者 RICHARD JENSEN,36 氪神译局编译,爱范儿经授权发布。
你或许不知道,安卓和 iOS 两个充满竞争的操作系统,其实是源自于同一个系统 ——Unix,直到现在,还在为这两个操作系统提供着支撑力量。
Unix 诞生 50 周年了。当时,这个几乎驱动着所有智能手机的操作系统,其实是一个项目失败的产物,开发者这个系统的程序员,并没有的获得支持,只能够使用别人闲置下来不用的计算机。
从一个失败的项目,到无处不在,Unix 诞生的早期,到底发生了什么?
也许它的无处不在早已掩盖了它的起源。 但是 Unix ,这个几乎驱动所有智能手机的操作系统,其实是 50 年前一个充满野心的项目失败后的产物。
当时,这个项目的团队阵容也非常豪华,有贝尔实验室、通用电气和麻省理工学院。
具体来说,Unix 主要是贝尔实验室中一些程序员的想法,它不可思议的故事,开始于一次会议,举办地点是新泽西州默里山贝尔实验室中一个不起眼的附属建筑顶层。
1969 年 3 月的最后一天,是一个阳光明媚、天气寒冷的星期一,这个计算机科学部门接待了两位来宾:贝尔实验室副主任比尔・贝克(Bill Baker)和研究主任埃德・戴维(Ed David)。
贝克准备终止 Multics (一种复合信息和计算服务的缩写) —— 这是一个计算机科学部门已经研究了四年的软件项目。当时,Multics 已经延期两年了,远远超出预算,而且只能在最宽松的条件中发挥作用。
为了尽可能好地解释这个明显失败的项目,贝克在一次演讲中声称,贝尔实验室已经完成了它在 Multics 中试图完成的所有事情,他们不再需要继续这个项目。
正如出席会议的伯克・塔格(Berk Tague)后来在普林斯顿大学所说的那样,「和越南一样,他宣布了胜利,并退出了 Multics。」
在部门内部,这一声明并不出人意料。程序员们敏锐地意识到,项目范围和他们被要求为之开发的计算机存在各种问题。
尽管如此,这仍然是一件值得努力的事情,而且只要贝尔实验室还在研究 Multics,他们就有一台价值 700 万美元的大型计算机可以在业余时间使用。
在 Multics 项目上工作的程序员之一丹尼斯・里奇后来说,他们都觉得这个项目想要成功,要承担一定的风险,而且成功的可能性非常渺茫。
取消 Multics 意味着,计算机科学部的程序员们必须从事的唯一项目的终结了,也意味着计算机科学部门失去了唯一一台计算机。
在 GE 645 的主机被拆卸下来运走之后,计算机科学部门的资源被削减到只剩下一些办公用品和几台终端机。
正如另一位参与这个项目的程序员肯・汤普森在 Unix Oral History 项目中挖苦地评论的那样,「我们的个人生活方式变得更加简朴。」
幸运的是,对计算机爱好者来说,约束有时会产生巨大的创造力。
所以,有史以来最有影响力的操作系统不是由风险资本家投资的,而且写这个系统的人也不会因此成为亿万富翁。
Unix 的出现,是因为贝尔实验室雇佣了聪明的人,并给予他们自由的空间,相信他们的项目是有用的。
在 Unix 之前,贝尔实验室的研究人员已经发明了晶体管和激光,以及在计算机图形学、语音合成和语音识别领域有许多创新。
为 Multics 让路
一开始的时候,大家都对 Multics 充满希望,尽管乍看之下,它的目标有点含糊,甚至有点夸张。
作为一个由通用电气、麻省理工和贝尔实验室共同参与的项目,Multics 被宣传为一个将计算能力转化为像电力或电话服务一样容易获得的项目。
在未来,贝尔实验室的研究人员只需要在他们的办公室里安装一个插孔,将他们的终端与 Multics 主机连接起来,就能够实时访问主机的全部资源,还可以在主机上存储文件并随意检索。
尽管这些听起来都是微不足道的,但证明了即使对于简单的计算任务来说,这些功能也十分重要。
但是,当 Multics 在 20 世纪 60 年代初被首次构想出来时,文件存储是一个新鲜事物,而「分时」(即多个用户共享一台计算机资源的能力)只是在实验中完成的,并不是在拥有大量用户的生产环境中实现的。
在 20 世纪 60 年代早期,计算机只是一个接一个地运行程序。贝尔实验室的研究人员要编写一个程序,并把它转换成计算机接受的任何形式的输入 (穿孔卡片、纸带或者花哨的机器磁性介质) ,然后把它传输到计算机中心。
计算机操作员会把程序排好队,运行它,然后把打印出来的结果和原始程序交给研究人员。
如果代码中有错误,打印出穿孔卡片,把它们带到计算机中心,等待的结果可能就会是一个上面写着类似「SYNTAX ERROR」的打印输出。也许你还可以得到一个线索或其它可能有用的信息。
随着程序变得越来越复杂,这种调试代码的方法变得更加令人沮丧。
但没有哪家公司或大学,甚至贝尔实验室,能够为每位研究员购买一台主机 ——1965 年,贝尔实验室用于开发 Multics 的 GE 645 的成本几乎与一架波音 737 相当。
因此,人们对分时技术(译者注:对计算机资源的一种共享方式,利用多道程序与多任务处理使多个用戶可以同时使用一台计算机。)产生了广泛的兴趣,这种技术允许多个研究人员同时在大型主机上运行程序,并在他们的远程终端上立即得到结果。
通过分时,程序不会被打印在穿孔卡片上,而是被编写并存储在主机上。理论上,研究人员可以在不离开办公室的情况下动态地编写、编辑和运行他们的程序。 Multics 的构想就是为了这个目标,它开始于 1964 年,最初定下的交付期限是 1967 年。
当时,麻省理工学院已经开发出了一种名为 CTSS 的原始分时系统正在使用。
具体的项目实施中,麻省理工学院提供规范,通用电气提供硬件,通用电气和贝尔实验室将分担编程任务。
Unix 团队:聚集!
陆克文・凯纳迪(Rudd Canaday)是 Multics 项目的首批程序员之一。凯纳迪在 1964 年被贝尔实验室聘用,在 1966 年被调到 Multics 项目上之前,还为耐克导弹防御计划编写了一个简单的分时系统。
第二年,实验室雇佣了里奇和肯・汤普森,前者是哈佛大学毕业生,父亲是贝尔实验室的校友,后者自称是军人,据他自己承认,至少在一个月的时间内,他都在 Cal-Berkeley 的校区躲避贝尔实验室的招聘人员。
凯纳迪、里奇和汤普森来自不同的地方,但最终却来到了同一个地方:贝尔实验室大楼的顶层,在狭窄的空间里工作。没有空调,但他们可以访问价值数百万美元的大型主机,而且监管相当宽松。
这三个研究人员都是 MTS,或者说是实验室的技术人员。
这个称号带来了一种隐含的信任,即他们有能力找到自己的项目,并且 —— 如果让他们自行决定的话 —— 从事对实验室的母公司 AT & T 有利的研究。
幸运的是,这份工作也给了他们很大的自由。
马尔科姆・道格拉斯・麦克罗伊(Malcolm Douglas McIlroy)是名义上的监督人员,毕业于麻省理工学院,自 1958 年以来一直在贝尔实验室工作。
汤普森、里奇、卡纳迪和麦克罗伊都很清楚麻省理工学院的规范中存在的缺陷 —— 到这个时候已经有几千页了 —— 他们知道,至少他们面临的一些挑战可以归咎于 GE 645 的架构。
随着时间的推移,他们四个,特别是汤普森,开始相信如果给他们一个新的开始,他们可以开发出一个比 Multics 更好的操作系统。
舒适的环境
▲ 肯·汤普森 (Ken Thompson,坐着) 和丹尼斯·里奇 (Dennis Ritchie,站着) 在 PDP-11 前(译者注:PDP-11 是最著名的计算机之一,是数字设备公司(DEC)从 1960 年代早期开始制造的产品之一)。
里奇开玩笑说,与 1999 年 3 月《科学美国人》(Scientific American) 等杂志刊登自己的照片时相比,他那时的头发「更加茂密」。
对于贝尔实验室的程序员来说,Multics 并不是他们的全职工作,他们使用的通用电气主机也可以用于其他项目。
汤普森的操作系统就是其中之一。 那年冬天他一直在做这个程序,并且想出了如何让每个终端同时连接到机器上打印「HELLO」。
但是在他能够进一步发展之前,Multics 项目被取消了,大型机被打包并搬出了他所在的计算机科学部门。
贝克和戴维斯取消 Multics 项目的时候,并没有给麦克罗伊的团队提供新的工作,这让他们有点忐忑不安。 他们担心,随着 Multics 的消亡,自己在贝尔实验室的职位也不会持续很长时间。
然而,这个蓬勃发展的开发团队恰好处于适合 Unix 蓬勃发展的环境中。 贝尔实验室与其他地方不同,它的资金来自美国几乎所有电话线路的月收入的一部分。
把一小部分程序员放在默里山综合楼的顶层并不会让公司破产。汤普森所在的部门,也有一个有理想的经理人来支持他们追求好奇心。
管理计算机科学研究部门 (由麦克罗伊的程序员和一群数学家组成) 的山姆・摩根也没打算依靠麦克罗伊的团队,因为他们突然没有什么特别的事情可做。
摩根是一名受过专业训练的应用数学家,1967 年被提升为部门主任。
「我不认为管理是他最喜欢的活动,」布莱恩・科尼汉 (Brian Kernighan) 告诉 Ars,他的办公室就在汤普森对面。「但他非常努力地把它做好。 他很善良,试图善待每一个人。」
「这里的管理原则是雇佣聪明的人,然后向他们提供环境,」摩根自己在 Unix 口述历史项目中回忆道。「你给他们大致的指示,告诉他们需要什么样的东西,给他们很多自由。」
因此,摩根没有提供具体的方向,而是倾向于运用他所说的「选择性热情」来鼓励一个特定的研究项目,他指出,「如果你错误地阻止或没有回应一些后来证明是好的东西,如果它真的是一个好的想法,它会回来。」
「他让人们做自己的事情,从不告诉任何人他们应该做什么,」科尼汉回忆说。 当时,贝尔实验室也强调跨学科的合作。「每个人都一直开着门,所以如果你有什么问题,附近有个专家,你可以走进去寻求帮助,」科尼汉回忆道。
尽管如此,对于汤普森和他的同事们来说,目前还有一个小问题 —— 没有人有计算机。虽然实验室管理人员对计算机本身没有问题,但麦克罗伊的程序员无法说服他们的老板给他们购买一台计算机。
由于 Multics 的惨败,他们没法说服任何人给他们一台新计算机,以便他们继续操作系统的研究和开发。
但从实验室管理人员的角度来看,汤普森和其他团队成员似乎只想继续从事 Multics 项目。
共享计算财富
计算机科学部门与声学和行为研究部门共用一层楼。这个部门更大,由电子音乐、声音合成和声音识别领域的先驱马克斯・马修斯(Max Mathews)领导。
声学部门,明显应用于 AT&T 的核心业务,显然比计算机科学部门资金更充足。
此外,这里还有一种似乎有意激怒里奇和汤普森的情况 —— 声学部门并不缺少计算机。里奇和汤普森本来就对公司的官僚作风有一定的不屑。 事实上,声学的计算机数量远远超过了他们的需要。
而且,只要声学部门的程序变得过于复杂,无法在他们的计算机上高效运行时,他们只需要向实验室管理人员索要新的计算机就可以了。
▲马克斯・马修斯在贝尔实验室的模拟电子实验室里演奏一把电子小提琴。
尽管他们对隔壁能够获取大量资金存在一定程度的嫉妒,但在 60 年代和 70 年代声学和计算机科学部门之间也有一些合作。其实,贝尔实验室在计算机技术方面的许多创新,实际上来自声学系。
例如,在 60 年代早期,声学研究员 Bill Ninke 用 DEC PDP-7 微型计算机演示了一个基本图形用户界面。
虽然声学仍然保留着那台计算机,但是他们已经把它闲置,没有使用它,并把它放在了六楼的某个偏僻的地方。
因此,汤普森,不知疲倦地将实验室的角落和缝隙扒了一个遍以后,终于发现了 PDP-7,这个时候,戴维斯和贝克也刚刚宣布取消 Multics 项目后不久。
在团队其他人的帮助下,汤普森把 PDP-7 的各种零件打包起来,把它放进了一个指定给音响部门的壁橱里,然后开始运行。
PDP-7 的大小相当于一个冰箱,并不算终端机。而且,他们还说服声学部门为计算机提供空间,并让这个部门从预算中支付机器的日常修理费用。
麦克罗伊的程序员们,突然有了一台电脑。 因此,在 1969 年夏天,汤普森、里奇和卡纳迪在 PDP-7 上研究出了一个基本的文件管理器。
这不是一件简单的任务。 批量计算 (一个接一个地运行程序) 很少能让计算机能够永久地存储信息,许多大型主机上没有任何永久存储设备 (无论是磁盘还是硬盘)。
但是,这些程序员所喜欢的分时环境,必需要附加存储器。当多个用户同时连接到同一台计算机时,文件管理器必须编写得足够好,以防止一个用户的文件被写到另一个用户的文件上。
而且,还要求当读取一个文件时,必须将该文件的输出发送给打开该文件的用户。
这是一个麦克罗伊的团队愿意接受的挑战。
他们已经看到了计算机的未来,并且想要探索它。他们知道 Multics 是个死胡同,但是他们发现了共享开发、共享访问和实时计算所带来的可能性。
20 年后,里奇在普林斯顿大学这样描述说:「我们想要保留的不仅仅是一个做编程的好环境,而是一个可以能够让团队合作的系统。」
「在 20 世纪 60 年代后期,我还在使用普林斯顿的 IBM 7094 和贝尔实验室的 GE 635 进行批处理计算,」布莱恩・科尼汉告诉 Ars。
「但我在 1966 年夏天,在麻省理工学院用上了 CTSS,这揭示了交互式计算是多么美好。」
一旦 Unix 开始运行,科尼汉就从研究抽象主题转向编写程序,最终与里奇合作研究 C 语言,问世之后,其立即成为了编程手册的黄金标准。
从贝尔实验室的自助餐厅到我们的现代手机
尽管实验室没有密切关注研究人员什么时候上下班,但在那个夏天,凯纳迪尽了最大努力保持正常的工作时间。但汤普森和里奇则稍微放松了一些。
他们俩的工作时间都极不规律。汤普森告诉 Unix Oral history 项目,他当时把每天当做 27 个小时来工作,这使他与其他人的每天 24 小时工作不同步。
里奇只是一个传统的夜猫子。
因此,这三位开发者聚在一起的时间大多是在午餐时间,甚至在那个时候,有时凯纳迪会打电话到汤普森和里奇家里,提醒他们贝尔实验室的自助餐厅什么时候关门。
在自助餐厅,三位开发者讨论了这个新操作系统的文件管理器的基本原理,几乎没有注意到员工清理他们周围的午餐垃圾。
他们还在计算机科学部门的办公室里研究这个系统。 麦克罗伊的办公室就在凯纳迪对面,他记得那年夏天,他们总是围着一块黑板工作。
最终,当他们在概念上或多或少地完善了文件管理系统后,就到了真正编写代码的时候了。这三个人的字写得都很糟糕,他们决定使用实验室的口述服务。
其中一人打电话给实验室分机,将整个代码库录入磁带录音机。 因此,一些身份不明的办公室工作人员或工作人员很快就遇到了一个麻烦的任务,试图将其转换成打印用的文件。
当然,这个过程并不完美。 在各种各样的错误中,「inode」作为「eye node」返回,但是输出仍然被看作是对各种涂鸦的明显改进。
1969 年 8 月,汤普森的妻子和儿子去伯克利度假三周,看望家人。汤普森决定用这段时间编写一个汇编程序、一个文件编辑器和一个管理 PDP-7 处理器的内核。
这将使这一组文件管理器成为一个成熟的操作系统。 他慷慨地为每项任务分配了一个星期的时间。
汤普森差不多按时完成了他的任务。 到了 9 月,贝尔实验室的计算机科学部门已经有了一个运行在 PDP-7 上的操作系统,而且不是 Multics。
PDP-7 当时没有磁带驱动器或硬盘驱动器,系统是通过向其输入一个打孔纸来「启动」。 由于没有附加的驱动器,他们辛苦开发的文件系统不得不再等待一段时间面世,但他们有一个良好的多用户分时环境可以运行。
这个团队还是觉得这是一项成就,并将其操作系统命名为「UNICS」,即「联合信息与计算系统」(UNIplexed Information and Computing System)的缩写。
▲第七版 Unix 是从 1979 年开始的 Unix 操作系统的重要早期版本。这是在 AT & T 将 Unix 商业化之前,贝尔实验室推广的最后一个版本。
那年 11 月,汤普森进行述职报告中,包含了对他构建的这个新操作系统的描述。
到了 1970 年夏天,这个团队已经在 PDP-7 上安装了一个磁带驱动器,而且他们蓬勃发展的操作系统也为程序员提供了越来越多的工具选择 (其中一些至今仍然存在)。
但是,尽管取得了成功,汤普森、卡纳迪和里奇在申请全新的计算机时,仍然被实验室管理层拒绝。
直到 1971 年末,计算机科学系才拥有了一台真正现代化的计算机。 在过去一年左右的时间里,Unix 团队已经开发了几个工具来自动格式化文本文件以便打印。
他们这样做是为了简化他们所钟爱的项目的文档制作,但是他们的工具传播出去了了,被顶层其他地方的几个研究人员使用。
与此同时,实验室的法律部门准备在一个名为「AstroText」的大型主机程序上花一大笔钱。
听到这个风声,Unix 的工作人员意识到他们只需要一点点努力,就可以升级他们自己编写的工具,使之成为法律部门可以用来准备专利申请的东西。
这时,计算机科学部门提出了实验室管理购买 DEC PDP-11,用于文档生产。马克斯・马修斯提出从声学部门的预算中来买。
最后,管理层让步了,买了一台电脑给 Unix 团队使用。
最终,关于这个操作系统的消息泄露了出去,拥有 PDP-11 的企业和机构开始与贝尔实验室联系,想购买他们的新操作系统。 这家实验室同意免费提供副本,只收取邮资和存储费用。
就这样,他们创造了科技的历史。
到了 20 世纪 70 年代末,这个操作系统的一个副本传到了加州大学伯克利分校,在 20 世纪 80 年代早期,那里的程序员把它改装成可以在 PC 上运行。
他们开发的 Unix 版本,也就是 BSD 操作系统,被 NeXT 的开发人员选中。
NeXT 是史蒂夫・乔布斯在 1985 年离开苹果公司后创立的公司,当苹果在 1996 年收购 NeXT 时,BSD 成为了 OS X 和 iOS 的起点。
Unix 的免费发行在 1984 年停止,当时美国政府拆分 AT & T,之前禁止该公司从贝尔实验室的许多发明中获利的协议也到期了。
然而,Unix 社区已经习惯了免费软件,所以当得知 AT & T 将很快对 Unix 的所有副本收费,并禁止修改源代码时,理查德・斯托曼(Richard Stallman)和其他公司开始使用免费分发给任何人的软件重新创建 Unix,他们称他们的项目为「GNU」,而且对修改没有任何限制。
1991 年,芬兰赫尔辛基的一名大学生林纳斯・托瓦兹(Linus Torvalds)使用几个 GNU 工具,编写了一个可以在 PC 上运行的操作系统内核。
他的软件,最终被称为 Linux,在 2004 年成为 Android 操作系统的基础。