> 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/20190910-an-quan/interview-with-pawel-dawidek.md).

# 采访 Pawel Dawidek

作者：Allan Jude 和 Kris Moore

Kris Moore：BSD Now，第 62 集，来自 Sun 的礼物。我们于 2014 年 10 月 29 日录制。我是主持人 Kris Moore。

Allan Jude：我是 Allan Jude。

Kris：我们将与 Pawel Dawidek 一起，他多年来在 FreeBSD 中做了很多工作，包括最初的 ZFS 移植——这可是件大事。我们将听到这是怎么发生的，他现在在做什么，以及更多内容。Pawel 将谈论他为 FreeBSD 移植 ZFS 所做的工作。GEOM、GELI、Capsicum 等各种话题。

Allan：是的，不仅 ZFS 移植到 FreeBSD 是一件大事。而且当他讲述这个故事时，它让我们了解到开发实际上是如何进行的。

FreeBSD 期刊编辑委员会建议，BSD Now 系列中的一些精彩访谈可能会引起读者的兴趣，因为它们反映了访谈发生时的技术状态。这里，我们整理了 2014 年 Kris Moore 和 Allan Jude 对 Pawel Dawidek 的访谈。

Kris：那本身就会是一个很棒的访谈，但然后我们还聊了 GEOM、GELI、Capsicum 等其他东西。

Allan：现在我们与来自 FreeBSD 项目的 Pawel Dawidek 在一起。感谢你加入我们。

Pawel Dawidek：当然，谢谢。

Kris：我们问几乎每个人的第一个问题是你的背景故事，你是如何第一次接触 BSD 的？

Pawel：我 12 岁开始接触电脑，但那时我用的是 C-64 和 Amiga。当我上大学时，我用过 Debian，最多可能几个月。一个朋友向我介绍了 FreeBSD，基本上我几乎直接从 Amiga 切换到了 FreeBSD。我的一个问题是我真的没有任何 Windows 经验。

Kris：这是个问题吗？\[笑]

Pawel：在家人和朋友方面确实有点问题，因为如果你从事 IT，他们认为你必须知道这些。你必须知道如何安装杀毒软件之类的东西。

Kris：不过那也意味着你不会在半夜接到电话说我的 Windows 电脑又坏了！

Pawel：是的。但我还是会接到这些问题。当然，我喜欢 FreeBSD，但也许不是从第一天开始，因为我试了几次才成功安装 FreeBSD。但从那以后，这是一次很棒的冒险。

Allan：你目前在 FreeBSD 上做什么工作？

Pawel：我没那么活跃了，但我仍然做一些 Capsicum 和其他安全项目的工作——这是我的主要兴趣。

Allan：我们传统上问的另一个问题是，目前在 FreeBSD 中的哪些东西我们可以归咎于你？

Pawel：啊，是的，多年来可能有不少。我觉得我成为 FreeBSD 提交者已经 10 年了。

Kris：哇！

Pawel：我主要从事存储和安全方面的工作，但我的代码在很多不同的地方。在存储方面，我做了各种 GEOM 改进和 GEOM 类，如 gmirror、gstripe、gconcat，以及其他一些 GEOM 类如 GELI。我觉得最有趣的项目之一是将 ZFS 移植到 FreeBSD。这是一次非常有趣的经历。

Kris：既然你提到了，你对移植 ZFS 的兴趣是什么？最初是什么促使你这样做？

Pawel：我记得那个确切的时刻。度假期间，一个朋友告诉我关于 ZFS 的事。他在做一些工作，他们经常使用 Solaris。他告诉我 Sun \[Microsystems] 正在开发的文件系统，以及许多数据集、端到端校验和、压缩、集成卷管理器等功能，听起来很棒。所以，我希望当这个文件系统创建后，有人能将它移植到 FreeBSD。

但是，当然，在 FreeBSD 中，文件系统一直是个诅咒。我们有 UFS，而且我们有很多将其他文件系统移植到 FreeBSD 的失败尝试。我知道有 HFS、ReiserFS、只读的。我们有 XFS，也是只读的。其中很多都未完成，这确实开始成为一个问题。所以 UFS2 出现了，情况有所改善，但当然有些人想看到 ZFS。

