# 回忆录：与 Warner Losh（@imp）的访谈

* 原文链接：<https://freebsdfoundation.org/our-work/journal/browser-based-edition/recollections-an-interview-with-warner-losh-imp/>
* 作者：TOM JONES
* 译者：Canvis-Me & ChatGPT

**TJ: 请问你能告诉我们在 FreeBSD 项目启动的 80 年代末 90 年代初，你都在做些什么吗？**

**WL:** 在 80 年代末，我正在新墨西哥矿业技术学院攻读计算机科学和数学学位。我们有一台配备了一两兆字节 RAM 的 Vax 11750，为计算机科学系提供支持，能同时服务 20 或 30 个用户。大约在这个时候，我们还获得了 18 到 20 台 SUN 工作站。我们当时正在从旧的 DEC System 20 运行 TOPS-20 的系统过渡，因此大多数校园在这个时候都在使用 Unix。

大学毕业后，我在 The Wollongong Group 工作，为他们的 TCP 产品提供技术支持。当我加入时，我并不知道 The Wollongong Group 与 Unix 有关，或者我没有完全意识到这一点的重要性。第一个 Unix 移植是在澳大利亚的 Wollongong 大学完成的，而这家公司购买了该移植的权利。

我在那里工作，为 VMS TCP/IP（他们的产品）提供技术支持，并没有意识到我错过了一些参与早期 Unix 的人的机会。

之后，我加入了 Solbourne Computer Inc.，该公司生产 Sparc Station 和 Sparc 兼容服务器，运行他们版本的 SunOS。大约在这个时候，我开始参与到开源项目中。为了进行开发工作，我购买了一台 PC，并在上面运行 Linux，因为当时还没有 FreeBSD 的发行版，而补丁包也难以获取。它们并没有被广泛宣传，所以我并不知道它们的存在。

当时有一场关于使用哪种图形界面的战争。Jordan Hubbard 联系了我，因为他正在使用相同的图形工具包。我们开发了一个可以同时呈现两种风格的工具包，这样你就可以编写一次软件，随处运行，生活会很美好——这是理论。Jordan 是那个工具包的用户之一。

有一天，他联系我说：“哦，顺便说一下，我正在尝试启动一个名为 FreeBSD 的操作系统。你应该为它移植。”

我说：“怎么安装？”他说：“好吧，给 Rod Grimes 寄张光盘，或者最好是直接买张光盘，我会寄给 Rod Grimes，他会将其安装在你的机器上，然后寄给你，你就可以运行 FreeBSD 了。”这是在 1.0 版本之前。

在那段时间，我还向诸如 tcsh 之类的项目贡献了补丁。我会发现错误，然后修复它们，发送一个补丁和 tarball readme 文件。甚至在我开始 FreeBSD 工作之前，我就已经在进行开源工作了。

**TJ: 我问过其他人是如何接触到 FreeBSD 的，但我想你是由 Jordan 直接营销而来的。**

**WL:** Jordan 想做与我相同的事情。他想在他的 FreeBSD 机器上运行这个工具包和 GUI 构建器，为公司服务。让我进行移植符合他的最大利益，这也是他招募我的方式。从那时起，我一直在使用 FreeBSD。

**TJ: 那么，待你开始使用 FreeBSD，你是如何跟踪无论发生在何处的对话的呢？**

**WL:** 这么说—勾起了一些旧的记忆—我想一些对话可能被发布到 Usenet 上。我相信我的雇主确实有一些访问权限。当时我们肯定不在互联网上，但我们可以连接到 Usenet。

这就是我保持了解 FreeBSD 进展并有机会在线上进行一些争论的方式。这是我长期以来一直具有的一种特质。我现在更善于为了争辩而争辩。我试图提出一个观点。

在早期有很多争论，其中一些争论涉及到一些好的观点，而另一些则是最疯狂、最愚蠢的细枝末节。

**TJ: 你认为在项目早期是什么让你参与到技术方面的工作中的呢？**

**WL:** 早期，我进行了一些初始的警告清理工作——当我们刚开始时，有数千个警告。我认为我做的最重要的事情是承担起 PC 卡的维护者角色，并使 CardBus 在 FreeBSD 上正常运行。那时这些都是新兴技术，非常重要——大约在 3.x 时间框架。

在早期，发布相当频繁。我认为是在项目开始的一两三年后，我得到了第一台笔记本电脑并开始从事这项工作。那可能是我对项目的第一次重要而有影响力的贡献。在那之前，我做了一些不太雄心勃勃的事情，主要是处理我在尝试使用 FreeBSD 完成任务时遇到的一些清理和错误修复。

**TJ: 你知道 FreeBSD 1.0 和 FreeBSD 2.0 之间发生的变革背后的背景吗？**

**WL:** 我对发生的变革和背后的情况了解一些，但我并没有直接参与其中。我对那场官司知之甚多。当时我了解到了它，后来我也详细研究了它。简而言之：伯克利制作了一个剥离了所有 AT\&T 代码的 4.x 版本，称为 Net2。Bill Jolitz 拿到了这个版本，创建了 386BSD，然后与其他一些人一起创建了一个名为 BSDI 的公司。所以，有一个免费版本和一个商业版本，而 Bill Jolitz 在自由世界中消失了。

