# 回忆录：采访 David Greenman Lawrence

* 原文：[Recollections: An Interview with David Greenman Lawrence](https://freebsdfoundation.org/wp-content/uploads/2023/06/jones_lawrence_interview.pdf)
* 作者：Tom Jones
* 译者：颜曾一【】为 ykla 注

FreeBSD 项目起初得益于众多人的贡献，但是该项目的早期阶段以及我们最喜爱的操作系统背后的人们并没有得到很详细的报道。作为《FreeBSD 杂志》30 周年纪念问题的一部分，我决定采访那些参与开发初期的人，并了解他们是如何参与其中的。

这是对 David Greenman Lawrence 的第一次采访，他是一个早期的贡献者，为 FreeBSD 赢得了“高性能服务器”的赞誉。接下来的一期中将继续发布其他采访的内容。

Tom Jones：**在 FreeBSD 项目开始之前的 80 年代末到 90 年代初，你可以简要解释一下你当时都在做什么吗？**

David Greenman Lawrence：那是我二十几岁时的时候，我同时参与了许多不同的事情，也朝着许多看似无关的方向前进。例如，我是一家视频制作公司的技术总监，为有线电视接入提供艺术节目。我共同创办了一家公司，参与建立了美国与俄罗斯远东的“姐妹城市”之间的贸易往来（这是在俄罗斯叶利钦时期的早期）。我创办了一家安装 TVRO 家庭卫星系统的公司（C 波段卫星的 12 英尺天线，而不是今天的小型 Ku 波段天线），同时还作为一个独立承包商为一家电视广播公司提供卫星上行工程服务。我还是一名拥有 DEC PDP-11 和 VAX 系统专业知识的独立承包商（主要是为客户修理硬件）。最后，我还是一个对操作系统开发感兴趣的电脑爱好者。我对 RSTS/E 和 VAX/VMS 进行了一些趣味性的破解。然而，这是非常困难的，因为 DEC 只提供有限的 RSTS/E 源代码，而对于旧版 VAX/VMS 工具，他们只提供汇编程序清单。我学会了成为一个相当不错的 DEC 机器码破解者！我短暂地担任过“波特兰计算机协会”的主席（一个由当地电脑爱好者组成的 501(c)(3) 非营利组织）。这是一段有趣的时光，但正是作为一个操作系统开发爱好者的兴趣，最终让我开始玩弄 2.9 BSD 的源代码，并在我的 PDP-11 系统上运行它。这引导我接触到了 Bill Jolitz 在 1992 年发布的 386BSD 0.0，并参与了“386BSD Patchkit”的开发（由波特兰的同行 Rod Grimes 带领的一个项目）。我为此目的搭建了第一台英特尔 PC，一台带有 4MB 内存的 386SX。然而，Bill Jolitz 并不是一个非常善于“团队合作”的人。他通常拒绝甚至公开嘲笑人们提供的补丁和改进，甚至最终反对在“补丁包”和一个“临时”版本的系统（我们当时称为“386BSD Interim-0.1.5”）中使用他的“386BSD”商标。他坚持要求我们停止使用那个名字，最终，这迫使我们这群爱好者组织了自己的开发项目，完全独立于 Bill Jolitz 之外。

Tom Jones：**你是如何接触到 FreeBSD 的呢？当时人们很少讨论如何获取信息，是通过 USENET 吗？（如果是的话，你是如何连接的？）PC BSD 的努力是否在更传统的媒体（杂志等）中得到报道？**

David Greenman Lawrence：Julian Elischer 在 comp.unix.bsd 于 1992 年 11 月 17 日发布了一条信息，介绍了一系列为讨论 386BSD（Bill Jolitz 的项目）而设立的邮件列表。我阅读了这篇帖子，并可能在同一天订阅了其中的一些列表。Julian 还在运行 386BSD 的 `ref` 上设置了一些登录账号，希望人们能够充分利用它们。不过在创建邮件列表之前，我可能已经在那台机器上有一个账号了，但我不能确定，因为当时我对互联网的实时访问非常零散和有限。例如，新闻组和电子邮件是通过 UUCP 传递的。我想我可能需要使用调制解调器拨号到另一台系统以进行 telnet 访问。无论如何，Julian 的 `ref` 资源并不是我与其他 386BSD 用户的第一个接触。我知道我直接与 Bill Jolitz 和其他一些 386BSD 爱好者有过联系。我因为另一个波特兰地区的项目“RAINet”（“研究和信息网络”）而认识了 Rod Grimes，这是一个早期尝试，旨在将当地的电脑爱好者（Inter）连接到新兴的“全球互联网”，主要通过拨号调制解调器使用 SLIP 进行连接。当时，许多当地的电脑爱好者，其中一些人在英特尔或泰克电子工作，或在波特兰州立大学任教或就读，通过各种活动和社交圈子相互认识（包括我之前提到的波特兰计算机协会）。

Tom Jones：**Julian 的机器是我之前没有听说过的。在未来的项目中，我肯定会更深入地研究这个方向。**

David Greenman Lawrence：此外，Nate Williams 为 386BSD 的主要参与者建立了一个邮件列表，名为 <interim@bsd.coe.montana.edu>。大部分讨论发生在 386BSD 0.1 之后的时期，当时我们正在等待 Bill Jolitz 发布 0.2 版本，但这似乎被无限期推迟了。

Tom Jones：**你能告诉我你是如何编写 sendfile(2) 函数并且优化它的，使得它能让 ftp.cdrom.com 承载那么大的服务量？**

David Greenman Lawrence：Wcarchive（又名 ftp.cdrom.com）成为了我迷恋的对象，也是我在 FreeBSD 开发中的主要动力。Rod Grimes 在 1993 年建立了第一个基于 PC 的版本，但是我很快就开始处理机器每天都会出现的可靠性问题。不久之后，我接手了硬件和软件的管理工作。首要的挑战之一是 Walnut Creek CDROM 公司 1.5Mbps 的 T1 连接到 BARRnet 的非常有限的带宽。即使在那个非常早期的时候，wcarchive 也是当时最受欢迎的共享软件的 FTP 分发库。T1 连接一直以 24x7 的方式工作，大部分时间丢包率超过 50%。事实上，T1 连接超载导致了 BARRnet 的严重拥塞问题，对其他客户产生了不利影响。Bob Bruce (cdrom.com 的所有者) 提议将 T1 升级为 45Mbps 的 T3，但那个时候这个想法被证明是不切实际的（甚至不可能）。我想是 BARRnet/BBN 的某个人建议将服务器迁移到斯坦福大学位于圣何塞的数据中心（该地区的主要 BARRnet/BBN POP），这将缓解与 T1 连接的拥塞问题。因此，在 1994 年 9 月，我搭建了一台新机器，并将其部署在斯坦福大学。当然，没有人真正知道 T1 连接被过度使用的程度。BARRnet/BBN 认为负载只有 1.5Mbps。但令他们惊愕的是，待我们在数据中心将服务器上线，流量立即跳升至 30Mbps 以上，这给 BARRnet/BBN 的网络工程师带来了一些恐慌。我们继续运行服务器，但很明显 BBN 并没有看到为托管这样一个带宽昂贵的资源的经济盈利点，我认为他们不得不实施带宽限制来控制成本。最终，在一年左右的时间里，我不得不为这台机器找到一个没有限制的新家。

毕竟 FreeBSD 的声誉受到了威胁。从 wcarchive 下载的普通用户无法区分服务器是否被压垮还是网络是否拥塞，而我也渴望创造新纪录，推动运行 FreeBSD 的单个服务器的能力极限。因此，我在位于旧金山的 ISP“CRL 网络服务”找到了一个新的位置。在 1996 年 2 月，我将机器迁移到了 CRL，我们获得了 100Mbps 的带宽。

随后的几年中，与需求的增长进行不断的斗争。进行了许多硬件和网络升级，但我真正关注的是 FreeBSD 的性能。通过广泛的测试和内核分析，很明显在 TCP/IP 和套接字层代码中存在着显著的性能和可扩展性问题。其中一些问题可以进行优化（我也做了），但真正的圣杯【是一种理想的、几乎完美的解决方案，可以完全满足作者的需求】不仅仅是那些，我需要摆脱文件和网络数据的所有复制。虽然在其他操作系统中已经实现了一些“零拷贝套接字”的技巧，但它们在架构上有些混乱，在应用中难以使用，并且仍然存在与用户 - 内核上下文切换和其他许多问题相关的性能开销。我认为需要的是一个像魔法般的系统调用，几乎可以做到一切 - 你只需要给它一个文件描述符和一个套接字描述符，它就会将文件的内容发送到网络中。

在 1998 年参加一个技术会议（可能是 Usenix ATC）时，我向几位同事提出了我的 sendfile() 的想法。有人说 Sun Microsystems 可能已经实现了与我提出的 sendfile() 类似的东西。出于兼容性的考虑，我对 API 非常感兴趣，但当我与 Sun Microsystems 联系以了解他们的 API 时，我很快发现这个谣言并不真实。我想 Sun Microsystems 的某人可能会认为 HP/UX 可能实现了类似 sendfile() 的功能。不管怎样，我没有在惠普有任何联系（也不知道那个谣言可能是不是假的），所以决定继续使用自己的 API。我提出的方案在 FreeBSD 中传递了比任何其他系统调用都更多的参数，这让我有点担心，但这仍然是最有效的方法。编写 sendfile() 是一个困难的系统调用。它似乎触及了内核中的几乎每个子系统 - 文件 I/O、虚拟内存系统、网络缓冲区等。

不管怎样，sendfile() 的初始版本将服务器的总 CPU 时间减少了约 75%，换句话说，使 wcarchive 加快了大约 4 倍。这是一个巨大的胜利。

Tom Jones：**你能告诉我是什么促使你更多地参与其中吗？项目的组织和管理？**

David Greenman Lawrence：我一直在思考这个问题，并最终找到了我难以回答它的原因：“是什么驱使你”这个词组有一个错误的假设，它暗示了有些力量推动我走向组织和管理角色，但实际上并非如此。虽然有些经理是被推上这个位置的，但我称这些不幸的人为“不情愿的经理”，往往他们并不适合这个工作。对我而言，更多的是对一个需要的组织角色的吸引，这是我的天性使然。

话虽如此，管理和组织一个免费志愿者项目与管理营利性私营企业的员工是非常不同的。在一个没有预算和有限捐赠资源的全志愿者项目中，经理几乎没有权威来命令别人做事情。如果你试图命令一个志愿者去做某件事，他们很可能会对你生气、忽视你或者离开。相反，你必须更加巧妙地引导人们朝一个方向前进，通过讨论、共识、合作，并愿意自己首先进行（至少）概念验证。通过展示雄心和方向感（或者说目标感），其他人会跟随。

噢，"牵引猫咪"这个词也涌上脑海。;-)

