> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20220102-ruan-jian-yu-xi-tong-guan-li/we-get-letters.md).

# 读者来信

* 原文：[We Get Letters](https://freebsdfoundation.org/wp-content/uploads/2022/03/JanFeb_letters.pdf)
* 作者：**MICHAEL W LUCAS**

亲爱的老头子：

你年事已高。我知道，因为我还学着不吃猫的时候，你的一本书就遭遇过一场可怕的事故，我爸很生气，因为那本书你签了名，也就是说你碰过它，他怕我会从书页里染上什么。我知道你不会介意，因为他不得不又买了一本，所以你倒没什么损失。

差不多从那时起，人们就在喋喋不休地谈论一种叫“打包基本系统”的东西。它本该能解决一切问题，但从未实现。到底是怎么回事？

——厌倦等待的聪明年轻人

亲爱的没用的废物：

就因为我现在的年纪正好是压迫性政权——比如盐湖城——高速公路上的限速，并不意味着我是个老头子。我的经验和敏锐的现实主义（常被误解为不可摧毁、密不透风的愤世嫉俗）才让我成为老头子。而打包基本系统只会助长这种愤世嫉俗。

升级任何 BSD 系统只有一种真正的办法。你拿到源代码——最好通过 SCCS 检出，紧急情况下软盘也行——把它装在 **/usr/src** 下。你构建软件。你能做到，因为真正的操作系统默认安装就带功能完整的编译器。你的手机不是计算机，是器具。你的门铃、起搏器、任何运行 Windows 的东西和大多数 Linux 安装也都是器具。（是的，经过足够的折腾，你能在起搏器上装个编译器，把它升级为计算机，但那需要特殊技能和惊人的鲁莽自弃。）你跑的是 BSD，所以你有一台计算机。构建好之后，你把它装在同一台系统上，重启，大功告成！你升级好了。是的，某些优化是允许的——你可以用 NFS 在服务器农场里共享源代码和你手工编译的二进制文件，或者更好的是，指派某个惹恼你的小弟去执行所有升级而不打扰你。只有这样，才能确保你安装的代码确实为你的系统而准备。

这是任何 BSD 系统的自然状态。偏离这一状态都是非自然的。

遗憾的是，某位出于善意但有缺陷的人——我不打算点名，但他的名字押韵于“Polin Cercival”——认为 FreeBSD 需要一种让对编译器有病态恐惧的人也能使用的升级系统。（不必说，不该让这种人靠近计算机、器具或三颗以上算珠的算盘。）这就是 **freebsd-update(8)** 的由来。它“方便地”下载尽可能小的二进制差异并应用到系统上，让你能毫不费力地升级数千台系统，甚至都不用加班。深夜独自在办公室，只有闪烁的应急灯照明，除了空调的嗡嗡声外一片寂静——这是当系统管理员的额外福利之一。它让你在其余时间里都有借口发脾气。如果连对那些低等的凡人发脾气都做不到，还当什么系统管理员？幸运的是，系统管理员还有开发者、网络管理员和整个销售部门作为借口。

这就是我们今天的处境。任何能溜、能晃、能胡想进 root 提示符的人都能升级 FreeBSD。

打包基本系统是 FreeBSD 的恶龙，吞噬每一个出发去征服它的开发者。

然而，社区里某些人觉得这种可悲状态还不够友好。他们看着那些不那么宏伟的操作系统，看到那些所谓的“基本系统”拆成了软件包。用户管理软件是软件包，网络软件也是软件包。系统的每一小块都成为独立软件包，有自己的文件、元数据、安装脚本，最糟糕的是——依赖。系统管理守则第 32 条非常正确：“依赖是一切苦难之源。” 我们都曾被困在管理某个由几十或几百个软件包组成的野蛮系统里，发现 traceroute 和 ifconfig 这类关键程序竟没装。你得四处搜寻，搞清楚这个特定操作系统把那些关键程序关在哪个软件包里，尝试安装，却发现软件包管理系统本身需要更新，软件包仓库版本变了，当前已装的软件包与新软件包不兼容，然后执法人员上门，讨论你老板一直坚称“有点反应过度”的事，而你心知肚明整场狂飙都是正当的，清洁工也能毫无困难地把地毯、天花板和车道上的污渍清理干净。

谁会想把这强加给数百万 FreeBSD 用户？倡导者说，把基本系统打包会让安装最小化的 FreeBSD 系统变得非常容易，只包含执行指定任务所需的程序。听起来不错，但就像“锻炼” “健康饮食”和“不去摸那只可爱的苏门答腊虎，尽管它就在那儿”一样。这不会发生。设计只包含所需内容的操作系统安装，需要无限的预测未来的能力，或者规划，两者都不太可能。你心知肚明，那台本打算只用作域名服务器的小系统，最终会跑着 CEO 侄子女友的闪光朋克乐队的 CRM 套件和视频编辑软件。这就是服务器的自然生命周期。

要获得一台稀疏得让人不舒服的 FreeBSD 系统，正确方法是从源码构建。FreeBSD 构建系统包含添加和排除组件的选项。Michael Dexter 在他的 Build Options Survey（<https://callfortesting.org/results/>）中组织并测试了所有这些选项。你甚至可以直接尝试 OccamBSD（<https://github.com/michaeldexter/occambsd>），这是旨在托管 Jail、bhyve 和 Xen 客户端的最小可行 FreeBSD 构建。OccamBSD 是不错的起点，因为重新启用功能比把它们拆出来要简单得多。

幸运的是，FreeBSD 自身强烈抗拒被打包。它本身就是一个有凝聚力的单一系统，不喜欢被拆散成独立组件。搞清楚系统哪些部分真正相互依赖、哪些只是私交甚笃，是个非常困难的问题，许多开发者多年来一直为之头疼。许多方法都尝试过并失败了。打包基本系统是 FreeBSD 的恶龙，吞噬每一个出发去征服它的开发者。然而，世界源源不断地供应乐观的开发者，我毫不怀疑某天他们中会有一人成功，进一步削弱运行 FreeBSD 所需的道德品质。

运气好的话，那时我已经死了。或者至少不再回你的信。

有问题想问 Michael？请发送至 <letters@freebsdjournal.org>

**MICHAEL W LUCAS** 的脑袋里塞满了过时的知识，大多是关于 FreeBSD、其他 BSD 和其他一些次要操作系统的。要学新东西，他得先把其中一些垃圾扔出去。他的最新著作包括《$ git sync murder》、《TLS Mastery》和《SNMP Mastery》。你读到这篇时《DNSSEC Mastery》本该已出版，但他懒，所以多半还没出。更多信息见 <https://mwl.io>。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20220102-ruan-jian-yu-xi-tong-guan-li/we-get-letters.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