Jordan Hubbard、Nate Williams 和其他一些人参与了创建系统的多个不同补丁。他们发布了 FreeBSD 1.0 和 1.1。AT\&T 对 BSDI 使用 1-800-ITS-UNIX 电话号码感到不满，因为这涉及到商标侵权，他们起诉了他们。这演变成了一场关于商业机密和版权等方面的激烈斗争。

很多判决都不利于 AT\&T，所以他们解决了那场官司，并在自由社区强加了一项和解，基本上是 FreeBSD——FreeBSD 的原则——同意不再基于 Net2 发布任何版本，而是从伯克利的 4.4 Lite 发布版本。伯克利对所有内容进行了清理，得到了 AT\&T 的认可，但仍然有一些遗漏的部分。

当时参与 FreeBSD 的所有人都获取了新的源代码，获取了我们为 386 编写的驱动程序，以及我们被允许使用的为 386 编写和修改的代码。我们重写了一些——大约半打——系统中缺失的文件。

FreeBSD 这样做，NetBSD 在那个时候也经历了类似的过程。这是 BSD 之间一些低级别内容不同的原因之一。每个项目都在独自重写，因为那时两个项目已经分开，FreeBSD 专注于 x86 并使其快速，而 NetBSD 则专注于可移植性。

因此，存在不同的感知和不同的非常强烈的个性，阻碍了有效的合作——这可能是描述当时发生的所有争论和火草战争的一种委婉的方式。这个变革发生在几周或可能是几个月的时间里。

你可以回去看看当我们转向 Git 时的早期历史。历史一直延伸到 2.0 但没有更远，因为很难拉入 1.x 的历史，而且两者之间有一个断裂。

你可以在 Git 中看到事情发展得很快——人们在快速而猛烈地提交。David Greenman 参与其中，Jordan 也参与其中，Rod Grimes，我认为甚至 Poul-Henning Kamp 在这个时候也参与了，进行了推动以使一切发生。

**TJ: 你能告诉我你如何更多地参与到项目的组织中的吗？**

**WL:** 项目早期的一个问题是它围绕着 Jordan 和核心团队。人们在核心团队中来来去去，但它是非常自我选择的，并且有越来越多的开发人员对此不满。

我们觉得核心团队没有很好地代表项目。项目中组织 ports 工作的不同部分缺乏足够的代表。Jordan 编写了 bsd.port.mk，Satoshi Asami 接手了这个工作，而 Jordan 是核心团队成员，但并没有很多其他 ports 的代表。

因此——无论是对是错——人们开始感觉核心团队是一个精英主义的机构。核心团队那时，现在可能甚至更糟糕，非常糟糕的沟通，糟糕的决策，你知道的，他们的运作过程根本没有定义得很好。

我们想到了一个想法，让核心团队成为一个选举产生的机构——Poul-Henning Kamp、Wes Peters 和我。我们聚在一起编写了一套简单的章程。我们决定项目的基本原则是：对项目有信任，你必须信任核心团队，否则一切都会崩溃。

章程简洁而简单：这是如何选举核心团队的，他们是什么样的，他们主导着整个项目。事后看来，需要有一个制定和更新章程的程序。这有一些问题——核心团队太大了。最初我们以为，哦，是的，我们将让核心团队变得庞大，任何人都可以独立行动。多余性将给世界各地的人提供参与的机会。但待核心团队当选，他们开始说每个人都必须参与到事情中去。随着每个人都参与到事情中，决策变得困难而缓慢，而这从未真正从一个核心团队到另一个核心团队发生过变化。

我们致力解决的很多问题仍然存在，而且在某些方面，至今仍然存在。章程难以修改。我们应该不时地对其进行微调，但根本不可能改变它们。

我组织了一次选举，我们第一次去了旧金山的 BSDCon，那是新的核心团队首次亮相的地方。旧的核心团队在那里，我们进行了一种交接。这也是我第一次与人们面对面见面的时候。我之前与每个人都是在线交往的，到了这个时候，项目已经有五到十年的历史了。

很多人有着非常强烈的兴趣，而现在也有更多的商业兴趣。也许是时候制定一些新的章程或修改章程以改善事物了。无论何时发生，都将是一个有趣的讨论。这不是一个发生的问题，而是何时发生。

**TJ: 你在整个项目的历史中都曾在核心团队担任过职务。在此期间，项目发生了怎样的变化？**

**WL:** 在最早的日子里，是“嘿，看到问题就解决”，这是一种混合包。很多问题得到了解决，很多事情也完成了，但它是一种非常孤独的方式。有一些情况是一个人在做某事，只有他一个人做。但如果两个人在同一个领域工作，有时它运作良好，有时它会导致很多冲突。一些人因为冲突和纷争离开了项目，从这个角度来看，项目服务得并不好。随着时间的推移，一种更合作的态度逐渐形成。