Tom Jones：**作为一个核心团队的成员你有什么特别的问题想说的吗？**

David Greenman Lawrence：当然，我的项目主要关注软件的开发（尤其是内核）。我专注于可靠性和性能，同时也关注 FreeBSD 的架构方向。我觉得拥有一个核心团队对于管理 BSD 代码库的传奇质量非常重要。然而，在团队中确实有一部分人反对任何形式的正式秩序，他们更喜欢 FreeBSD 只是一个无组织的开发者的秘社，但这并不是我想要的。

Tom Jones：**在你担任核心团队期间，项目发生了怎样的变化？**

David Greenman Lawrence：我曾经在核心团队担任了整整 10 年的成员。前 8 年我是未经选举/自我任命的核心团队的创始成员，然后又在第一届选举产生的核心团队中任职了 2 年。

最初的核心团队是由一群非常有才华的软件开发者组成的，他们对 BSD Unix 有共同的崇敬，并对将其作为一个开源项目延续下去有着浓厚的兴趣。在早期阶段，主要是为了使 FreeBSD 变得足够可靠，以便有用。随着 FreeBSD 逐渐走向独立，项目规模逐渐扩大，有 300 多名开发者贡献了各种各样的东西，这些东西在一开始我从未想象过。例如，Jordan 对 FreeBSD ports 的精妙构思在推动系统的采用和使用方面起到了巨大作用，并吸引了大量的额外的贡献者。这一切都是好事，唯一的问题是，随着开发团队的增长，意见的多样性、意见不合的频率和对项目领导的挑战也增加了。由于核心团队是自我任命的，一直存在一个关于核心团队权威来源的问题。最终，核心团队重组为一个由开发者选举产生的机构。我必须说，在核心团队内部，这并没有真正改变日常运作的方式，但或许对我们的权威给予了一点合法性的提升。

