Linguista

Linus Torvalds 与 Git 二十年:一个“必要之恶”如何重塑软件世界

二十年前的春天,当 Linus Torvalds 在一场围绕其使用的商业版本控制工具 BitKeeper 的激烈纷争后,近乎是“被迫”地开始编写 Git 时,他大概不会想到,这个出于“自私”需求的产物,将在未来二十年内成为全球软件开发领域无可争议的底层基础设施。这位以创造 Linux 内核而奠定传奇地位的程序员,如今面对 Git 的巨大成功,仍带着一丝疏离和标志性的务实:“我做它,是因为我需要它来完成(内核)工作。”

Git,这款分布式版本控制系统(SCM),其影响力已无需赘述。从谷歌、微软等科技巨头内部庞杂如城市般的代码库,到独立开发者在笔记本电脑上构建的下一个创新应用,再到 GitHub、GitLab 等代码协作平台的繁荣生态,无不建立在 Git 的基础之上。据估计,其市场占有率已达惊人的 98%。然而,这个庞大帝国的起源,并非精心策划的商业战略,而是一次典型的 Torvalds 式反应——对现有工具极端不满,并在危机中快速、务实地创造解决方案。

“我不能用 CVS,因为我极度痛恨它,”Torvalds 在访谈中回忆起 Git 诞生前的窘境,语气毫不掩饰。彼时,他依赖商业软件 BitKeeper 管理日益复杂的 Linux 内核项目。“它并非完美,但比我尝试过的任何其他东西都领先了好几个光年,”他承认,实用性再次压倒了对纯粹开源的执念。但 BitKeeper 的商业性质及其在开源社区的争议从未平息。

引爆点在 2005 年初降临。澳大利亚开发者 Andrew Tridgell 对 BitKeeper 进行了逆向工程,触犯了其严格的许可协议。尽管 Torvalds 尝试在 BitKeeper 创始人 Larry McVoy 和 Tridge 之间调解,但双方立场“完全是南辕北辙”。最终,BitKeeper 撤销了对内核社区的免费授权。“我显然不能再用 BitKeeper 了,”Torvalds 说。面对 CVS/SVN 的低效和当时其他开源 SCM 的不足,他别无选择。

在著名的“十天冲刺”式编码开始前,是“大约四个月”的深度思考。“我思考什么对我有效,思考如何做出比 BitKeeper 做得更好,但实现方式又与 BitKeeper 完全不同的东西,”他解释道,核心目的是避免任何关于模仿或侵权的指控。这十天创造出的,是一个极其原始但满足核心需求的工具。“说实话,第一个版本相当粗糙,”他承认。用户需要手动执行如 hash-objectcommit-tree write 等底层命令,并将哈希值手动写入 HEAD 文件,没有后来被称为“porcelain”的易用上层接口,甚至缺乏完善的错误检查。“它真的是‘让我们把它跑起来’,因为我还有另一个我认为更重要的项目(内核)等着我回去做。”

这段短暂的“用户空间编程”经历,也让这位内核大师有所感触。“我的一个反应是,在用户空间编程是多么容易啊!”他说道,“需要操心的事情少得多。你不用担心内存分配…调试也容易得多。” 这段经历对他而言,与其说是创造伟业,不如说是一次“有趣”的调剂。

Git 的设计哲学,是 Linus Torvalds 个人风格的集中体现:

  1. 性能是生命线: “你不应该需要去冲杯咖啡(等待操作完成)。”他当初的目标是能在半分钟内处理包含上百个补丁的序列,这直接源于对现有工具性能瓶颈的切身体验。
  2. 数据完整性高于安全考量: 选择 SHA-1(在当时)的首要目的是通过强哈希检测数据损坏,而非防御恶意攻击。“对我来说,SHA-1 哈希从来不是关于安全性的,”他澄清,“绝对所有东西都由一个非常好的哈希来保护。”他对后来社区花费大量精力迁移到 SHA-256 感到些许遗憾,认为其中有“很多无谓的消耗”。
  3. 彻底的分布式: “每个仓库都是相同和平等的。”这一设计使得本地操作、离线工作和代码共享变得前所未有的简单,也为 GitHub 等平台的诞生奠定了基础。
  4. 底层简单,上层复杂: 借鉴 Unix 哲学,Git 底层概念精炼,易于理解和扩展,而复杂性则交由上层工具和用户工作流处理。

