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

读者来信

mailbox graphic

亲爱的科技界(乃至任何领域)最没用的建议专栏作家:

在整个开源界,内核开发者是精英。他们能实现真正酷炫的东西,发明巧妙的新功能,比如 ZFS、缓冲区缓存、内存保护。有什么建议能让我成为他们的一员吗?

我读过你的专栏好几次了,老实说我得告诉你:为了最大化成功几率,我会仔细听取你的所有建议,然后反其道而行。

——新手但不天真(Novice But Not Naïve)

亲爱的 NBNN̈:

“做计算机工作还不够。我要让我的失败真正难以解释!”

很好。

许多人幻想内核开发者是编程精英。John Baldwin——多次入选 FreeBSD Core Team,也是本《期刊》编辑委员会主席——就是从写文档直接转做内核开发的。John 不幸认识我几十年了,所以我可以笃定地告诉你:他不仅不是什么精英,他身上那些引人注目、足以定罪、值得说道的事,统统与编程无关。内核开发者当然得达到最低限度的胜任水平,但除了几条规则之外,内核代码没什么特别的。把内核程序员当成精英,会在你起步前就毁掉你——所以我强烈鼓励你这么想。

不过,你若执意前行,执意要让自己织一个茧,蜕变成一位内核开发者,像一只动不动就 panic、会 dump 内存、会损坏文件的蝴蝶——那就立刻把梦想和目标分开。目标是可付诸行动、完全在你掌控之内的事情。实现梦想则需要别人替你出力。约那个让你心动的人吃晚饭?纯属梦想。约那个让你心动的人吃晚饭,被对方提醒你天生不值得爱、应该识相点别再像所谓 “浪漫爱情” 里那种令人毛骨悚然的主角一样纠缠人家?这才是完全可以实现的目标!

你掌控不了别人。为目标努力,别为梦想。

要想成为内核开发者,你可以设定哪些目标?

先读文档。比如《FreeBSD 操作系统设计与实现》《FreeBSD 设备驱动程序开发》《Designing BSD Rootkits》——后者为学习内核工作原理增添了有趣的转折。《FreeBSD Developers Handbook》免费可读。把脑子塞满,做完书里的练习。如果某个知识点你啃不动,没关系,早就有人写过文章和书讨论过它了。

注意,我没说 “问别人该怎么开始学内核”。如果你常逛邮件列表、论坛,或者互联网上更不堪入目的讨论板,偶尔会看到有人求教如何学内核编程。你也许以为这些人在找上面那份书单,但我这里给出的答案用最浅显的搜索就能找到,看起来像在求人牵手。毛毛虫会求助织茧吗?不会!它们又流汗又挣扎,才能挤进逼仄的茧,熬成超越自身的存在。你必须自己干。多数转变都死在这一步,因为人类钟爱舒适惬意、不可付诸行动的梦想,不喜欢丑陋艰难的目标。

像参与任何开源项目一样,你得找一小块下手。从 bug 开始。问题报告(problem reports)是准内核开发者的金矿。在可能的项目里翻找时,你又要再一次把目标和梦想分开。“解决几个 panic bug 并让我的修复被合入” 是梦想。它需要资深内核开发者注意到你的修复并选择采用。“这个月解决一个已报告的内核 panic” 严格说也不是目标,因为你不能保证一定能解决。“这个月花十个小时研究一个已报告的内核 panic,期间不每三分钟就停下来在社交媒体上吐槽、在工作群里抱怨、或者向我那只即使我天生不值得爱也不得不忍受我的宠物诉苦。”——喏,这才是目标!完成足够多这样的目标,你就能练就内核编程的本事。

不过,内核工作真正的难处在哪?

在于别人。

假设你写好了补丁,修复了已报告的问题,并附在 bug 上。你没法让项目成员注意到你的工作。即使他们注意到了,你也没法让他们原样采纳你的补丁。某个项目成员可能把你的补丁当作灵感或概念验证,然后基于你完全没想到的理由写了个完全不同的补丁。让人注意你是梦想。通过提交一整套高质量补丁让自己难以被忽视,才是目标。

毛毛虫怎么变成蝴蝶,这里有个有趣的事实。它们其实不变。我们看到毛毛虫爬进茧,蝴蝶飞出来,于是以为发生了转变——残酷的真相是:毛毛虫的茧是个棺材。毛毛虫爬进去,化成一团浆,只剩下一个基本相当于自组装蝴蝶套件的小块。蝴蝶的第一顿饭是 100% 纯正的毛毛虫浆糊。当你提交了第二十个补丁,仍然感觉没人在乎,请庆幸自己没有真的化成一滩肉泥。精神上的肉泥不那么显眼。

假设你的补丁被采纳了?然后呢?

还是人。

在那个神圣而至高无上的计算机科学研究组(Computer Science Research Group)分发原始 BSD 的光辉岁月里,一个人足以对 Unix 形成充分理解。一次完整安装只占几兆字节。是的,这包括编译器和源代码——“完整安装” 哪里不清楚?大学生都被要求读完并理解这些代码。

今天呢?等你读完基本系统的源代码,它已经变了,你得从头再来。成为 “内核开发者” 几乎不可能。你顶多成为负责内核某一个小切片的可信开发者。做维护会涉及内核的其他部分,这意味着要和负责这些部分的人讨论你的改动。在内核里干活和在用户态编程没什么两样,区别只在于别人相信你达到了某种最低限度的胜任水平。

如果梦想成真,你成了真正的内核开发者,你会发现人不是问题,人是 问题本身。你的每一处改动都会得罪某个人。用户和非内核程序员会有一种奇怪的想法,以为你是精英、知道自己在干什么、比他们少一些茫然。

既然你声明了不仅要无视我的想法还要反其道而行,那让我总结一下:成为内核程序员是通往幸福的唯一正道,祝你好运。继续做梦吧!

想向 Michael 提问? 请发送至 letters@freebsdjournal.org

Michael W Lucas 与受人尊敬的 FreeBSD 期刊编辑委员会主席、精英内核开发者 John Baldwin 不同,他始终待在文档领域。他的最新著作是《Run Your Own Mail Server》,该书以 FreeBSD 作为参考平台。更多信息见 https://mwl.io

最后更新于