LWN:Linus 的炉边杂谈!

共 6019字,需浏览 13分钟

 ·

2022-07-11 20:27

关注了就能看到更多这么棒的文章哦~

A "fireside" chat

By Jake Edge
June 28, 2022
OSSNA
DeepL assisted translation
https://lwn.net/Articles/899182/

在在 Open Source Summit 传统上 Linus Torvalds 会和 Dirk Hohndel 坐下来讨论与开源有关的各种话题,当然也会包含 Linux 内核。在德克萨斯州奥斯汀举行的 2022 年北美开源峰会(OSSNA)也不例外,他们两位在会议的第一天都再次发表了主题演讲。两人对话中最抢眼的部分是 Torvalds 宣布 Linux 的 Rust 可能会在下一个合并窗口中被合入进来,这个窗口会在几周后开启,但其中还有很多值得关注的内容。

Hohndel 介绍说,他是 Cardano 基金会的首席开源官(chief open source officer);他正在努力促进围绕该基金会的区块链技术的开源生态系统。Torvalds 说,举行这些 "炉边谈话(fireside chats)"是源于他的愿望;他说,"我做的是软件",而不是做公开演讲的,所以这种形式让他感到更舒服。他实际上已经把弄清人们对什么感兴趣的事情外包给了 Hohndel;Torvalds 笑着说,"如果他问的问题不好,那不是我的错"。

[Linus Torvalds]

Hohndel 说,看到这么多人在一个房间里参加主题演讲感到 "超级兴奋";OSSNA 大约有 1200 名亲临现场的与会者。跟过去的几年比起来情况大不相同了,他问 Torvalds,这些对他和内核有什么影响。Torvalds 说:"COVID 引起的整个混乱局面几乎没有影响到内核开发";当然很多人在个人方面都受到了各种负面影响,但是从开发的角度来看,内核项目继续快速发展,甚至在封锁期间加速了开发。在某种程度上,这是因为内核开发一直是一个分布式项目,许多参与者已经在家里工作了。

Torvalds 指出,他在家里工作已经 20 年了。Hohndel 说,在疫情早期,当公司正试图找出如何远程工作并更多地依赖电子邮件来工作时,这其实很有意思,因为这是内核社区早就想好的事情。"对我们来说,这并不感到新鲜。"

Hohndel 问 Torvalds 是否从过去几年的事件中注意到了内核开发过程中的什么变动。Torvalds 花了一点时间来介绍了通常的九到十周的内核开发周期,LWN 的读者都已经很熟悉了;目前这已经是内核 release 的标准了。这是一个平静、固定的流程,"我认为,这正是你想要的"。

但是,这种 "枯燥固化的开发过程" 并没有导致内核本身也变得拥有这些相同特征。在 core kernel 中有很多改进,"我真的很高兴看到这一点"。人们可能认为一个有 30 年历史的项目会变得很无聊,但是他一直在积极鼓励人们 "做一些令人兴奋的事情"。有新的架构正在加入,人们正在尝试新的内核开发语言,内核的核心部分正在得到根本性的改进。"内核的发展不仅仅局限在边边角角的部分上,"这是他个人最高兴看到的事情之一,"我们不是一个死的项目。"

Don't break user space

Hohndel 接着提到了最近关于内核 "不要破坏用户空间" 承诺的局限性的讨论,尤其是关于 BPF 程序的讨论。他说,越来越多的东西在内核中使用 BPF 而不是使用系统调用来实现;什么是 "你的 API 确定了,开始 crazy space " 的节点?Torvalds 说,"'crazy space' 应该都是 kernel 内部的"。

但是他不喜欢从 API 的角度来谈论这个问题,因为人们会看一个 API 的文档,并认为如果有人不按照文档里写的东西去做,那就是他们的问题,而不是内核的问题。"我觉得这完全是一种逃避,这绝对是一个糟糕的处理策略。与现实相比,文档是毫无价值的"。不过他确实指出,他的意见可能是偏颇的,因为他 "从不写文档"。

Torvalds 的规则从来都不是说不可以破坏 API,而是内核 "不能破坏人们的工作场景,你不能破坏人们的工作"。如果有人利用了内核中的一个 bug,"这个 bug 不是一个 bug,而是一个 feature"。内核将永远保持这一特性,除非出现了 "真正紧迫的问题" 需要改变它,其实几乎所有的这类需要急迫地进行修改的问题都与 Security 有关。"我们将不惜一切代价来事实上保持 bug-for-bug 的兼容性。"

[Dirk Hohndel]

