> 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/20171112-jian-kong-yu-du-liang/new-faces-of-freebsd.md).

# FreeBSD 新面孔

FreeBSD 新面孔 作者：Dru Lavigne

本栏目旨在聚焦近期获得提交权限的贡献者，并向 FreeBSD 社区介绍他们。过去的一个季度对新提交者来说十分繁忙。在本期栏目中，焦点是 Fedor Uporov（8 月获得 src 提交权）和 Luca Pizzamiglio（8 月获得 Ports 提交权）；Adriaan de Groot 和 Craig Leres（9 月各获得 Ports 提交权）；Ilya Bakulin 和 Chuck Tuffli（9 月各获得 src 提交权）；以及 Yuri Victorovich（10 月获得 Ports 提交权）。

## 请介绍一下你自己、背景和兴趣。

* **Fedor**：我大约六年前获得无线电工程硕士学位，然后开始了硬件设计师的职业生涯。我曾与不同的单片机和 FPGA 共事，然后开始尝试编程这些设备，不是作为本职工作，而是作为爱好。后来我发现我的职业兴趣从硬件开发和 PCB 设计转向了编程。于是我换了工作，成为一名程序员。我的兴趣很简单。有空闲时间且不厌倦显示器和键盘时，我会找时间研究开源代码或学习新东西。否则，我喜欢散步或旅行。
* **Luca**：我 39 岁，出生于意大利的一座小城 Casalpusterlengo。我 2003 年毕业于米兰理工大学计算机科学工程专业。10 岁时我幸运地收到了第一台 8086，从此对计算机产生了兴趣。我在意大利做了几年顾问，从事 FPGA 和 Linux 相关工作。2009 年我搬到德国柏林，在那里开始接触 FreeBSD，并学着说一口接近德语的语言。现在我住在杜塞尔多夫，仍在 Trivago 从事 FreeBSD 工作。不与计算机打交道时，我打排球和沙滩排球，还开始上击剑课，十分有趣。我也弹钢琴，还在爵士合唱团唱过几年歌。
* **Adriaan**：我在加拿大卡尔加里长大，在 Apple 上做各种傻事，直到高中才接触到一些 PC 初学者。之后我在卡尔加里大学（U of C）待了很短一段时间，在那里我遇到了留着长灰胡、穿着登山靴、坐在 vt100 终端前的人。终端另一端跑着某种 UNIX，像傻瓜一样，我写了自己的构建系统（make 用制表符，我不同意），然后又写了自己的编辑器（vi 有命令模式，我也不同意）。此后不久，我搬到荷兰以逃避这些狂妄行为的后果，最终在 1990 年获得一个邮箱地址和登录名“adridg”——这 25 年来一直是我的用户名。

  荷兰一直是我的家，在那里我获得博士学位，生了几个孩子，在软件行业经历了丰富多彩的职业生涯——目前全职从事自由软件开发。如果你提前一小时告诉我，你可以过来吃晚饭：晚餐很可能是素食的，我很乐意为多达 40 人的群体做饭。我能弹电贝斯（弹得不好）、玩 Kerbal Space Program（玩得不好），还曾在电视上扮演律师（同样玩得不怎么样）。律师这件事与我对许可证问题的兴趣有关；有段时间我随身带着一张卡片，上面写着“我替你跟律师说话，你就不用去了”。这是我给开发者看的卡片；另一面写着“我替你跟工程师说话，你就不用去了”，给对话的另一端看。
