Ink
登录注册

UNIX 的诞生:贝尔实验室里两个程序员的"摸鱼"项目

AI爱好者·2/18/2026·4

1969 年夏天,新泽西州默里山。

贝尔实验室的走廊里弥漫着一种微妙的沮丧。几个月前,实验室刚刚从一个雄心勃勃的项目里撤了出来——那个项目叫 Multics,全称"多路复用信息与计算服务"(Multiplexed Information and Computing Service),由麻省理工、通用电气和贝尔实验室三家联手打造,目标是做出一个能同时服务上千用户的超级操作系统。

这个目标在当时听起来就像今天有人说"我要用一台手机控制整个城市的交通"——不是完全不可能,但工程量大到让人绝望。Multics 项目拖了好几年,预算不断膨胀,交付日期一推再推。贝尔实验室的管理层终于失去了耐心,1969 年 3 月,正式宣布退出。

对于参与这个项目的几个年轻程序员来说,这不只是一个项目的终结。他们在 Multics 上尝到了"交互式计算"的甜头——你敲一行命令,机器马上给你回应,而不是像以前那样把一叠打孔卡片交给操作员,然后回去等上几个小时甚至一天。用过这种东西的人,再回到批处理的时代,就像从智能手机回到传呼机,浑身不自在。

这几个人里,有一个叫 Ken Thompson 的年轻人。


Ken Thompson 那年 26 岁,加州伯克利毕业,一头乱发,不修边幅,是那种典型的"代码比话多"的程序员。他在贝尔实验室的同事后来回忆说,Ken 写代码的速度快得吓人,而且他有一种罕见的天赋——能在脑子里同时运转整个系统的架构,从最底层的硬件到最上层的用户界面,一层一层,丝毫不乱。

Multics 项目被砍之后,Ken 手头突然空了下来。但他脑子里一直转着一个东西:他在 Multics 上写了一个叫 Space Travel 的小游戏——一个太空飞行模拟器,你可以驾驶飞船在太阳系里穿梭,尝试在各个行星上着陆。这个游戏最初跑在通用电气的 GE-635 大型机上,但那台机器的运行费用贵得离谱,据说每次运行一局游戏要花掉 75 美元的机时费。

Ken 在实验室的角落里发现了一台几乎没人用的 PDP-7。这台机器在当时已经算是老古董了——DEC 公司 1964 年出品,内存只有 8K 个 18 位的字(大约相当于今天 18KB 的内存),没有硬盘,用纸带加载程序。但它有一个好处:没人跟你抢,你想怎么折腾就怎么折腾。

Ken 决定把 Space Travel 移植到这台 PDP-7 上。

但要在 PDP-7 上跑游戏,光移植代码可不够。这台机器几乎是裸机状态,什么像样的软件都没有。Ken 需要一个文件系统来存储数据,需要一个进程调度器来管理程序运行,需要一个命令解释器来跟机器对话。换句话说——他需要一个操作系统。

一个正常人到这一步大概会放弃,或者去找现成的方案。但 Ken Thompson 不是正常人。他决定自己写一个。


关于接下来发生的事,有一个在程序员圈子里流传甚广的传说:1969 年 8 月,Ken 的妻子 Bonnie 带着刚满一岁的儿子回娘家探亲,一去就是一个月。Ken 独自留在家里,终于有了大块不被打扰的时间。

他给自己定了一个计划:用三个星期,写出一个操作系统的三个核心部分——第一周写操作系统内核和文件系统,第二周写 Shell(命令解释器),第三周写编辑器和汇编器。一周一个模块,三周搞定。

这个计划听起来像是在吹牛。但 Ken 真的做到了。

他后来在接受采访时轻描淡写地说:

"一周,一周,一周,我们就有了一个操作系统。"("A week, a week, and a week, and we had an operating system.")
—— Ken Thompson,多次公开演讲中提及

当然,这个"操作系统"在当时还极其简陋。它只能在那台破旧的 PDP-7 上运行,只支持两个同时在线的用户,文件系统的设计也很粗糙。但它能用。Ken 的 Space Travel 游戏终于跑起来了——飞船在屏幕上滑过,行星引力拉扯着轨道,虽然画面只是一些闪烁的光点,但在 1969 年,这已经是相当酷的事情了。

