1991 年 8 月 25 日,赫尔辛基大学的一名 21 岁学生在 comp.os.minix 新闻组上发帖:
"你好,所有正在使用 minix 的人——我正在为 386(486)AT 克隆机做一个(免费的)操作系统(只是爱好,不会像 GNU 那样大而专业)。"
这个声称"只是爱好"、"不会很大"的项目,就是 Linux 内核。三十余年后,它运行在全球超过 90% 的服务器、97% 的超级计算机、全球 Android 手机、云计算基础设施的绝大多数,以及太空中的火星直升机"机智号"上。
破除误解:Linux 不是完整的操作系统
人们说的"Linux"在技术上只是内核(Kernel)——操作系统最核心的部分,负责管理硬件、调度进程、管理内存。用户实际使用的完整操作系统是 GNU/Linux(或 Linux 发行版):Linux 内核加上 GNU 工具链(编译器、shell、系统库……)加上各种应用软件。
理查德·斯托曼坚持用"GNU/Linux"这个名字,以彰显 GNU 项目对整个系统的贡献。Torvalds 则对此不感兴趣,认为这只是名字之争。争论延续至今,本质是两人对"贡献与归因"的不同态度。
现场:Minix 带来的灵感与挫折
Torvalds 的计算启蒙来自外祖父——赫尔辛基大学的统计学教授 Leo Tornqvist。12 岁时,外祖父买了一台 Commodore VIC-20,让他帮忙录入 BASIC 程序,从此迷上了计算机内部的工作机制。
1990 年,他在大学课堂上接触到 Andrew Tanenbaum 的 Minix——一个为教学目的设计的简化 Unix 操作系统。Minix 帮他理解了操作系统,但它的版权限制(不能修改、不能以商业方式发布)和功能限制令他不满。
1991 年,他开始在自己新买的 386 PC 上写一个属于自己的操作系统。起初是为了学习,然后是为了解决实际需求(他想在电脑上访问赫尔辛基大学的新闻组服务器),最后演变成了一个完整的内核。
起点远比"操作系统"卑微:1991 年春天,他写的第一个程序是一个 386 汇编的任务切换器——两个任务轮流在屏幕上打印字符,靠定时器中断来回切换。随后他给程序加上读写串口的终端仿真功能(用来连学校的服务器),又为了能保存文件,写了磁盘驱动并去读 Minix 的文件系统。等他意识到时,终端仿真器已经长出了内核的全部器官。这个生长顺序解释了 Linux 的一种持久气质:它不是按图纸建造的,每个功能都被真实需求验证过才存在。
0.01:名字、许可证与自我造血
1991 年 9 月 17 日,0.01 版被放上赫尔辛基理工的 FTP 服务器(ftp.funet.fi)。它离"能用"还很远:必须在一台装有 Minix 的机器上编译,文件系统直接沿用 Minix 的布局,能运行的程序寥寥。托瓦兹本想把这个系统叫做 Freax(free 加 freak 加 Unix 的 x),但管理服务器的阿里·莱姆克(Ari Lemmke)不喜欢这个名字,未经商量就把目录命名为 linux——名字就这么定了下来。
另有两个决定影响深远。一是他从未打算自己写所有东西:那封著名的公告里他报告"已经移植了 bash(1.08) 和 gcc(1.40)"——GNU 工具链从第一天起就是这个系统的另一半。二是许可证:最初几个版本用的是托瓦兹自拟的、禁止商业使用的许可证;1992 年初发布的 0.12 版改用 GNU GPLv2。这个改动让公司敢于围绕 Linux 建立生意,商业力量反过来为内核输血——托瓦兹后来多次表示,改用 GPL 是他做过的最正确的决定之一。
Linux 内核的技术设计
Linux 是宏内核(Monolithic Kernel)架构:操作系统的核心服务(进程调度、内存管理、文件系统、设备驱动……)都运行在内核空间,彼此直接调用,效率高但一个模块崩溃可能影响整个系统。
这与 Tanenbaum 倡导的微内核(Microkernel)形成对比:微内核把大多数服务移到用户空间,通过消息传递交互,单个服务崩溃不影响内核。1992 年,Tanenbaum 在新闻组公开批评 Linux 的宏内核设计"从根本上就是错的",预言微内核是未来——这场"Tanenbaum-Torvalds 辩论"成为操作系统历史上最著名的技术争论之一。
Torvalds 的反驳是务实的:宏内核在当时的硬件上性能更好,微内核的理论优越性在实践中难以实现。历史的发展——Linux 成为最成功的服务器操作系统——似乎支持了他的立场,但学界对微内核与宏内核的争论至今未有定论。
开源的发展模式
Linux 的成功不仅是技术上的,更是开发模式上的。Torvalds 从一开始就采取开放策略:公开代码、接受任何人的补丁。
1999 年,Eric S. Raymond 在《大教堂与市集》中总结了 Linux 的开发模式,称其为"市集模式"(Bazaar)——与传统软件的封闭开发("大教堂")相对。核心洞察是"Linus 定律":
"只要有足够多的眼睛,所有 Bug 都将无处遁形(Given enough eyeballs, all bugs are shallow)。"
Linux 社区的贡献者机制也在演化:早期 Torvalds 个人审阅所有补丁;随着规模扩大,形成了分层的"受信任的副手"(Trusted Lieutenants)网络——每个子系统有自己的维护者,Torvalds 只需整合各子系统的补丁。
Git:为内核工作流量身定做的发明
鲜为人知的是,Linux 内核从 1991 到 2002 年没有任何版本控制系统——补丁靠邮件传递,托瓦兹手工合并。2002 年起内核改用商业软件 BitKeeper,作者拉里·麦克沃伊(Larry McVoy)向开源开发者免费提供,条件是不得逆向工程其协议。2005 年 4 月,Samba 作者安德鲁·特里格尔(Andrew Tridgell)对 BitKeeper 协议做了逆向分析,麦克沃伊随即撤销了免费授权。内核开发一夜之间失去了工具。
托瓦兹没有去寻找下一个现成系统,而是写下了自己的:2005 年 4 月初开始编码,4 月 7 日完成首次提交,约十天后 Git 已经能托管自己的源代码。设计目标完全从内核工作流倒推出来:
- 速度:每天要应用成百上千个补丁,所有日常操作必须在本地完成,不能等网络往返
- 分布式:每个开发者持有完整的仓库历史,合并不依赖中央服务器——内核的"副手网络"要求任何两名维护者都能私下交换补丁
- 完整性:每个对象(文件内容、目录树、提交)以其内容的哈希命名,内容一旦被篡改哈希就对不上——托瓦兹后来解释,这个设计首先是为了检测磁盘和内存损坏,其次才是安全
- 廉价分支:Git 存储快照而非差异,创建分支只是写一个指针,于是"为每个补丁开分支、试完即弃"成为零成本动作
2005 年 7 月,托瓦兹把 Git 的维护工作移交给了濱野纯(Junio Hamano),自己回归内核——他多次强调 Git 只是工具,内核才是他的主业。
Git 如今是全球最广泛使用的版本控制系统。GitHub(2008)建立在 Git 之上,成为最大的开源代码托管平台(微软于 2018 年以 75 亿美元收购)。2026 年,全球有超过 1 亿开发者使用 GitHub。
工程判断的风格
托瓦兹的技术权威不来自头衔,而来自一种一贯的判断方式。2000 年 8 月 25 日,有人在邮件列表里就某个内核改动长篇论证,他的回复只有一句:"Talk is cheap. Show me the code."(说易行难,把代码拿出来。)这句话后来成为开源世界的口头禅,概括的是他的裁决标准:争论的终点不是更好的论证,而是能跑的实现。
另一个例子是他对"好品味"(good taste)的定义。他在 2016 年的 TED 访谈中解释:平庸的代码为特殊情况打满补丁,好品味的代码重新设计数据结构,让特殊情况消失——他当场演示了用"指向指针的指针"删除链表节点,从而省掉"删除的是不是头节点"这个特例判断。同一品味也解释了贯穿他内核管理的两条铁律:不破坏用户空间(用户能跑的程序永远优先于内核的优雅),以及实用高于纯洁(一个"正确"但没人能用的设计不是好设计)。
管理风格与争议
Torvalds 以坦率甚至粗鲁著称。他在邮件列表上直接批评认为质量不达标的代码贡献者,措辞有时非常犀利。支持者认为这是维护内核质量的必要手段;批评者则认为这种行为文化不利于多样性和包容性。
2018 年,在一轮针对他管理风格的批评之后,Torvalds 公开道歉,并宣布暂时离开 Linux 内核开发以"寻求帮助,理解人们的情感及其反应"。Linux 内核社区同时引入了新的《贡献者契约》行为准则(Contributor Covenant Code of Conduct)。Torvalds 数周后返回,但这一事件引发了关于开源社区文化的广泛讨论。
主要荣誉
- 2012 年千年技术奖(Millennium Technology Prize):芬兰授予,表彰他创建了 Linux 内核,是有史以来最大的单一软件工程奖项之一
- 2014 年 IEEE 计算机学会先驱奖(Computer Pioneer Award)
- 2012 年入选互联网名人堂
Torvalds 自 1997 年起移居美国,在美籍后长期居住于俄勒冈州。
跨域连接
- 公共池塘资源治理:内核不是无主的公地:它有清晰的边界、分层的维护者与明确的冲突解决渠道,可持续治理的条件几乎逐条对应。真正约束维护者权力的是分叉权——任何人都可以带着代码走,因此权力上限由出走成本决定。分叉极少发生,恰恰说明它一直在起威慑作用。
- 社会资本:"足够多的眼睛"这句话常被误读。发现漏洞的概率取决于有多少人真的在读这段代码,而不是有多少人被允许读;而无回报的审读劳动靠声誉与归属感支撑,不靠许可证。推论可观察:可见性相同的项目,审查密度相差极大,差异来自社群规模与凝聚,关键基础设施长期无人审计的事故一再证明这点。
- 史学方法之争:内容寻址把每个对象用其内容的哈希命名,于是"这份文本有没有被悄悄改过"从判断题变成了可机械验证的计算。史学处理同一问题只能靠抄本谱系与外部旁证。对照很清楚:一旦篡改可被机械排除,争论就整体移到下一层——最初写下它的人是否可靠。
- 实用主义:他为宏内核辩护的论证形式是"在当时的硬件上它更快",即把设计问题的答案挂在可变的经验条件上,而不是挂在结构优越性上。这与把真理判据放在后果上的立场一致,也自带一条纪律:条件变了,结论就该重算——隔离与消息传递的代价一旦下降,这场辩论就必须重新开庭。
- API 设计:"绝不破坏用户空间"是一条治理规则而非技术规则:内部接口可以随意重构,对外的系统调用不得改变。这条不对称把演化自由留在内部、把稳定承诺给外部,于是驱动被迫跟进主线,而应用不必。拒绝提供稳定的内部接口也出自同一算计——它把维护成本还给树外模块。
参考文献
- Salus, P. A Quarter Century of UNIX. Addison-Wesley, 1994. (Linux 的文化背景)
- Moody, G. Rebel Code: Linux and the Open Source Revolution. Perseus, 2001. (Linux 早期发展史,含大量当事人采访)
延伸阅读
- Torvalds, L. & Diamond, D. Just for Fun: The Story of an Accidental Revolutionary. HarperBusiness, 2001. (自传,轻松易读)
- Raymond, E. The Cathedral and the Bazaar. O'Reilly, 1999. (分析 Linux 开发模式的经典文章)
- Linux 内核档案:kernel.org;Git 官方文档:git-scm.com