找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3224

积分

0

好友

431

主题
发表于 2 小时前 | 查看: 3| 回复: 0

Linux内核Rust与C之争的抽象概念图

长久以来,Linux 内核的基石一直是 C 语言。但随着 Rust 作为一种强调内存安全的新兴语言被引入内核,一场关于编程语言的“战火”已从外围蔓延至这个全球主流开源操作系统的核心地带,并将原有的内核维护者与 Rust 开发者推向了前所未有的对立面。

在一些 Rust 拥护者看来,Rust 是安全未来的象征,引入内核能显著提升系统安全。然而,部分 Linux 内核的核心维护者却持有截然不同的观点,他们担忧多语言混用将令这个庞大项目的维护雪上加霜,甚至有人直言——内核中 C 与 Rust 的混合代码库本身就是一种“癌症”。

这场激烈的争论最终导致了 Linux 之父 Linus Torvalds 的出面回应,以及一位核心开发者的愤然离职。

一场由DMA抽象层引发的“战争”

其实,Rust for Linux(R4L)项目的推进已有数年。此前在 Linux 6.13 内核中,已初步合并了对 Rust 编写 misc 驱动程序的支持。不过,项目推进并非一帆风顺,去年 9 月,项目核心维护者之一 Wedson Almeida Filho 就因“疲于应对越来越多与技术无关的废话”而宣布退出。

Wedson Almeida Filho宣布退出项目的邮件截图

而最近这场更为激烈的冲突,则源于一个具体的技术提案:让用 Rust 编写的设备驱动能够方便地调用 Linux 内核中用 C 语言实现的关键功能——直接内存访问(DMA)。

简单来说,DMA 允许网卡、显卡等硬件设备直接读写内存,无需CPU频繁干预。内核提供了一套 DMA API,其中 dma_alloc_coherent() 函数负责分配并映射一块设备可直接访问的连续内存。

有开发者提交了补丁,旨在为 Rust 驱动程序创建对应的抽象层,使其能调用这一 C API,从而高效处理设备与内存的数据传输。

新增Rust DMA抽象层的代码diff截图

然而,这个提议遭到了 Linux 内核 DMA 子系统维护者 Christoph Hellwig 的强硬反对。 他明确表示:“请不要在内核的 DMA 部分加入 Rust 代码。”

Christoph Hellwig反对加入Rust代码的邮件截图

值得注意的是,该补丁并未直接修改内核的 kernel/dma C 代码,而是将 Rust 抽象层添加到了独立的 rust/kernel/ 目录下。R4L 项目首席开发者 Miguel Ojeda 随后请求 Hellwig 提出替代方案。

Hellwig 的回应是:“把包装器放在你们自己的代码里,而不是让别人为你们的事情受苦。” 当被 Red Hat 工程师 Danilo Krummrich 追问“自己的代码”是否意味着每个驱动都要重复实现时,Hellwig 进一步解释:

“DMA API 的接口应该保持在可读的 C 代码中,而不是用奇怪的绑定,这样才能保持可 grep 搜索和易于维护。”

关于DMA API接口语言选择的邮件讨论截图

他更直白地表示,自己不愿处理 Rust 代码:“不要强迫我处理你们这门时髦的语言。维护多语言的项目很痛苦,我没有兴趣去处理。”

Danilo Krummrich 澄清道,并未要求 Hellwig 维护这段 Rust 代码。R4L 项目创建的是由 Rust 开发者维护的抽象层,供所有 Rust 驱动使用,这比每个驱动各自编写 C 绑定要更优。但 Hellwig 似乎连在源代码树中单独维护 Rust DMA 抽象层也不同意,并抛出了引发轩然大波的言论:

“如果你们想让 Linux 因为跨语言的代码库变得无法维护,那就让你们的驱动自己去做吧,而不是把这种‘癌症’传播到核心子系统中。(这里说的‘癌症’显然是指跨语言的代码库,而不是 Rust 本身,只是为了避免被激起争议)”

Christoph Hellwig发表“癌症”言论的邮件截图