项目在采用不同工具方面发生了变化。人们忘记了 FreeBSD 是第一个使用 Clang 作为编译器的项目。我们是 Clang 的早期采用者，这对我们非常有益。我们在早期就领先于 Linux，让一切跑起来，构建和使用 Clang。项目正在从更多的“是的，只是去做吧，像个牛仔一样”逐渐转变为“我们会与人们交流”。

在过去的五到十年中，一个更广泛审查的文化正在发展。如果你回顾一下项目，事情从一开始就得到了审查。我们已经从最初只有大约 5% 的提交得到审查，变成了也许一半以上的提交得到审查。这更多是一个协作的过程。它涉及到人与人之间关系的建立。你不能只是说：“嘿，进行审查。”你需要培养一批审查者。为了让人们审查你的东西，你必须审查其他人的东西。

这需要时间来生长和发展，过去五到十年里，它一直以更高的强度在发展。特别是自从我们引入了 Phabricator 以来，它允许更多的人提交审核。对于准备就绪的较小变更，它非常好。较大的变更可能会更具挑战性。

我们遇到了一些公关问题，比如围绕 WireGuard 等的问题，因为我们作为一个项目没有培养出良好的审查文化。但自那时以来，我们的审查文化已经变得好多了。获取审查变得更容易了。人们正在开发额外的工具，以使提交审查和管理审查更加容易。

我们正在努力实现 CI 的方式。我们作为一个项目已经做了多年的 CI，但它都是事后的，你提交东西，然后找出是什么出了问题。我们正在努力将其从事后修复变为如何在事前修复呢？

在常规 CI 模型中使用一个大型系统运行所有的测试通常存在一些挑战。你编译所有的测试项，运行所有的测试，并在所有的环境中进行，这需要 10 到 15 分钟，但嘿，为了保持事物正常工作这是值得的。

如果你在所有环境中运行所有测试和所有构建的排列组合，那将需要几个世纪。因此，你必须通过 FreeBSD 取得子集，这一直是项目的一个挑战。

有一些正在进行的努力，试图让这一切变得更好，试图让事情更顺利，试图改善情况，而这其中也有一些成长的阵痛。整个项目在其整个生命周期中都是这样。

我们过去做得不好的事情，现在我们做得很好，还有一些过去我们做得不好但我们知道需要改变的事情，我们正在摸索着解决它们。然后有一些事情我们很幸运，从未做得很差。我们设法为早期的分发事务制定出了像 CTM 和 CVSup 等先进的解决方案，这在项目陷入那个真是糟糕的拨号世界时是最先进的。

我们不断更新我们的工具——有时很快——有时不那么快。

我们迁移到 Git 可能有点晚，但项目喜欢做的事情是致力于代码。人们想要做一些新的内核工作。他们想要优化缓冲区缓存，以更有效的方式进行流式传输，或者预测工作，以更好地利用空闲时间，或者解决有关虚拟网络或 jail 等的一些有趣的问题。

没有人想做源代码管理的乏味细节。有很多人有着非常强烈的意见，其中一些观点非常坚定，有些人绝对百分之百确信他们是对的——但他们却没有任何实际工作。因此，他们不是在实际实施它——他们坚持说他们在过去的公司中做过这个事情，他们知道这是唯一正确的方法。嗯，当 10 个人有 10 种唯一正确的方法时，你要取得进展就变得困难了。

这不是在听项目的独特需求。当然，有很多是普遍的事情，但这个项目有点像一个有机体。你越是告诉人们按照这种唯一正确的方式去做，越是灌输进去，你失去的人就越多。

如果你的问题是关于项目多年来是如何发展的，我的回答是我们已经成长了很多。有一些阶段，我们做了一些很酷的事情，人们采纳了它，人们发展了它，它就定型了。然后人们炸毁了那个定型的东西，做了一些新的事情或做了一堆新的事情，然后不得不炸毁那个定型的东西，因为它造成了妨碍。我相信，该项目是在不断适应环境的过程中成长起来的。

**TJ: FreeBSD 的持久财富是什么？**

**WL:** FreeBSD 在许多领域激发了创新。FreeBSD 在缓存设计方面做了很多创新工作。我们在公开的开源领域中进行了这项工作。我们是第一个，然后 NetBSD 来了，做得更好一些。然后我们看到了，我们把我们的做得更好一些。这个财富不一定是一堆代码。它是激发开发的对话和技术。

FreeBSD 是一个充满活力、蓬勃发展的社区，通过来自不同意见的纷争和冲突，使世界变得更美好。我们通过纷争和冲突学到了如何让 FreeBSD 更好。

有时，纷争和冲突的代价超过了好处。在其他时候，纷争和冲突较少，我们的创新速度不够快。因此，有一个很好的中间地带，使社区充满活力，而不是一个永远做同样事情的呆板社区，或者相反，一个因为纷争而无法完成任何事情并最终分崩离析的社区。

FreeBSD 的一个优势是我们学会了如何进行对话，为不同的立场辩护，然后待有了胜利者和失败者，就继续下一个斗争。

***

TOM JONES 是一个关注保持网络堆栈敏捷性的 FreeBSD 提交者。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20230910-port-yu-ruan-jian-bao/recollections-an-interview-with-warner-losh-imp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
