For the complete documentation index, see llms.txt. This page is also available as Markdown.

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 认证小组主席。

最后更新于