> 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/2021-0304-freebsd-13.0/we-get-letters.md).

# 读者来信

* 原文链接：[We Get Letters](https://freebsdfoundation.org/wp-content/uploads/2021/05/We-Get-Letters.pdf)
* 作者：MICHAEL W LUCAS

噢！不可腐蚀的唯一真理之源，

FreeBSD 13 让我在欲望与厌恶之间撕扯。我需要那些改进，但我有种迷信的恐惧，觉得数字 13 不吉利。我知道这不理性，但这种迷信能延续几个世纪，肯定有它的道理，不是吗？

告诉我一切都会好的。

——犹豫的升级极客

HUG：

什么？抱歉，我刚才在想别的事。别觉得被冒犯。你没什么特别的。我就是这样。想别的事，是说。不是道歉。说“抱歉”不是道歉，这只是声明我隐约意识到你可能会对我情绪激动，而你发脾气时那恼人的尖叫会影响我消化。道歉要包含对自己行为的复述，承认这些行为伤害了他人，表达遗憾，并询问如何补偿他人所受的损害。本专栏的所有四位老读者立刻明白，这对我来说太费劲了。

如果你想要道歉，得自己来。而这不正是我们和机器打交道的原因吗？机器没有感情，也不在乎你的感情。那些 32 位计时器溢出、系统崩溃时，完全不在乎你的配偶正在分娩、新的《星际迷航》即将上映，还是你正在分娩。机器以无差别的冷漠对待我们。许多系统管理员也想用同样的冷漠对待其他人，但往往退化为无意识、条件反射式的蔑视。

你不具备冷漠的能力。你颅骨里那团称为“你”（无论那意味着什么）的带电脂肪，是为关怀而进化的。冷漠者在进化树上被吃掉了。

机器在冷漠中显出光荣。最妙的是，机器归根结底是合乎逻辑的。CPU 不过是一堆逻辑门的集合。显卡里的逻辑门塞得满到我们甚至不再叫它显卡了，它成了图形处理器（GPU），而它最有价值的用途是作为骗局币环境破坏节点。主板上那些芯片、电路和端口，不过是精心缠绕的电线，承载着精心调节的电流。

好吧，电里有点量子。电子也没法不受量子影响——我们的宇宙就是这样定义它们的。别因为它们的构造方式责备它们，要怪就怪它们的选择和行动。（比如给咨询专栏写信。这当然是个选择。）

量子先放一边，在宏观但仍属微观的层面上？整台机器最终是可知的。

如果不是有这么多内容就好了。想想你试图观看会议视频时发生了什么。你把鼠标移到播放按钮上。那机械的鼠标动作被转换为电信号，被倾倒进某种操作系统级的解释器，破译，并转换为屏幕上指针的移动。这些都是操作系统层面的工作，最初由上一代人开发。我们认为这些功能经过了充分测试，尽管绝大多数计算机“专家”根本不知道它真正如何工作。我们的前辈写了这些代码，它基本上能用，所以除少数硬核操作系统开发者外，我们都相信指针会动。

点击也经过同样的过程，原因相同。视频才是事情真正变得诡异的地方。为硬件里那数十亿个晶体管中的每一个写专门的指令太费事，所以像道歉一样，我们拒绝去做。提议用纯汇编写一个视频播放器，任何能胜任这任务的程序员要么会辱骂你的出身，要么会要求足够高的预付金，以便在不引渡的国家过上舒适生活。即便你勒索一个能干的程序员完成了这任务，他们其实也不是在为单个晶体管写代码。Kernighan 和 Ritchie 写 C 来逃避的那种原始汇编，并不代表现代硬件。汇编比任何其他语言都更接近逻辑门，它运行在处理器微码之上。

于是，你加入一层抽象，比如 C。C 让我们编写奇迹般的程序，比如设备驱动、文本编辑器和段错误。有些程序员能灵巧地手工摆弄一个 70 年代计算机内存的“栈”表示。别说精通 C 了，要达到 C 程序员学徒水准，都需要一种带电的颅骨脂肪、充足时间，以及奉献精神或顽固。

这些品质中，我只具备顽固。我倒是有懒惰，这直接导向 Perl。Perl 是用 C 写的。

假设你的视频播放器是用 Perl 写的。（你笑，但几十年前我就学到绝不要低估 Perl 程序员。Perl 程序员以避免工作的名义能搞定任何事。）你的代码是抽象，跑在抽象之上，跑在抽象之上，再跑在一个在尼克松辞职前就已过时的硬件表示之上。这些抽象每一个都有 bug。

按任何合理的逻辑，计算机根本不该工作。一点也不。然而，我们设法让它们工作了。现实中你的视频播放器不是用 Perl 写的。它在一个 Web 浏览器里。这个 Web 浏览器是用某种编程语言或应用工具集写的，比如 JavaScript、Go、Fortran 或 Haskell。无所谓。我不知道真实细节，除非你极其不幸，否则你也不知道。

那还只是你的 Web 浏览器的主引擎。它可能有附加组件，用 Forth、Pascal 或——Beastie 保佑你——C++ 写的。

所以我们不是在抽象之上叠加抽象。我们有的是多堆相互关联的抽象，它们同时相互影响、相互改写，协同地重新构造机器处理器和内存的内容。是的，我们给其中一堆加了“保护”，但那些都是事后补丁。事后安全并不存在。

哦，我想起来刚才在想什么了！人类最伟大的发明？不，不是轮子。也不是火。甚至不是冰淇淋。是官僚体制。一个社会就是一台由肉构成的机器。我们每个人都有自己的位置。我们都在持续地重新构造它的内容。每个人都只能看到机器的一小部分。没有人能看到机器的全貌；我们只能真正看到自己的那一小块。我们对肉机器中此刻最令人沮丧的部分有意见，因为我们确信自己完全理解那个问题，尽管其他人在维护它上花了数年乃至数十年。

我们系统管理员，自以为理解了机器，实际上只理解众多抽象中某一抽象的一小片。写脚本语言的人以为自己对内存管理很在行，其实他们理解的只是下一层提供给他们的抽象。每一层抽象都如此往复。

一台现代计算机就是一个巨大的官僚体系。你最多理解其中一个办公室。你可以穷尽一生去理解这些系统中某一个的逻辑——但理解整体几乎不可能。不断演化的语言、演化的标准、演化的硬件意味着，即便你达到佛陀级别的觉悟，机器也会把你甩在身后。

把一门语言宣布为“安全”？读作“我们已经尽了最大努力，把我们的错误与其他部门隔离开来。”我欣赏这份努力，同时我也知道失败既不可避免，又不可阻挡。

我们在一座流沙之桥上前行，桥下是无底深渊，桥的尽头看不见彼岸。“告诉你一切都会好？”不。没有什么是会好的。FreeBSD 13 在这一点上与任何其他操作系统没有不同。它只是历史上编号最诚实的一次发行。

而且它永远、永远不会为此道歉。

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

***

**MICHAEL W LUCAS** 从社会的 Michael W Lucas 抽象层中冒出的最新图书包括《TLS Mastery》、《Only Footnotes》以及即将问世的《$git sync murder》。系统管理员三十年生涯已将苦涩、愤世嫉俗和讽刺从他身上净化干净。更多内容见 <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/2021-0304-freebsd-13.0/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.