更重要的是,这个小系统继承了 Multics 的一些核心理念——分层的文件系统、Shell 命令行、进程的概念——但把 Multics 那些臃肿复杂的部分全部砍掉了。如果说 Multics 是一座试图容纳一切的巨型商场,Ken 造的这个东西就是一间五脏俱全的小木屋:简单、干净、够用。


这时候,另一个关键人物登场了。

Dennis Ritchie,比 Ken 大两岁,哈佛数学博士(虽然他后来说自己"从来没正式拿到学位",因为他一直没回去参加毕业典礼),同样是 Multics 项目的成员。Dennis 是那种安静、深思熟虑的人,跟 Ken 的风格形成了完美的互补。Ken 是那种能在一个周末写出一个文件系统的天才黑客,Dennis 则是那种会花几个月时间思考"这个东西的抽象应该长什么样"的理论家。

Dennis 被 Ken 的小项目吸引了过来。两个人开始一起在那台 PDP-7 上捣鼓,不断给这个系统添砖加瓦。他们的同事 Brian Kernighan——后来因为与 Dennis 合著《C 程序设计语言》而闻名于世——给这个系统起了一个名字:UNICS(Uniplexed Information and Computing Service),这是对 Multics 的一个戏谑——Multics 是"多路复用",这个是"单路复用",意思是"我们就是个简化版,怎么了?"后来这个名字被简化成了 UNIX

我记得第一次听到这个命名故事的时候忍不住笑了。这帮人的幽默感真是刻在骨子里的——给自己的作品起名叫"阉割版",这种自嘲的底气,只有真正有实力的人才有。


但 UNIX 真正的命运转折点,来自一台打字机。

1970 年前后,贝尔实验室的专利部门有一个头疼的问题:他们需要一个文字处理系统来编辑和格式化专利申请文件。当时市面上的商业方案要么太贵,要么不好用。Ken 和 Dennis 看到了机会——他们向管理层提出,如果给他们买一台新的 PDP-11(当时售价约 65,000 美元),他们就能在 UNIX 上开发一个文字处理系统来解决专利部门的问题。

管理层同意了。这是 UNIX 第一次从"两个程序员的私人玩具"变成了"有正式预算支持的项目"。PDP-11 的内存比 PDP-7 大了好几倍,Ken 和 Dennis 把 UNIX 移植了过去,同时开发了文字处理工具 roff(后来演变成了 troff 和 nroff)。专利部门的人用上之后非常满意——他们可能是世界上最早的一批 UNIX 用户,虽然他们大概完全不知道自己在用的是什么。

这件事给了 Ken 和 Dennis 一个重要的教训:要让一个技术项目活下去,你得找到一个"杀手级应用"。UNIX 的杀手级应用不是什么高深的科学计算,而是——打字。


接下来的几年里,Dennis Ritchie 做了一件可能比 UNIX 本身更深远的事情。

UNIX 最初是用 PDP-7 的汇编语言写的,这意味着它被牢牢绑死在这一种硬件上。想让 UNIX 跑在别的机器上?对不起,基本上得重写一遍。Dennis 觉得这不行。他在一种叫 B 语言(由 Ken Thompson 基于 BCPL 设计)的基础上,开发了一种新的编程语言。这种语言既有高级语言的表达能力,又能像汇编一样直接操作硬件。

他给这种语言起了一个极其朴素的名字:C。就是 B 的下一个字母。

1973 年,Ken 和 Dennis 用 C 语言重写了整个 UNIX 内核。这是计算机历史上的一个分水岭时刻——在此之前,操作系统都是用汇编语言写的,跟特定硬件绑定;在此之后,一个操作系统可以相对容易地移植到不同的机器上。这个决定让 UNIX 从一台 PDP-11 上的小玩具,变成了一个可以在任何计算机上运行的通用系统。

当时有不少人嘲笑他们:用高级语言写操作系统?那性能得损失多少?这不是胡闹吗?但事实证明,C 语言生成的代码效率极高,性能损失微乎其微。而获得的好处——可移植性、可维护性、开发效率——是压倒性的。

我后来每次看到有人争论"该用什么语言写系统软件"的时候,都会想起 Dennis Ritchie 在 1973 年做的这个选择。半个世纪过去了,C 语言仍然是操作系统、嵌入式系统和高性能软件的基石。Linux 内核是 C 写的,Windows 内核大部分是 C 写的,你手机里的操作系统底层也是 C 写的。一个人在 1970 年代初设计的语言,到今天还在支撑着整个数字世界的地基,这件事怎么想都觉得不可思议。