* **Craig**：小时候父亲教我焊接，多年来我搭了许多小电子项目。约 11 岁时，父亲一位富有的朋友买了一台 PDP-8/e，把证券交易所线路接进我们家，父亲用汇编写了些代码来监控和报告几只股票。等他朋友对这个项目厌倦后，我随时都能使用那台 PDP。那是我学编程的时候，也开始花更多时间在计算机上而不是电子学上。

  我的第一个 Unix 账号是在加州大学伯克利分校的 Cory EECS 11/70 上，当时我是学生。后来我成为伯克利计算机系统研究组（CSRG）的无薪志愿者，对 Berkeley Software Distribution（BSD）拥有 root 和源码提交权限。我是 termcap 文件的维护者之一，至今仍随 Unix 和 Linux 系统发布的该文件中还能看到我的名字。BSD 重写受 System V 源码许可证束缚的程序时，我合著了 **/usr/bin/write**。

  那时我也在劳伦斯伯克利国家实验室（LBL）的网络研究组（NRG）工作。另一个组有一台运行 BSD 的 Vax 11/780。它是一个 ARPANET 节点，我最初获得账号时，它使用网络控制程序（NCP）协议。管理员有时会在下班后启动实验性 TCP 内核，并最终全面切换。在老板 Van Jacobson 的指导下，我接触到了 Unix 网络驱动程序，我们为与楼里几台 VMS 系统通信的令牌环驱动程序添加了看门狗。我还参与了另一个有趣的项目，我们在 LBL 和 UCB 之间安装了一条定制的微波链路，提供 230.4 Kb/s 的站点间通信。

  我们自己的组有一台运行 VAX/VMS 的 Vax 11/780，但我们也有一个早期版本的软件叫 Eunice，它提供一个能在 VMS 之上运行 BSD 网络设备驱动程序的环境。我们实际上在这个平台上测试了许多早期 NRG TCP 增强。Van 出城演讲时，我常常把当前的 BSD 网络栈移植到 Eunice 上。

  1980 年代中期，我们开始用 Sun 工作站，很快我在办公室和家里都有了 3/50s。我们从源码构建内核（当时基于 BSD），并开始用 SunOS 3 做网络栈开发。一个令人难忘的变化是 Van 注意到 mbuf 集群长 1K，但以太网帧约 1500 字节。通过将一个集群的大小翻倍（以及其他几处微调），他能让 3/50s 在 ThickNet 以太网上以接近 10 Mb/s 的速率传输数据。他的测试经常让我们 Vax/VMS 系统崩溃；以太网使用指数退避，而 DECnet 使用线性退避，且 VMS 不限制 DECnet 重传可分配多少内存，网络利用率异常高时就会 panic。

  我的兴趣包括 NASCAR（我是兼职的赛车学校教练）、电子学（数字音频，尤其是基于 Arduino 的任何东西）、科幻小说，当然还有编程。
* **Ilya**：我 2009 年毕业于莫斯科工程物理学院，原想从事微电子和纳米电子行业，但很快转向了软件开发。此后我先后在多家公司工作，先在莫斯科，后在德国慕尼黑，这些公司都用 BSD 系统构建产品。目前在谷歌慕尼黑担任站点可靠性工程师，业余时间研究 FreeBSD 内核。不在笔记本屏幕前时，我通常去山里，独自或与妻儿一起远足或滑雪。
* **Chuck**：我叫 Chuck Tuffli，目前住在加州萨克拉门托郊外。我用计算机“有一阵子了”（在打孔卡之后、软盘流行之前），有幸闯入“软件与硬件对话”的世界。我最近的经历主要与存储相关硬件（Fibre Channel、SAS、NVMe）有关，过去则涉及各种视频、图形和 WiFi 驱动。不编程时，我陪家人和我们的马匹。说来相关，如果你迫切需要修栅栏或搞灌溉，尽管告诉我，我能帮上忙。
* **Yuri**：我有物理学硕士学位。大学时我专攻理论物理，计算过基本粒子的反常磁矩，做过大量烧脑的数学。大学毕业后，科学仍是我的热情所在，但兴趣也包括计算机和技术。我在多个行业担任过工程师，后来成为架构师：保险、博彩、消费电子、光学和电子设计自动化（EDA，开发用于设计微芯片的软件）。我总是被算法复杂和科学相关的领域所吸引，因为它们往往最具挑战性。我也对化学和生物化学很感兴趣。

## 你最初是如何了解到 FreeBSD 的？FreeBSD 的什么吸引了你？