“癌症”一词瞬间点燃了社区的情绪,让人联想起多年前微软前CEO对 Linux 的类似指责。Hellwig 继续阐述他的观点:每引入一种新语言都会严重损害内核作为整体项目的可维护性。

“Linux 之所以能生存这么久,是因为它没有内部边界,而引入另一种语言完全破坏了这一点……我只是不希望它出现在我需要维护的大型 C 语言代码库中。”

请求Linus“站队”与出乎意料的回应

几轮辩论后,Danilo Krummrich 和 Asahi Linux 项目负责人 Hector Martin 认为,Hellwig 作为维护者,其行为已超出权限,是在凭个人喜好限制对公共内核 API 的使用。他们将争议升级,请求 Linus Torvalds 出面裁决。

Hector Martin 在邮件中写道:如果 Linus 不给出权威答案,Rust 开发者就应该在评审完成后直接合并该系列补丁,无视 Hellwig 的破坏行为。他呼吁 Rust 开发者不要被这种“戏剧性”事情消耗,并认为“癌症”言论已违反行为准则。

Hector Martin呼吁Linus介入并批评“癌症”言论的邮件截图

这封邮件将 Linus 置于必须做出选择的境地。然而,Linus 的回应并非对技术方案的表态,而是针对 Martin 所倡导的“社交媒体羞辱”方式的严厉批评。

他极为克制但立场鲜明地回复道:

“你能不能接受一个事实,也许问题出在你自己身上?……不过,我必须说,社交媒体的‘围攻’让我根本不想再和你们的做法有任何关系。 因为如果我们在内核开发模式中有问题,那么社交媒体绝对不是解决方案……技术补丁和讨论才是关键。社交媒体围攻——谢谢,但不需要。”

Linus Torvalds回击社交媒体舆论战的邮件截图

核心开发者愤然辞职,项目前景蒙上阴影

Linus 的回复没有解决技术分歧,反而彻底浇灭了 Hector Martin 的热情。在收到回复后,Martin 愤而宣布辞去上游 Linux 内核中 Apple Silicon 代码的维护者职务。

他在提交的补丁中写道:“我已经不再对内核开发过程或社区管理方式抱有任何信心。Apple/ARM 平台的开发将继续在下游进行。”

Hector Martin辞去维护者职务的邮件补丁截图

这意味着,Asahi Linux(致力于将 Linux 移植到 Apple Silicon Mac 的项目)的领导者可能不再积极推动代码进入上游内核。尽管共同维护者 Sven Peter 表示会想办法继续推进,但这场风波无疑给 Apple Silicon 的 Linux 支持带来了不确定性。

争论仍在继续,未来何去何从?

社区的动荡势必影响技术发展的稳定性。自2022年尝试整合以来,Rust 在 Linux 内核中仍处于辅助地位,主体依然是 C 代码。C 与 Rust 开发者之间的摩擦,Linus 本人早有预见。

他曾在公开场合表示,有些人就是不喜欢 Rust 侵入他们的领域,但断言 Rust 整合失败为时过早。他强调,目前内核功能并不依赖 Rust,重要的是向前推进,“全速前进”,待用户开始依赖 Rust 代码时再处理细节问题。

然而在此次事件中,Linus 拒绝在技术立场上明确表态,转而批评沟通方式,这让部分社区成员感到失望。有观点认为,Linus 在 Rust 问题上的模棱两可,与其一贯的果断风格相悖,这种犹豫反而加剧了社区的撕裂。作为试点项目,R4L 经过多年开发仍前途未卜,领导者未能促成共识,而是坐视内部争斗,最后将责任归咎于呼吁解决问题的一方,这一处理方式引发了关于领导力的质疑。

归根结底,这场争论超越了单纯的技术优劣,触及了大型开源项目如何平衡创新与稳定、如何管理技术栈演进以及社区沟通规则的深层议题。对于关心此事的开发者而言,在 云栈社区 等技术论坛中,类似的讨论仍在继续。Linux 内核中 C 与 Rust 的共融之路,注定不会平坦。




上一篇:消息表从9千万到60亿:分层分表方案与无停机迁移实战
下一篇:交互设计策略详解:何时应该为用户添加一步确认操作?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-15 05:41 , Processed in 0.790326 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表