Emacs 与 Bzr 的坎坷往事

Lobsters Hottest 新闻

摘要

文章回顾了 2008 年 GNU Emacs 开发者决定采用 Bazaar 而非 Git 作为版本控制系统的决策过程,重点强调了性能方面的顾虑,以及 Richard Stallman 坚持使用 GNU 软件包的立场,尽管技术基准测试显示 Git 更具优势。

<p><a href="https://lobste.rs/s/jgmrz0/most_emacs_bzr_saga">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/13 14:17

# Emacs Bzr saga:史上最长的版本控制之争 来源: https://thanosapollo.org/posts/bzr-saga/ 既然今天没什么有趣的书可读,也没什么好看的电影,我决定在网上挖掘一些最引人入胜的内容。我本来去读了 Linux 内核邮件列表,但那里的讨论似乎有点“少儿不宜”(18+),于是我转而阅读了相对文明的 `emacs-devel` 邮件列表。 对于不熟悉的人来说,`emacs-devel` 是 GNU Emacs 的主要开发讨论列表——在这里做出设计决策,审查补丁,偶尔还会有人花费 200 条消息来争论版本控制软件。这就是关于最后那件事的故事。 ## 2008 年:“这个问题已经讨论完毕,决定已下” 2008 年 3 月,Emacs 正准备从 CVS(没错,就是 CVS)迁移到更“现代”的工具。当时的两个竞争者是 Git 和 Bazaar。 - Git,由 Linus Torvalds 为 Linux 内核创建。 - Bazaar 是一个 GNU 项目,*由 Canonical 维护*。 `emacs-devel` 上爆发了一个包含 236 条消息的长线程。人们测试了这两款工具的性能。结果并不含蓄。Andreas Schwab (https://yhetil.org/emacs-devel/[email protected]/) 作为核心开发者之一,报告了他的第一印象: > 我的第一印象是 bzr 很慢,慢到完全不可用。为什么一个简单的 `bzr log` 启动都要花超过一分钟?相比之下,即使 `cvs log` 需要向服务器请求日志,它的响应也是瞬间完成的。 David Kastrup 也觉得这令人费解: > 我发现这很令人惊讶:“git log”几乎是瞬间完成的,而且 git 在此过程中还会重新计算代码片段的历史记录。相比之下,用户在复制、移动或重命名文件时必须告知 Bazaar,因此它应该能够立即提供这些信息。 实际的数据对比: - `git log | head -1` 耗时 0.012 秒。同样的命令在 Bazaar 上耗时 21.5 秒。 - 提交单个文件的更改:Git 耗时 0.08 秒,Bazaar 耗时 17 秒。 基准测试还在继续。Stefan Monnier (https://yhetil.org/emacs-devel/[email protected]/),Emacs 的主要维护者,设定了较低的门槛: > 我不在乎 Bzr 比 Git 慢还是快,但为了切换到 Bzr,我们需要它“足够快”。目前它还不够快。至少 `bzr diff` 不应该花费几秒以上的时间。 与此同时,Jonathan Lange (https://yhetil.org/emacs-devel/[email protected]/),Canonical 的一名真正的 Bazaar 开发者,正在该线程中进行技术支持。 他推荐的初始检出工作流程: > 一种更好的初始下载方式如下: > $ wget http://bzr.notengoamigos.org/emacs.tar.gz > $ tar xzf emacs.tar.gz > $ bzr init-repo emacs-bzr > $ cd emacs-bzr > $ bzr branch ../emacs trunk > $ cd trunk > $ bzr pull –remember http://bzr.notengoamigos.org/emacs/trunk/ 请将其与 `git clone` 进行比较! 终于,有人提出了显而易见的问题: > 致 Emacs 维护者和决策者:还需要什么更多信息才能说服大家 Bzr 目前不是合适的工具? Richard Stallman (RMS) 的回复: > 这个决定不是针对当下的,而是一个长期的决定。因此,最好等待几个月让 Bzr 开发者改进它,而不是做出某些可能难以逆转的“临时”决定。 为了以防有人没明白他的意思,他在另一条消息中 (https://yhetil.org/emacs-devel/[email protected]/) 补充道: > 这个问题已经讨论完毕,决定已下。我们将使用 GNU Bzr,因为它是一个 GNU 软件包。 当有人指出这种政治性决定“抹杀了所有技术论点”时,RMS 回复道 (https://yhetil.org/emacs-devel/[email protected]/): > GNU 软件包应相互支持的原则有助于使整个 GNU 系统运行得更好。 有人顺理成章地追问:“为什么我们不能只是把 Git 纳入 GNU 系统?” RMS: > 我们可以把它包含在 GNU 系统中,但它的开发者不太可能愿意让它成为一个 GNU 软件包。 公平地说,RMS 这里有一个真实的理念。如果 GNU 项目不使用自己的工具,这会传递出一个信号,即这些工具不够好,从而破坏自给自足的自由软件生态系统的整个理念。他几十年来一直秉持这一论点,并且在许多其他情况下这对项目大有裨益。问题不在于原则本身。问题在于 Bazaar 无法承受这一原则的重量。 236 条消息的线程、基准测试、Canonical 员工的变通方案……这些都未能改变结果。这是一个政治决定,而政治立场已经既定。 ## 2008-2012 年:漫长的尾巴 世界其他地区已经转向了 Git。GitHub 于 2008 年推出并迅速爆发式增长。与此同时,Emacs 贡献者不得不学习 Bazaar,一种他们在其他地方都不使用的工具,仅仅为了提交补丁。 类似“请帮我把卡住的 bzr 弄好”和“无法 bzr emacs 仓库(可能是 bzr 内存泄漏)”的讨论变得司空见惯。 **然后,在 2012 年,Canonical 裁掉了 Bazaar 开发团队。** ## 2013 年 2013 年 3 月,也就是 Bazaar 开发停止一年后,John Wiegley 发布了 (https://yhetil.org/emacs-devel/[email protected]/T/#u) 大家一直想说的话: > 我们经常辩论 Git 与 Bazaar 的优点,以及 GNU 项目应该使用哪一个进行 Emacs 开发。我认为现在是重新审视这一决定的合适时机。我再次提出这个问题的主要原因是 Bazaar 的开发实际上已经停滞。他们的错误追踪系统中存在许多重大错误,其中一些影响 Emacs 开发的错误(例如 ELPA 仓库)已经被忽视多年。所以,致 Emacs 的无可争议的沙皇 Richard:我们现在,恳请,能切换到 Git 吗? 随后跟了 200 条消息。 RMS 的第一次回应: > 维护者说他在修复一些错误,我昨天还让他修复 ELPA 分支的错误。我想给他合理的时间来做这件事。 这个错误已经存在了 1.5 年。Dmitry Gutov 指出了这一点 (https://yhetil.org/emacs-devel/[email protected]/): > 这不是很晚了吗?这个错误已经存在 1.5 年了。他之前不知道吗? 随后 RMS 亮出了他的底牌 (https://yhetil.org/emacs-devel/[email protected]/): > 我正在试图确定 Bzr 是否得到有效维护。我宁愿得到一个“是”的答案,而不是“否”的答案。 这在公开场合说是一件非常诚实的事情。他并没有隐藏他的偏好。他真心相信 GNU 项目相互支持的原则,并希望现实情况能配合这一原则。 Joakim Verona (https://yhetil.org/emacs-devel/[email protected]/),一名长期的 Bazaar 用户和 Emacs 贡献者,描述了实际情况: > 我尽力做一个建设性的用户,但我遇到了许多技术困难。当我试图寻找我注意到的问题的解决方案时,我发现: > - bzr 社区非常乐于助人。这是好的。 > - 有许多众所周知的错误。也有许多针对这些错误的知名补丁,其中一些由 Emacs 开发者提供。它们从未进入上游。我说“从未”,意思是几年都未进入。这是不好的。 RMS 回复道 (https://yhetil.org/emacs-devel/[email protected]/): > 我没有时间阅读 Bzr 邮件列表。或者任何开发邮件列表。我唯一订阅的此类列表就是这一个。让我去阅读 Bzr 列表上的东西,就像让我飞到月球一样不现实。 当被问及 Bazaar 的用户是否应该对 Bazaar 是否得到充分维护拥有发言权时: > 当我必须决定一个维护者是否做得足够好或者需要被替换时,我会关注我收到的任何相关信息。然而,让用户在决定中拥有“发言权”似乎不合适,所以我不这样做。 Karl Fogel,一位开源开发老兵(《Producing Open Source Software》(https://producingoss.com/) 的作者,也是最初的 Subversion 开发者之一),在该线程中提出了最尖锐的批评: > 好吧,事实上,你没有足够的时间密切关注 Bzr 的开发,以便有能力判断它是否仍然是 Emacs 的一个好选择。这没关系——没有人有时间做所有重要的事情,而且你做很多其他重要的事情。但既然这样,为什么你认为你仍然有时间和脑力带宽来做好这个决定?为什么不基于你不再有时间做好这项评估的理由,将其委托给 Emacs 维护者? 他指出,询问一个人关于一个错误的情况并不能作为项目健康状况的代理,并且考虑到他的时间限制,线程中的其他人已经做了比他更彻底的研究。 RMS 的回复: > 因为这里涉及的不仅仅是 Emacs。 只有一行字,但这是他世界观的核心。如果旗舰 GNU 项目放弃一个 GNU 工具,这会向其他所有 GNU 软件包发出什么信号?他在利害关系上并没有错。他在工具选择上错了。 Karl 再次施压: > 你应该要么投入足够的时间来评估 Bzr 的维护状态以获得可靠的答案,要么委托给能这么做的人。相反,你要求维护者依赖你的调查……但你明显没有时间做好这项工作。这是对每个人时间的糟糕利用。 RMS: > 我已经有一个如何进行此事的计划,并且我正在执行它。 没有细节。没有时间线。没有委托。相信我。 与此同时,Stefan Monnier 在整个 200 条消息的线程中只发布了一条实质性的消息: > 就像我没有反对 Richard 选择 Bazaar 一样,我也不太在乎我们是继续使用 Bazaar 还是切换到 Git、Monotone、Darcs、Mercurial、OpenCM、Fossil,随你便。我现在唯一关心的是从 Bazaar 中移出 'elpa' 分支,因为 Bazaar 无法正确处理它。 Leo Liu 总结了大家的想法: > 正如您可能意识到的那样,大多数 GNU 项目并不使用 BZR。虽然帮助 BZR 修复错误可能对 BZR 有益,但从整体上看对 GNU 却是损失。志愿者花费他们的空闲时间在 GNU 项目上,如果 20% 的时间花在解决 BZR 问题上,其成本之高以至于会阻碍人们加入。为了 GNU 的最大利益,离开 BZR 似乎是唯一明智的选择。 该线程在没有明确解决方案的情况下结束。RMS 有一个计划。他正在实施它。这 200 条消息没有产生决定,但它们确实让社区的立场变得毫无疑义。 ## 2013 年:ELPA 分支崩溃 同年晚些时候,Stefan 采取了实际措施,为随后发生的一切奠定了基础。Bazaar 上的 ELPA 分支坏了,这是一个导致检出的 bug,且已无人为其修复。Stefan 将其移至 Git,他的公告展示了那种在此过程中一直维持 Emacs 开发运行的谨慎领导力: > 我对这一变化不太满意,因为这意味着我们将使用两种不同的工具('elpa' 用 Git,'trunk' 用 Bzr),但我真的看不到其他出路。我不希望这成为关于 Git 与 Bzr 优点/缺陷的讨论,这也不是讨论在 'trunk' 上使用 Git 的场合。 他完全清楚每个人都在想:“如果 Git 对 ELPA 来说足够好,为什么不对 trunk 也如此?”并提前堵住了这个话题。一次解决一个问题。 ## 2014 年:ESR 按下按钮 到 2014 年 8 月,Eric S. Raymond 已经准备好了转换脚本。 他一直在默默地工作 (https://yhetil.org/emacs-devel/[email protected]/): > 你们没有听到太多关于它的消息,因为艰苦的工作已经完成。我的脚本准备就绪,只需要提前大约八小时通知即可按下按钮。 实际的迁移发生在 2014 年 11 月。11 月 13 日,ESR 发布了一条 (https://yhetil.org/emacs-devel/[email protected]/) 七个单词的消息: > 提交已开放。开始吧。 有些人甚至将其描述为英雄行为 (https://yhetil.org/emacs-devel/[email protected]/)。 六年的争论,2008 年线程中的 236 条消息,2013 年线程中的 200 条消息,Stefan 多年的默默维护,无数“帮我把卡住的 bzr 弄好”的请求,一个死掉的版本控制系统,最终结束于这七个单词。 ## 事后 迁移后的几天是富有教育意义的。一半的核心贡献者从未使用过 Git: - “这是 Git 帮助邮件列表 (https://yhetil.org/emacs-devel/[email protected]/)” - “git pull 因合并冲突失败。这怎么可能发生?” - “给我们这些普通人一个简单的 git 工作流程” - “需要帮助调整工作流程以适应 git” - “关于 Git 的好书” - “来自 git pull 的晦涩错误/警告/信息消息”(124 条消息) 这些人是多年来一直在开发世界上最重要的文本编辑器之一的人,却在询问基本的 Git 问题,因为他们在世界其他地区都已向前迈进时,被困在了 Bazaar 上。 真是个 bzr 传奇!不管怎样,比我今晚能看的任何电影都精彩。

相似文章

离开 Magit 后的 Emacs

Lobsters Hottest

作者讲述了他们离开 Emacs 的 Magit Git 界面,转而采用 VC-mode 和自定义 Git 脚本等替代方案的经历,重点介绍了其中的调整和所学到的经验教训。

还有人用 Emacs 吗?

Lobsters Hottest

作者对与 Emacs 数十年关系的个人反思,包括转向 VSCode 和 IntelliJ,最终因其独特功能回归 Emacs。

Git并不好

Lobsters Hottest

本文对Git进行了批评,认为它并不像人们通常认为的那样好,并链接到Lobste.rs上的讨论。

诚实导致Emacs补丁被拒

Lobsters Hottest

一名开发者使用GLM 5.2协助编写的Emacs性能补丁被GNU拒绝,原因是其禁止LLM辅助贡献的政策,此举引发了对该政策影响诚实性的批评。

Bun 的问题可能在于公开开发

Lobsters Hottest

一篇分析 Bun 实验性使用 LLM 将其 Zig 代码库转译到 Rust 所引发的争议的文章,强调公众的强烈反应源于透明的开发实践而非实验本身。