Torvalds 不仅仅是一个开发者,他也是一个用户,他认为用户遇到的最恼人的问题是 "做软件升级之后自己的工作无法正常进行了"。他不能改变所有其他软件项目,那些项目一般都有不同的政策,但是他对内核的策略是 "非常严格的",希望确保程序在升级后能继续运行。如果没有达到这个效果那么 "你应该向我们尖叫"。内核在这一政策上取得了巨大的成功,他说,他希望在座的各位也能在他们的项目中推动这一政策。

不过,Hohndel 探究得更深一些。例如,BPF 程序是从用户空间加载的,内核 module 也是如此,包括那些不在 linux kernel tree 之内的 module;他问,这些部分的代码被破坏了,会不会违反政策。Torvalds 说,他不认为破坏了内核 module 的运行就是破坏了用户空间。如果内核发生变动,那些正在编写自己的 module 的人需要更新 module;kernel tree 之外维护的 module 是 "非常不被鼓励的" 做法,尽管它们作为开发道路上的一个阶段,在某些情况下确实是有意义的。他不是一个律师,所以他甚至不想关注第三方 module 何时会触犯内核的 GPL 许可的问题;"我不知道这个灰色区域何时会变成黑色。"

但是,对于 "属于用户工作流程的一部分" 的用户空间程序,不管它是使用 BPF 还是其他内核功能,一般都是由内核开发者来确保它们不被破坏,Torvalds 说。不过,有些人使用 BPF 进行底层的 tracing, 数据统计收集,或者 debug;在被按这种方式被使用时,内核的改动可能会破坏这些程序,"而我们对此无能为力"。他说,他说的是用户,"而不是那些在内核中进行深入调查的人"。

Rust

Hohndel 询问了 Rust 在内核中的地位;"我还没有实际上看到任何 patch 被合并进来"。Torvalds 说,目前的 patch 已经存在了,但它们还没有被合并。问题的一部分在于,多年来内核项目变得更加谨慎;"30 年前我们更加自由散漫"。但也有人认为,内核当前已经在规避风险上做得有些过头了。

内核中的 Rust 已经讨论了很多年,所以 "现在我们很快就会把它真正合并到内核中——也许是下一个版本"。这句话获得了热烈的掌声,但 Torvalds 很快提醒说:"对我来说,这只是一次试运行"。Rust 所提供的内存安全意味着它具有真正的技术优势。但内核在 25 年前就尝试过 C++;"我们试了两个星期,然后……我们就把它停下来了"。

对 Torvalds 来说,对于内核,"Rust 是一种尝试新东西的方式"。人们一直在努力工作,"我真的希望它能成功,否则他们会很沮丧"。但是,它将从 "非常小的" 和 "非常具体的内核领域" 开始;"我们不会全部用 Rust 重写"。一些内核开发者想做一些新的和有趣的事情;"我认为 Rust 有很多技术价值"。

但是 Rust 是一种与 C 语言大不相同的语言,所以 Hohndel 想知道对于那些可能要开始看到一种他们不知道或不熟悉的语言的代码的内核维护者来说,会有哪些挑战。Torvalds 认为 "这不是一个大问题";今天的内核中存在多种语言。例如,内核的 makefiles 是 "名副其实的 makefiles";它们是 "各种宏和其他辅助函数的乱七八糟的东西,真的很难理解"。除此之外,他还收到过含有 Perl 代码的 patch,但他 "甚至都懒的假装看得懂 Perl";事实上,他认为这是一种 write-only 的语言。但他一般相信维护者会做正确的事情。

他的长期政策是信任维护者——至少 "在他们搞砸之前"。当这种情况发生时,他有时会以一种 "过于无礼" 的方式作出回应,他对此相当抱歉。"这是我个人的失误,这句话我是认真的;有时我做得很过分"。Hohndel 建议,也许这是 "以一种可爱的方式",但 Torvalds 不同意:"我希望我可以这么说"。他说,他应该 "先发制人地向 Rust 开发者们道歉"。

他已经看到了来自内核社区的一些开发者对不熟悉 Rust 语言的担忧。他认为不熟悉它也没关系;人们不理解内核的虚拟内存(VM)子系统,尽管它是用 C 语言编写的。"语言一般不是理解代码的最大障碍"。会有 Rust 的维护者,就像今天有 VM 的维护者一样;Rust 是一个 "小的技术变化,而不是一个根本的变动"。

Hardware security woes

Hohndel 说,对各种硬件安全漏洞的修复,尤其是那些与 speculative execution 有关的漏洞,在过去多年里面一直伴随着我们。一些 "维护得非常好的架构",比如 x86 和 Arm64,都源源不断地有这类问题需要在内核中解决。然而,内核中还有很多其他的架构,他想知道为什么它们似乎没有受到这种影响。"其他的是安全的?还是它们只是没有那么好地进行维护?" "我认为这两者都有一点道理",Torvalds 说。

