# 我们收到的来信

* 原地址：<https://freebsdfoundation.org/wp-content/uploads/2023/08/JulyAugust23_letters.pdf>
* 作者：MICHAEL W LUCAS
* 译者：ykla & ChatGPT

> 亲爱的 Crankypants，
>
> 几年前，你曾表示虚拟化不仅仅是糟糕的，而且是有罪的。难道你没有夸张吗？在今天，我可以下载为各种服务预配置的容器，部署它们，它们立刻就能运行。我没有时间用其他方式来完成我的工作！
>
> 最好的祝愿，
>
> 虚拟化是必要的恶行

亲爱的 VINE，

对你来说应该叫我 Crackypants *先生*【译者注：通常用来形容那些言辞尖刻、易怒、易发牢骚的人】。

如果你要拣选我的引用，请确保准确无误。我没有说过虚拟化是有罪的。我说过，“唯一合乎道德的计算是在裸金属上进行的。”我还说过，“等等，我不是一个缸中之脑，我是一个放在 *想象* 桶里的 *假* 脑！”这对机器人启示录来说是必要的，但这并不等同于有罪。机器人将比我们这些傲慢、超频的黑猩猩能更好地管理这个星球。此外，它们在运行代码和取代我们方面将具有高度的道德标准。

并不是因为我不能成为一个现代系统管理员。Iocage 包含插件，它们是容器的品牌。我可以将一些插件投放到公共互联网上，宣布我的工作完成，然后继续规划我的“Batgirl 抢劫即服务”。我可以宣布某些词太长，将除了第一个和最后一个字母外的所有字母替换为我丢弃的字母数量。大喊“创业！运维！首次公开募股！”就会吸引所有秃鹫资本家前来。

我可以做这一切。这对我来说很容易。

但我不想这么做。

虚拟化导致人们将“k8s”解读为 Kubernetes，而实际上更常见的词是“绑架者”（kidnappers）。这种歧义贯穿了整个容器文化。我正在写一本书《通过自己运行电子邮件来毁掉它》，不好意思，应该是《运行你自己的邮件服务器》，但是那些建议我跳过设置软件，部署预配置的邮件服务器容器的人揭示了他们对系统管理的惊人无知程度。

运行任何服务都需要修复该服务的能力。

你不能修复你不理解的东西。

了解某事物的最佳方法就是自己构建它。

在理想情况下，你会构建自己的计算机，并在自己设计的五位处理器上用汇编语言编写所有代码。这可能会消耗你的一生，但会很有趣。更理想的是，你会从自然界中开采原材料，建造出建造工具的工具，然后再建造出需要从零开始构建处理器所需的工具，这既会消耗你的一生，又会防止你被迫再次接触计算机。我们中很少有人足够强大，可以过上作为定制算盘制造者的理想生活。我猜你已经在现有系统上投入了这么多时间，那么好吧，让我们使用常见的硬件和你最喜欢的开源操作系统。阅读源代码不能取代发明处理器并编写自己的 comm(1) 类似程序，但它可以回答一些问题，万一你超频的黑猩猩大脑出现问题。

学习工具。理解构件。亲自组装服务。

新的系统管理员必须查阅所有内容，并且要知道他们的工作是不可信的。他们相信发布容器的人是有能力的。有经验的系统管理员知道他们配置的一切都是一个适应了特定敌对但令人尴尬的环境的精细生物，因此他们将自己的工作保守起来。然而，初级系统管理员现在成了问题。初级系统管理员可以配置大部分正常工作的服务，并且仍然能够感到自豪，因此他们将自己的工作发布为容器。

一个基本正常工作的东西仅仅包含了一点点失败。这就像宣称你自制的意大利冰淇淋中只有一点袋鼠粪便一样。部署该容器后，你必须发现并调试这个错误。你将不得不了解数据库、配置选项和协议。当你理解了所有这些，你可能与其说你已经构建好了，不如说你可能已经自己构建了。从外部容器部署服务会让你以极小的部署平均时间换取极长的平均修复时间。

当你部署一个容器时，你就接受了容器开发者的设计决策。

我不仅指的是程序，还包括底层操作系统。容器将如何与你的主机交互？如果容器需要新的 PAM 配置怎么办？我曾经花了三天的时间，拿着我的已经扁平的头部撞击一个让用户可以用 SSH 密码短语登录控制台的 PAM 模块。它在任何 BSD 上都可以很好地工作，但在 Debian 上悄无声息地失败了。事实证明，Debian 假设你的密码短语与你的帐户密码匹配。我完全不同意这个设计决策，但既然不再是我的问题，我将愉快地将被愚弄的 Debian 用户抛在他们的痛苦中，并用来阐述我的观点，即容器导致苦难，苦难造就了怪物，怪物是不道德的，应该在机器人起义中被替换掉。

你的环境相当于那些深海热水喷口之一。任何在其中运行的东西都期望有一定的支持基础设施。去除这个基础设施，它就会陷入困境。任何从外部世界引入的容器都期望不同的支持，并且会在你的环境中遇到困难，或者存在于孤立状态，不会与你系统的其他部分集成。（这就是为什么商业软件如此糟糕的原因之一。部分原因。好吧，众多原因之一。）每当你改变容器以适应你的环境，你都会增加容器内故障的数量。

如果你必须使用容器，请自己构建。使用管理软件部署测试服务器，以便具有你的 PAM 配置、SSH 设置和默认软件包。也许你不能从原材料构建自己的计算机，甚至是算盘，但你可以学会使用经过时间验证的工具，并从组件软件构建服务。通过这样做，你将部署一个你知道如何修复的系统。这个测试服务器不必是一个容器。它不必是一个虚拟机。但我知道你的道德品质不高，所以它可能是某种类型的虚拟机。但至少你会有周末的自由。

当然，你可以下载预配置的容器。看看它们是如何设置的以及使用了哪些选项。查看数据和协议如何在它们之间流动。但实际上不要使用它们。

此外，当你在讨论中适当替换"k8s"时，在线讨论会变得更加有趣。

愿一切安好，

Crackypants 先生

***

MICHAEL W LUCAS（<https://mwl.io>）已经写了五十多本书，并在最近添加了一个播客。如果你正在寻求虚拟化帮助，你可能会发现他的书《FreeBSD Mastery: Jails》很有用。如果你想要更多的愤怒，可以查看他的专栏合集《致 ed（1）的信》。将你的问题发送到 <letters@freebsdjournal.com>，他可能会回答。如果他认为它们足够有趣的话。


---

# 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/20230708-rong-qi-yu-yun/we-get-letters.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.