或许最能体现 Torvalds 特质的是,他对这个最终改变了世界的项目迅速失去了大部分个人兴趣。仅仅亲自维护了三四个月后,他便将“火炬”递给了早期贡献者 Junio Hamano。“我当时想,这不是我想做的事情,”他直言,“当它满足了我的需求后,我就失去了兴趣。” 选择 Junio 的标准是“良好的品味”(good taste)——一种对代码、对协作、对项目长期发展的直觉判断,以及更重要的,“他坚持了下来”。事实证明,这是一个无比精准的判断。Junio Hamano 至今已稳健地领导 Git 社区近二十年。

Git 的普及之路并非坦途。早期因其陡峭的学习曲线和与 CVS 等工具截然不同的命令集而饱受批评。“我因为 Git 的界面收到了很多仇恨言论,”Torvalds 回忆。转折发生在 2007-2010 年间,随着“奇怪的 Web 开发者”(他指的是 Ruby on Rails 社区)的涌入,以及 GitHub 的崛起,情况发生了变化。“突然间你有了所有这些年轻人,他们以前从未用过 SCM…Git 是他们接触的第一个东西,”他说,这批新用户没有历史包袱,更能 appreciating Git 的强大。抱怨声逐渐被“当这个旧项目在 CVS 里时,我该怎么做这个?”的疑问所取代。

如今,Linus Torvalds 将自己定位为 Git 的“休闲用户”。他坚持使用命令行,日常操作仅限于 merge, blame, log, commit, pull 等少数几个核心命令。他对现代编辑器、IDE 集成毫无兴趣,甚至还在使用一款自己维护的、大学时期的老旧编辑器,因为“我的手指已经学会了一种方式,无法回头了。”这种对工具的“忠诚”背后,是他一贯的哲学:如果现有工具能用,就没必要追逐新潮。

他对创造新项目的看法也颇为独特:“我不得不搞出一个项目,实际上是世界的失败。…我更喜欢别人为我解决问题。”对他而言,无论是 Linux 还是 Git,都是在“世界辜负了他”之后不得已而为之。他对尝试 Pijul、Jujutsu 等新兴 SCM 毫无动力:“既然我有了对自己有用的东西,为什么还要去看替代品呢?”他对 SCM 的兴趣远不及数据库,“数据库是生活中最无聊的事情,”他半开玩笑地说,而 SCM 也“不是我真正感兴趣的东西”。他的热情,始终聚焦于不断演进的 Linux 内核,那里有持续的硬件挑战和来自全球用户的多样化需求驱动着他。

尽管 Git 地位稳固,挑战依然存在。超大规模代码库(Monorepo)和大型二进制文件存储等场景,都超出了 Git 最初的设计范畴。“这是挑战…当 Git 无处不在时,你会发现所有这些人都在做一些你永远无法想象的奇怪事情,”他以惯有的坦率评论道,即使他个人认为某些用法是“错误的”。他对未来的期待,则落在了更实用的层面,比如一个“更统一的 Bug 跟踪系统”。

二十年弹指一挥间。Git 的故事,不仅是一个技术传奇,更是 Linus Torvalds 个人哲学——极端务实、聚焦核心问题、对低效零容忍,以及在必要时快速行动——的生动注脚。这位“不情愿的革命者”,在解决自身困境的同时,无意间为全球数百万开发者提供了协作与创新的坚实地基。而对于这一切辉煌,他的评价依然简洁而有力:“说真的,所有的功劳都归于 Junio 和社区…他们做的远比我多得多。”