Kris：当然。

Pawel：所以，基本上，我想看看移植 ZFS 有多难。这个项目太有趣了，我变得很投入。基本上在头 10 天 10 夜里，我不停地工作。我有那么多肾上腺素，真的可以一直工作，有些天我只睡大约 2 小时。

Kris：哇。

Pawel：10 天后，我有了一个可读写的可用原型。那是——

Kris：有史以来最快的文件系统移植。\[笑]

Pawel：是的，但当然并非一切顺利。让 ZFS 达到可提交到 FreeBSD 的状态花了好几个月——实际上花了更多个月。但非常有趣。绝对是。

Allan：将 ZFS 引入 FreeBSD 并使其全部工作，你必须克服哪些障碍？

Pawel：ZFS 实现得很好。代码非常干净，而且大多数代码可以在用户态编译，这当然很有帮助——代码被设计为能够在内核和用户态中编译，这需要做大量工作使代码可移植。

我必须创建这个非常丑陋的层——与 Solaris 的兼容层，我并不以此为荣，但它让我们能够将改动降到最低。我们与上游之间的差异在移植新版本时极其有用，因为，当然，我移植的是 ZFS 的一个非常早期的版本，而它在 Sun 被非常活跃地开发。所以有大量变化，这个层帮助我们非常快地推进。

ZFS 是一个文件系统，所以它连接到 VFS 层，我认为这是 FreeBSD 内核代码中最复杂的部分之一。处理 VFS 很难。

Kris：几个月前我花了一周时间研究 Fuse 和那里的 VFS 层。

Pawel：我支持简化 VFS，因为我们的 VFS 试图通过为文件系统开发者做大量工作来帮助他们——集中化和缓冲等。这在理论上很好，但当你处理一个更复杂的文件系统时，你确实希望将更多东西移到文件系统本身。

Allan：对，你希望对缓冲策略有更多控制，因为策略不同。

Pawel：没错。ZFS 在性能方面可以高效得多。它对整个过程有更多控制。

Allan：在让 Solaris 代码在 FreeBSD 上工作时，还有什么有趣的事情出现吗？

Pawel：嗯，有一些差异，但令人惊讶的是，内核的 API 非常相似。我认为 FreeBSD 和 Solaris 内核之间的差异比 FreeBSD 和 Linux 内核之间的差异要小。所以这很有帮助。

Kris：有道理。这个问题来自我们的制作人，他问最终需要什么才能获得原生 ZFS 加密？

Pawel：我不喜欢 Oracle 版本中 ZFS 加密的实现方式。

Allan：我觉得没人喜欢。

Pawel：嗯，有些人喜欢。Oracle 加密背后的理念是加密单个数据集。但你主要想在哪里使用加密？主要是笔记本电脑上，因为你随身携带笔记本电脑，服务器上较少，因为你在哪里存储密钥以允许自动启动？

而一个笔记本上有多少用户？大多数情况下是一个。而 Oracle ZFS 加密假设有多个用户，他们想优化这一点。所以，每个数据集都可以用用户密钥加密，这在很多层面上都有问题。首先，它与去重完全兼容不了，因为如果不同的数据集使用不同的密钥，你在池中就有不同的数据集，所以无法去重。

去重的唯一方法是克隆文件系统，这样密钥也被克隆了，这不是很好。

Allan：是的，这是为了不同的用户。

Pawel：是的，没错。所以，我不喜欢这个想法。我不认为这是正确的方向。我实现 ZFS 加密的方式是在数据集级别以下使用 ZFS 加密——在 vdev 级别加密原始数据。这样我们也可以加密更多数据，因为，当然，使用 Oracle ZFS 加密我们无法加密 zpool 范围的元数据。

Allan：对。那么请谈谈 GELI 以及你在那个系统上做的工作。

Pawel：GELI 基本上是磁盘加密，位于文件系统之下。有许多类似的项目。当然，Linux 有自己的实现。GELI 显然是一个长期运行的项目。

当我开始做 GELI 时，FreeBSD 确实有磁盘加密，但它不太符合我的需求。所以，我开始做自己的磁盘加密，它确实提供了一些独特的功能。例如，我不知道有任何磁盘加密软件提供数据认证。