该项目在许多其他方面也发生了变化。随着 FreeBSD 成熟为最佳服务器操作系统之一，该项目开始能够吸引来自各个企业用户的捐赠和特定项目赞助。在某些情况下，这些捐赠和赞助有些困难，因为事实上，FreeBSD 并不是一个法律实体。甚至 FreeBSD 商标也必须由 Walnut Creek CDROM 持有，而我个人拥有 \<freebsd.org> 域名。然而，当 Justin Gibbs（一位核心团队的前成员）于 2000 年 12 月创建了 FreeBSD 基金会作为一个美国 501(c)(3) 非营利法律实体时，一切都发生了改变。

Tom Jones：**FreeBSD 的长久传承是什么？**

David Greenman Lawrence：有很多传承可以选择。事实上，David Greenman Lawrence 地球上的普通人每天都在使用部分由 FreeBSD 项目开发的软件——从早晨起床到晚上睡觉。如果你使用基于 Android 或 iOS 的手机，那么这些平台在其库和用户应用程序中大量借鉴了 FreeBSD。如果你使用 Microsoft Windows、Apple MacOS 或 iOS，那么你正在使用一个主要来自 FreeBSD 的内核网络堆栈。如果你晚上坐下来在 Netflix 上观看流媒体视频，那么这些内容是由运行 FreeBSD 的服务器提供给你的。如果你是一个使用任天堂 Switch 控制台的游戏玩家，那么你正在使用一个由 FreeBSD 驱动的平台。如果你进行在线银行业务，或在股票市场交易股票，或将包裹运送到世界各地，那么你可能是在使用运行 FreeBSD 的服务器进行操作（尽管我从未能够让他们公开承认这一点！）。