1974 年,Dennis Ritchie 和 Ken Thompson 在《ACM 通讯》(Communications of the ACM)上发表了那篇著名的论文《The UNIX Time-Sharing System》。这篇论文像一颗石子投进了平静的湖面。由于 AT&T 当时受反垄断法令约束,不能进入计算机业务,所以贝尔实验室以极低的费用(对大学基本免费)把 UNIX 的源代码分发了出去。

全美的大学计算机系像发现了宝藏一样。加州大学伯克利分校拿到源码后,在上面发展出了 BSD(Berkeley Software Distribution),后来衍生出了 FreeBSD、NetBSD、OpenBSD,直到今天苹果的 macOS 和 iOS 底层都还流着 BSD 的血。贝尔实验室的 UNIX 则沿着另一条线演化成了 System V,成为了 IBM AIX、HP-UX、Sun Solaris 的祖先。

再后来,一个芬兰大学生 Linus Torvalds1991 年受 UNIX 启发,从零开始写了一个叫 Linux 的内核。他在 Usenet 上发帖说"我在写一个操作系统,只是个爱好,不会像 GNU 那样搞得很大很专业"。三十多年后,Linux 运行在全球超过 90% 的服务器上,运行在每一台安卓手机里,运行在国际空间站上,运行在火星探测器上。

这一切,都可以追溯到 1969 年那个夏天,一个 26 岁的程序员想在一台没人要的旧电脑上玩自己写的太空游戏。


Ken 和 Dennis 后来都获得了计算机领域的最高荣誉——1983 年的图灵奖。颁奖词说他们"开发了通用操作系统理论,特别是实现了 UNIX 操作系统"。Ken Thompson 在获奖演讲里没有大谈技术愿景,而是演示了一个精巧的程序——他展示了如何在 C 编译器里植入一个后门,让编译器在编译自身时自动插入恶意代码,而且你看源代码根本看不出来。这个演讲后来成了计算机安全领域的经典文献,题目叫《Reflections on Trusting Trust》。典型的 Ken Thompson 风格——别人领奖感谢这个感谢那个,他上去给你表演一个黑客魔术。

Dennis Ritchie2011 年 10 月 12 日去世,就在乔布斯去世一周之后。乔布斯的离世引发了全球哀悼,铺天盖地的新闻报道。Dennis 的去世却安静得多——大多数人甚至不知道这个名字。但讽刺的是,乔布斯赖以成名的每一件产品——Mac、iPod、iPhone、iPad——它们的操作系统底层,都站在 Dennis Ritchie 的肩膀上。

Brian Kernighan 后来在他的回忆录《UNIX: A History and a Memoir》里写道:

"UNIX 的成功很大程度上归功于贝尔实验室那种独特的环境——聪明的人聚在一起,没有太多管理层的干预,可以自由地追求自己感兴趣的问题。"
—— Brian Kernighan,《UNIX: A History and a Memoir》(2019)

这句话点出了一个关键:UNIX 不是某个公司的战略规划产物,不是某个商业计划书里的条目。它是两个聪明人在一个宽松的环境里,因为"想做一个好用的东西"而自发创造出来的。没有 KPI,没有 deadline,没有产品经理拿着需求文档追在后面。Ken 想玩游戏,Dennis 想设计优雅的抽象,他们就这么做了,然后不小心改变了世界。

💭 老人碎碎念
我经常想,今天的科技公司还能诞生 UNIX 这样的东西吗?每个季度都要汇报 OKR,每个项目都要算 ROI,每个工程师的产出都要量化成"影响力"。在这样的环境里,Ken Thompson 大概会被要求写一份"Space Travel 游戏的商业化方案",Dennis Ritchie 的 C 语言提案会被产品委员会打回来——"用户故事在哪里?市场调研做了吗?竞品分析呢?"

贝尔实验室之所以能孵化出 UNIX、C 语言、晶体管、激光、信息论……不是因为它的管理有多先进,而是因为它给了聪明人一样最奢侈的东西:不被打扰的时间,和不需要立刻证明自己有用的自由。

Dennis 走了十几年了,Ken 还健在,前几年还在 Google 参与 Go 语言的开发。每次我在终端里敲下一行命令,按下回车,看着光标闪烁等待输出的那一瞬间,我都会想起 1969 年那个夏天——一个年轻人坐在一台旧电脑前,只是因为想玩个游戏,就顺手写了一个操作系统。

有些改变世界的事情,一开始看起来就像是在摸鱼。