而且 GELI 从第一天起就与我们的 opencrypto 框架集成，所以它可以使用加密加速器。GELI 还提供许多有用的功能——例如，你可以使用多个密钥来解密你的磁盘、分区或任何存储设备。你可以有一个密码短语和一个存储在 U 盘上的密钥。

你还可以有多个密钥。可以想象这样一个场景：在公司里，你的安全官有一个与你的主密钥不同的密钥，而你也有自己的密钥。所以，如果你的员工丢失了他的数据密钥，数据不会丢失，因为有备用密钥。

Allan：这很有用。

Kris：当然。你还在积极参与 GEOM 或任何文件系统开发吗？

Pawel：目前我主要转向了安全方面。这些天我喜欢观察 ZFS 的发展。我非常高兴有越来越多的公司和人参与其中，因为有几年我想我是唯一一个将 ZFS 移植到 FreeBSD 的人。而它绝对不是一个人的项目。

Allan：是的。

Pawel：所以，我等了很长时间等其他人的加入，实际上有相当多的公司在生产中使用 ZFS 或用于他们的产品。所以，当人们参与 FreeBSD 上的 ZFS 开发时，我们与 illumos 社区有很好的关系。TRIM 支持是我们在 FreeBSD 中做的开发之一。我最初是为英国的 Multiplay 做的。据我所知，这是只有 FreeBSD 才有的。有很多故事说公司从 Linux 切换到 FreeBSD 以获得 ZFS。所以这非常好。

我相信他们中很多人一开始不确定，但切换后，我听到了很多积极的故事。

Allan：你能告诉我们关于你在 Capsicum 上的工作以及你现在在做什么吗？

Pawel：嗯，Capsicum 的内核部分或多或少已经非常可用了。我们仍在做的是 Casper 守护程序。它是一个帮助使用 Capsicum 的守护程序，因为 Capsicum 提供了非常严格的沙箱。你无法访问全局命名空间。这实际上是很棒的技术。

这真的是一个很棒的理念和安全框架。过去我在做自己的安全工作时——只是监控系统调用之类的东西，这是个坏主意。Capsicum 才是正确方向，它获得了更多关注。我希望 Capsicum 将成为——

Kris：未来的方向。

Pawel：是的，而且越来越有用。

Kris：当然。

Pawel：Casper 守护程序是一种帮助开发应用的方式。例如，一旦你进入 Capsicum 沙箱，你就无法解析主机名，而 Casper 让你能够做到这一点。我们正在尝试将 Casper 作为独立的守护程序，但我们发现这可能不是最好的主意，因为这个独立进程在不同的上下文中运行，有自己的资源限制、cpuset、路由表等。我们可能希望从应用进程生成 Casper 并继承其上下文。

Allan：是的，这样它实际上不会为 CPU 或其他什么提供绕过资源限制的更简单方法。

Pawel：没错。这方面还有一些工作要做。

Kris：谢谢。你的日常工作到底是什么，你在那里使用 FreeBSD 吗？

Pawel：哦，是的，我们用得很多。我经营自己的公司 Wheel Systems \[现为 Fudo Security]。我们是安全供应商，提供安全产品。事实证明，我多年来为 FreeBSD 做的工作在我们的最新产品——Fudo 中非常有用，我们使用 GELI 加密所有存储；我们使用 ZFS 在集群节点之间复制数据；我们使用压缩和快照。我们大量使用 Capsicum 来确保一切安全。

我们希望确保即使有人攻破了单个会话，他也无法访问其他会话。他实际上无法访问任何东西，因为如果他在认证之前攻破，他不会被授予连接服务器的权限。只有在成功认证后，我们才会提供到目标服务器的连接。

而 Capsicum 让这一切变得非常干净，实际上非常高效。

Allan：你不需要列举所有你不能做的事情。你是说你只被允许做这些事情？

Pawel：是的。这就是 capability 理念。你只授予进程所需的确切权限或对资源的访问。这不是 UNIX 理念，因为，当然，如果你运行一个 UNIX 程序，它可以访问一切。

Allan：你还有什么想谈的吗？

Pawel：没什么了。


---

# 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/20190910-an-quan/interview-with-pawel-dawidek.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.