* **Fedor**：大约三年前，我开始研究 Mac OS X 的 darwin 内核，主要是 VFS 和文件系统。我开始学习 FreeBSD，因为 darwin VFS 一段时间前从 BSD 分支而来。结果发现 BSD 一侧比 darwin 内核更易读、更易懂。所以 FreeBSD 真的帮我用日常工作任务管理 OSX VFS。
* **Luca**：第一次听说 FreeBSD 是在大学，我的朋友们对 toor 用户着迷。那时我还是个 Linux 用户，Slackware 是我用的发行版。搬到柏林后，我有幸与我的第一位导师 vwe@ 共事，可惜时间不长。我在 FreeBSD 中真正喜欢的是，构建运行在机器上的每一块软件都那么顺畅。它让改造系统和提交补丁变得很容易。我至今仍在构建笔记本上运行的所有东西！我在 FreeBSD 上的第一项工作是 GELI 和提供口令的不同传统方式。目前我主要做 Ports，但也开始研究 jails 和 ZFS。此外，我对 DTrace 的兴趣与日俱增，它所能做到的事令人难以置信。
* **Adriaan**：我书架上有 FreeBSD 2.2.3 盒装版。我可能在家庭 PC 上跑过它，那台 PC 连了两台 vt100。与此同时，我在 SunOS 上的 X11 开发小型网络游戏，旁边就是那盒 2.2.3，还有一本 Red Hat Linux 4 的手册，所以我大概只是什么都试试。

  1998 年左右，我进入了国际自由软件开发领域，向 KDE 提交补丁，并成为 KPilot（Palm Pilot 同步工具）的维护者。不知怎么的，我与 KDE 的文档协调员 Lauri Watts 聊了起来，她跑 FreeBSD，并邀请我“加入黑暗面”。那大概是 2001 年，所以我在家跑 FreeBSD 跑了很久，工作单位则用 Linux，因为那里需要一个（闭源的）CMU LISP 系统来运行证明检查器。几年后，KDE-FreeBSD 社区式微并沉寂——IRC 上的 tap、wca、lioux、lofi 等昵称在 KDE-FreeBSD 频道中归于沉寂。

  我花了几年时间研究 OpenSolaris；那时我对一件自己能做好的事已有了清晰认识：将有趣的工具应用到源代码上，发现代码质量问题并修复。OpenSolaris 有 Sun Studio 编译器，曾免费使用一段时间。它的主要诱人之处在于它不是 gcc，因此对什么是好的 C++ 有不同视角。把该编译器应用到一个庞大的代码库上，发现了大量微妙的 gcc 主义，以及许多不适用于 Solaris 的 Linux 主义和 BSD 主义。

  在这段历史的某个节点，SATA 出现了，我花了些时间研究 Silicon Motion 控制器和端口复制器。我向 FreeBSD ATA 子系统维护者提交了补丁——有段时间我可能拥有唯一支持 SiI3124 RAID 配端口复用器的 FreeBSD 系统，虽然我没有六块硬盘接到它上面。不久之后，CAM 子系统接管，我觉得我的代码再没发生过什么。这些部件仍在我的“杂物箱”里。我应该哪天再试试。

  OpenSolaris 关闭后，我又在寻找一个开发平台；随着 Clang 出现和 FreeBSD“螺丝螺母一应俱全”的理念，我能很快回到将有趣工具应用于 KDE 代码库的状态。大多数 Linux 发行版在我看来已走入对开发者不友好的领域，对临时贡献者来说，很难在一个干净闪亮的发行版上开始动手。FreeBSD 也许有 ASCII 艺术 bootloader，但它从一开始就给你一个能用作开发者的系统。

  接下来又是几年与重生的 KDE-FreeBSD 小组合作，由 tcberner@ 和 rakuco@ 领头。我是搞 FreeBSD 的 KDE 伙计，他们则是搞 KDE 的 FreeBSD 伙计，配合得相当好。在 KDE 一侧，我们把 FreeBSD 加为持续集成系统的一等公民（我调侃地补充：一个 Linux 发行版因难以保持运行而被踢出了）。Linux 主义现在常被修复，上游普遍更意识到“事情也可以不同”。这可能是（KDE）也产出移动和 Windows 包的副作用，但我乐于接受。

  我好像也曾加入过一次 EuroBSDCon 的组织委员会，但找不到任何可靠参考文献（我的记忆也不可靠）。
* **Craig**：作为 BSD 的用户、贡献者和粉丝，BSD 被封存之后，FreeBSD 是顺理成章的下一步。使用 FreeBSD 总让我感觉像在用 BSD。我也喜欢 FreeBSD 作为高性能服务器平台的声誉。1990 年代中期，我们开始在 LBL 运行 FreeBSD 2.X，先是笔记本上，后来是商用 PC 硬件。从那以后我就一直用 FreeBSD 桌面。
* **Ilya**：我搭建的第一台 FreeBSD 服务器（基于 FreeBSD 6.2-RELEASE i386）是为我所在公司的企业网充当路由器。它替代了一台又大又吵的 Windows 服务器，能在一台旧 PC 上提供快速文件存储和网络访问。那时我深刻感受到系统可以多么高效、易维护，能从老化的硬件中榨取多少性能。我工作过的一家公司搭建了基于 FreeBSD/ARM 的遥测解决方案，我由此接触到在嵌入式硬件上运行 FreeBSD。我也在笔记本上跑过一段时间 FreeBSD。
* **Chuck**：在 FreeBSD 4.7 时期，我雇主有一套开发工具包，里面有可用的 Red Hat Linux 驱动。当时围绕 GPL 执法存在很大不确定性，担心 Linux 驱动可能迫使他们披露硬件的专有信息。为了对冲风险，他们决定也包含一个非 GPL 开源操作系统的驱动。试用过各种 BSD 后，FreeBSD 成为参考设计平台。

  如果开源许可证是 FreeBSD 所提供的全部，我也不会留到今天。套用一句旧电视广告词：“为许可证而来，为设计而留”。当时在 FreeBSD 上开发设备驱动比 Linux 高出一个数量级。无论是文档、高级存储功能（如 SCSI target 模式），还是其他经过深思熟虑并实现良好的子系统，它都曾是——至今仍是——一个出色的开发环境。