这类问题可以追溯到 Meltdown 和 Spectre,他说。这些问题使人们认识到,即使软件是以安全的方式编写的(这已经很难做到了),"无论如何,硬件有时真的会把事情搞砸"。内核并不是唯一受到影响的软件项目,浏览器和虚拟化的开发人员也受到了影响。当硬件不能被信任时,"你必须做很多额外的工作来修复硬件错误","这是非常令人沮丧的事情"。好消息是,目前发现的各类漏洞越来越深奥,影响的人也越来越少。

他说,受这类漏洞影响的架构主要是 x86、Arm、PowerPC 和 s390,部分原因是有更多的 Linux 系统运行在这些处理器上。但内核支持其他 15 种架构,"这些架构从未出现过这类安全问题"。有时,这是因为它们是嵌入式、in-order (顺序执行的)处理器,很少或没有进行预测处理。此外,对架构代码的 review 相对较少,在这些系统上 "去挖掘可能存在的 bug" 的人也较少。

他已经习惯了这些硬件安全问题;"我曾经对此感到非常非常沮丧"。五年后,"你对这种痛苦渐渐习以为常"。Hohndel 问道,硬件供应商是否在与内核社区合作处理和修复这些类型的错误方面做得更好。Torvalds 说,是的,确实更加好了;初期的一些痛点主要是由于内核社区和硬件供应商之间的文化冲突。

他说,通常情况下,内核安全 patch 会在七天内披露;patch 会被公开发布,尽管那时可能不会披露其影响。硬件公司希望有 12 个月的安全禁运期,这就造成了困境。他不希望必须努力记住有哪些错误因为尚未被披露因此它们不应该被公开讨论,等等。

整个过程违背了开放源代码中通常的工作方式。另一个问题是,能够修复有关 bug 的人可能是 "你不能跟他们交流" 的人。因此,必须召集一个小团队来 fix 这个 bug,不可以跟所有相关的人都交流这个事情,不可以使用常用的公共测试基础设施,等等。在发布这类 bug fix 后的两周时间里,总是在 fix 那些因为无法遵循正常的流程而被我们错过的那些细节。

在谈到我们系统的安全这一更广泛的问题时,Torvalds 强调,需要接受 bug。"bug 总会发生,如果它们不发生在硬件中,也会出现在软件中,如果它们不发生在你的软件中,它们会发生在其他人的软件中。" 其中一些 bug 将是 security bug;"试图做好安全工作的唯一方法" 是要有多层防御。

他说,内核自己就算是一层安全防御了,但它内部也有多个安全层。目前正在进行各种加固工作来期望能减少 bug 发生时的影响范围。使用了编译器在内核中插入各种检查,其中一些是开销很大的,还有一些是由各种硬件功能辅助的,比如 pointer authentication。但是,如今软件栈的所有各个 layer 的防御性编程都需要加强。Torvalds 说:"任何认为自己可以达到 100% 安全的人都生活在梦里,而不是这个现实。

Fun stuff

Hohndel 说:"我不想把这个谈话变成一个安全讲座,我想谈一些有趣的东西",在听众中引起了一些笑声。他向 Torvalds 询问了他在软件开发之外所做的事情,尽管 Torvalds 起初否认对此有任何了解:"在你面前的屏幕之外还有什么生活吗?"

他确实承认在大流行期间从事了一个硬件项目。他发现的问题是其中的动机之一。他真的喜欢 "做社交软件",虽然不是指社交网络这个含义。他喜欢在开发过程中与人交谈,当然是通过电子邮件,而不是面对面,他强调。Hohndel 笑着指出,这里面有很多注意事项。

Torvalds 说,他设计了一块电路板,上面有一个微控制器,当它从中国生产好寄回来时,工作一切正常。但在那个时候,他想 "现在该怎么办?" 这是一个有趣的学习经历,但事实证明,他真的不想去创造新的硬件。

除此之外,Torvalds 还喜欢潜水。他开始了另一个开源项目 Subsurface,用来记录他的潜水,因为潜水计算机制造商不认为 Linux 是他们软件的目标平台。Subsurface 现在由 Hohndel 维护,Hohndel 插进来感谢了他自己。

"Linux 是我的宝贝",Torvalds 说,但他发现,当他的大女儿上大学时(学计算机科学,并且"我没有逼她"),他在 CS 领域其实是因 Git 而更有名。"我只做了六个月的 Git";他将功劳归于自己,但实际上 Junio Hamano 在维护项目方面做得很好。如果使用 Git 的与会者看到 Hamano,"请他喝杯啤酒什么的"。Torvalds 说。"说到 Git,我的名字出现得太频繁了。" 就这样,主题会议的时间用完了;他们计划在 9 月的欧洲 OSSU(OSSEU)上再次登台演讲。

[我要感谢 LWN 订户支持我去奥斯汀参加 OSSNA。]

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~



浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报