系统应当小到可以在脑中完整持有
汤普森的设计哲学:最好的系统是能被一个有经验的人完整理解的系统。Unix 的初始内核极小,每个组件的职责都可以完整描述。这种「可理解性」是系统优秀程度的核心指标。
来源:The Unix Time-Sharing System, Ritchie and Thompson, Communications of the ACM, 1974 / Rob Pike interview on Ken Thompson's design philosophy, informit.com, 2012
你不能信任你没有完整创建的代码
汤普森在 1983 年图灵奖演讲《Reflections on Trusting Trust》中提出:编译器可以被植入无法通过查看源代码发现的后门,这揭示了整个计算机信任链的根本性脆弱。
来源:Reflections on Trusting Trust, Ken Thompson, Communications of the ACM, Vol. 27, No. 8, August 1984
第二次做会更好,不要害怕重建
Unix 是 Multics 失败后的「第二次」——更简洁、更快、更实用。汤普森的 B 语言是后来 C 语言的铺垫,Go 语言是汤普森对 C/C++ 问题的「第五十次」重建。重要的系统往往需要经历失败的前身版本。
来源:Ken Thompson interview, The Go Programming Language, gopl.io, 2015
语言的复杂性是长期维护的最大风险
Go 语言设计时,汤普森坚持移除 C++ 的众多特性(泛型最初被拒绝,没有继承,没有异常),目标是让每个 Go 程序员都能阅读和理解整个代码库。复杂的语言特性是系统腐烂的主要来源。
来源:The Go Programming Language, Alan A. A. Donovan and Brian W. Kernighan, Addison-Wesley, 2015 / Go FAQ: Why does Go not have feature X?, golang.org/doc/faq
可脑持系统设计
系统的复杂度不应超过单个有经验的工程师能在脑中完整持有的限度,否则系统的长期演化将失去控制。
早期 Unix 内核只有数千行代码,一个有经验的程序员可以在几天内阅读理解全部内核;这使得调试、移植和演进都极为高效。
系统架构编程语言设计代码库管理
信任链安全模型
软件安全的根本问题是信任链——你信任的每一个组件都必须经过独立验证,否则整个系统的安全性无从保证。
汤普森在图灵奖演讲中展示:即使查看 C 编译器源代码,也无法发现一个精心设计的后门,因为后门可以被编译器自身携带。这被称为「Thompson 黑客攻击」。
软件安全供应链安全编译器安全
语言最小化原则
编程语言的特性应该经过严格筛选,只保留经过充分验证的必要特性;移除任何无法简单解释其价值的特性。
Go 语言在设计时拒绝了继承、异常、方法重载等 C++/Java 的复杂特性,每个保留特性都经过三位创始人的充分讨论。
编程语言设计API 设计系统简洁性
Bell Labs Unix 创造期
1966-1978
创造 Unix、B 语言,奠定现代操作系统基础
汤普森加入 Bell Labs 后参与 Multics,随后与里奇发明 Unix。他设计了 B 语言(BCPL 的衍生),成为 C 语言的直接前身。Unix 的核心文件系统和 shell 设计主要由汤普森完成,里奇专注于 C 语言实现。
Bell Labs 成熟研究期
1978-1997
图灵奖后的 Unix 生态建设和 Plan 9 研究
1983 年图灵奖是这一时期的顶峰。之后,汤普森参与了 Plan 9 操作系统(Unix 设计哲学的现代延伸)的开发,Plan 9 引入了后来成为 Go 语言的一些概念。1992 年,他与 Rob Pike 共同发明了 UTF-8 字符编码标准。
Entrust/Bell Labs 晚期
1997-2006
Bell Labs 重组后的研究延续,Inferno 操作系统
Bell Labs 被朗讯科技收购并多次重组后,汤普森继续参与 Inferno 操作系统的开发。这一时期相对低调,但为后来加入 Google 积累了对下一代系统设计的思考。
Google/Go 语言创造期
2006-至今
在 Google 联合设计 Go 语言,将 Unix 简洁哲学注入现代系统编程
汤普森在 63 岁时加入 Google,与 Rob Pike 和 Robert Griesemer 开始设计 Go 语言(2007 年启动,2009 年开源)。Go 语言的简洁性、高效并发(goroutines)和快速编译直接体现了汤普森的设计哲学,是其 40 年系统设计思想的集大成。