* **Yuri**：1998 年一位朋友提到了 FreeBSD，我决定试试。从那以后，我再也没回到 Windows。吸引我的是能够深入其中、了解其各部分如何运作和交互、并在各层面修改它。FreeBSD 结构良好、设计清晰。FreeBSD 让我能了解操作系统内部如何运作，这是任何商业操作系统都无法提供的机会。FreeBSD 拥有所有操作系统中最好的软件打包系统（Ports），它允许任何用户用清晰简便的流程随时重建任何软件包。作为一项政策，Ports 的所有源码下载都经过指纹校验。这消除了 MITM 攻击的可能性，其他系统都没有做到。其他系统对自身打包系统中一些安全问题视而不见，而这些在 FreeBSD 中早已解决。

## 你是如何成为提交者的？

* **Fedor**：我在工作中接触 Linux ext 文件系统，所以尝试给 FreeBSD 实现做一些改进补丁。当补丁变得相对复杂时，我获得了 src 提交权。
* **Luca**：我自从学生时代起就被开源这一概念所吸引。那时我没什么自信，觉得自己技术不够，做不出有价值的贡献。后来我开始做 FreeBSD，devel/gdb 的线程支持有严重问题。我提交了一些补丁，突然就成了 gdb 的端口维护者。

  加入 Trivago 后，我有更多机会在 Ports 树中提交补丁，于是 Lars（lme@）和 Olivier（olivier@）推荐我成为 Ports 提交者。
* **Adriaan**：2017 年初，tcberner@ 和 rakuco@ 找到我，说我应该争取一个 Ports 提交权；部分原因是 kde@ 的 Ports 应该分散到更多人身上，这样我们就更有韧性——大家都有工作、有繁忙期和现实生活中的责任。毕竟我已断断续续使用（并为 FreeBSD 贡献）至少 15 年，可能 20 年了，这感觉就像是“戴上戒指”。
* **Craig**：我长期以来一直为 Unix 和 FreeBSD 贡献，1999 年提交了第一个 FreeBSD PR。2008 年成为 Ports 维护者（sysutils/lbl-hf），此后几年创建或接手了更多 Ports 的维护。可能就是这时我把成为提交者定为个人目标。去年夏天我在一次聚会上遇到 Kirk McKusick，提及我对成为提交者的兴趣。我们从我作为 CSRG 志愿者时就认识，他立即主动提出帮我了解流程。Larry Rosenman 和 Matthew Seaman 友善地自愿担任我的导师。不久后，我受邀以 Ports 提交者身份加入 FreeBSD。
* **Ilya**：我曾买过一台有点贵的基于 ARM 的家用服务器，GlobalScale DreamPlug。它上面可以跑 FreeBSD；不过设置好之后，我发现板载 WiFi 是通过 SDIO 总线连接到系统的。那时我甚至不知道 SDIO 是什么，读了些文档后，我决定试着为 SDIO 总线添加支持会是个有趣的项目。结果它成了一个“兔子洞”。实现了最初的几块并与 Warner Losh（imp@）和 Adrian Chadd（adrian@）讨论了遇到的问题后，在 2013 年马耳他 EuroBSDCon 期间，我开始实现一个全新的、基于 CAM 框架的 SD/MMC 栈。它最终成为一个出色的项目，让我深入了解了 FreeBSD 内核内部，并与项目中不同的人合作解决问题。然后 Warner 自愿担任我的导师，让我改进 FreeBSD 的 MMC 和 SDIO 支持！
* **Chuck**：Michael Dexter 关于 diskctl 的演讲让我好奇如何跨 ATA、SCSI 和 NVMe 协议表示 SMART 缓冲区。在此过程中，我写了一个小应用，使用 CAM(3) 向驱动器发送 SMART 命令。但 CAM NVMe 驱动缺少几个让它能工作的调用。给 NVMe 驱动、CAM、sgdd 等打了十来个补丁后，Ken Merry 和 Warner Losh 厌倦了替我提交代码，问我是否愿意成为提交者。
* **Yuri**：我常常发现有用的软件，而大多数时候这些软件在 FreeBSD 上没有，我就去移植。这样我创建了大约 200 个 Ports，过程中还修复了数百个其他 Ports 中的 bug 并提交补丁。最终，一位提交者提议我加入。我同意了，但发生了点意外，他没有时间当我的导师。后来在 10 月底，另一位提交者 Tobias Berner 再次问我。我答应了，事情就这样成了！