在所有借用代码或完全基于 FreeBSD 构建平台的情况下，公司选择使用 FreeBSD 而不是 Linux 是有原因的。这是所有传承中最重要的传承，也是我们继承自之前的 BSD 的传承。如果你问一位软件专业人士，现实中最通行的宽松软件许可证是什么，他们会告诉你“（N 条款）BSD 许可证”。而在 BSD 中，是 4 条款许可证，但 FreeBSD 再进一步，将其缩减为简单的 2 条款许可证。基本上它的意思是只要你不声称自己编写了代码，你可以按照任何方式使用该软件。你可以根据自己的需求进行修改，并保留你的修改内容的专有性。你可以从中赚很多钱，而无需向原作者付一分钱。这意味着它在每个方面都是真正自由的软件。我可以告诉你，当项目于 1993 年 6 月 19 日采用“FreeBSD”这个名称时，这是我（我们所有人都有这个想法）头脑中的首要考虑。尽管当时并没有计划或者想到，但这也是一个巧合，正好发生在“六月十九日”的纪念日——这也是庆祝美国正式结束奴隶制的日子——即 1865 年 6 月 19 日。

FreeBSD 留下的深远影响就是真正自由软件的概念。

***

Tom Jones 是一个对保持网络栈快速感兴趣的 FreeBSD 提交者，在白天他在 Klara 公司负责 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/20230506-freebsd-san-shi-zhou-nian-ji-nian-te-kan/recollections.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.