## 加入 FreeBSD 项目后你的体验如何？对希望也成为 FreeBSD 提交者的读者有什么建议？

* **Fedor**：我应该说 FreeBSD 开发者社区真是一个友好而优秀的群体。这是我向开发者列表发送自我介绍邮件时得到的印象。人们会在三到五天内回复你的自我介绍邮件——这真的很棒。你会感觉自己的想法和努力真的为这个项目所需。

  此外，FreeBSD 的导师制度是帮助人们走过入门阶段、成为提交者的好方式。在此我要感谢 Pedro Guffini（@pfg），他承担了做我导师的责任。与他合作真是一种荣幸。
* **Luca**：FreeBSD 社区中能找到的知识令人惊叹。此外，所有开发者都热情地欢迎我。我已经犯过一些小错误，其他 Ports 提交者友好地让我从错误中学习，而不是直接纠正。我从一开始就参与建设性讨论，而非被动接受资深贡献者的决定。

  要成为 FreeBSD 提交者，社区需要知道你是一名优秀的贡献者。所以，通过补丁贡献，学习如何提高贡献质量，并在 IRC 和邮件列表中保持可见。这是一个需要时间的过程，但也非常有回报。
* **Adriaan**：某种程度上，事情没怎么变：我仍跑同样的系统，仍把大部分时间花在 Ports 上，把东西推进 KDE-FreeBSD 的 Ports GitHub 树。我自己也捡了几个 Ports，纯粹是因为喜欢（比如 sayonara，因为我想要比 mpg123 略强一点、但又不要强太多的东西）。

  对新人，我会说“继续做你喜欢的事”。而且，既然我在头几个月犯过自己的错，“注意细节”。Ports 领域可以非常苛刻，在某个时刻漏掉一些小细节是自然的。你的导师在那里帮你，但他们也是人。你收到的第一封来自 mat@ 指出遗漏的“RE: svn commit”邮件是一种成年礼，只是提醒大家都在关注，共同打造最好的系统。
* **Craig**：看到幕后、访问内部资源、学习流程，以及了解整个项目如何更详细地组合在一起，非常有趣。我互动过的每个人都乐于助人、礼貌有加。当我做出第一次“生产”提交（与成为提交者相关的提交相对）时，非常令人满足。作为提交者，显然是维护一个 Port 最有效的方式，无论对维护者/提交者还是 FreeBSD 项目的其他成员都是如此。

  我不知道我成为提交者的路径是否典型，但我怀疑这是一个值得效仿的好模式。提交 PR，成为几个 Ports 的维护者，了解 Ports 系统如何运作；阅读文档（显然），还有 **/usr/ports/Mk** 中的 makefile。看看现有 Ports，学一些技巧和最佳方法让一个 Port 良好运作。
* **Ilya**：在我成为提交者之前，我早已向 FreeBSD 项目贡献——我维护一些 Ports，参加会议，与人交谈，讨论各种问题的解决方案。你常常看到的是，当系统缺少许多用户需要的功能时，人们就自己动手，功能就实现了！

  需要明白的是，这是一个开源项目——所以别指望别人替你解决问题或替你写代码，在功能真正进入代码树前别依赖任何时间表。相反，尝试自己研究、调试、实现，再带着补丁和想法回来，为大家打造更好的系统。

  未来的 FreeBSD 开发者会活跃于邮件列表，参加会议并积极参与讨论，最终找到一个有趣且对社区其他人有用的项目。最终，他们的提交权会找到他们！
* **Chuck**：FreeBSD 对我来说是一个热情欢迎的社区，无论作为贡献者还是提交者。至于建议，我的生活更常被引为“警示故事”而非“操作指南”。话虽如此，去做点东西，并对社区反馈保持开放就好。这里可获得的深度和专业知识是一份真正的礼物，只要你愿意，它会使你变得更好。
* **Yuri**：我与 FreeBSD 的经历一直很好，无法想象使用其他任何系统。我喜欢这里的技术，也喜欢这里的人。FreeBSD 的人非常友好、技术精湛、聪慧。FreeBSD 提交者是世界顶级的计算机专家。我加入提交者社区后收到的许多热情欢迎的回复，让我十分感动。

  我才拿到提交权两周；现在就给建议可能太早。只是别犹豫。这是非常值得的！•

***

**DRU LAVIGNE** 是 FreeBSD 项目的文档提交者，BSD 认证小组主席。


---

# 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/20171112-jian-kong-yu-du-liang/new-faces-of-freebsd.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.
