Linux 版 Rust 陷入困境,紧张局势和分歧已初显端倪 

Rust 在 Linux 上的问题

看起来今年不会是 Linux 之年,因为尽管去年最后一个季度看起来 Linux 和桌面将在 2025 年腾飞,但事情并不总是像表面看起来的那样。

就在几天前,Linux 内核中 DMA、KVM、Slab Allocator 和 PowerPC 等关键子系统维护方面的杰出人物 Christoph Hellwig明确表示,他拒绝支持有助于用Rust 开发驱动程序的补丁。

Christoph Hellwig提到,相关补丁方案建议在 DMA 子系统的函数周围添加包装器,以便用 Rust 编写的驱动程序能够使用它。然而,他认为这种策略会使代码维护变得复杂,并且应该保持 C 接口的清晰性,避免扩展抽象层,以免阻碍与内核其他部分的集成。

项目中混合使用语言的问题

Hellwig认为,主要问题在于Rust代码集成会产生依赖关系,迫使C子系统的开发者考虑其修改对Rust链接代码的影响。这意味着对C内部结构或函数的任何调整都可能需要对Rust代码进行相应的修改,从而导致长期维护困难。

为了避免这种情况,Hellwig建议 Rust 中的驱动程序直接访问 C 中的原生 DMA API,而不是使用额外的封装器,他认为这样做会损害内核的可维护性。

提出补丁的开发者们辩称,他们会维护Rust代码,为此,他们将链接整理到了一个特定的子目录(rust/kernel/dma.rs)中。然而, Hellwig 否决了这些提案,并警告说他没有义务承担将其他语言的代码集成到核心子系统中的责任。

此外,他强烈建议,如果要将内核转变为多种语言的混合体,则应该从 Rust 的驱动程序开始,而不是在基础领域强加这种复杂性。

当 NVIDIA 的 TPM、VFIO 和 Infiniband 维护者 Jason Gunthorpe 等人分享了一些案例,说明对内存子系统的修改虽然从 C 代码的角度来看是正确的,但在尝试使用 Rust 支持编译内核时却会导致问题时,争议进一步加剧。这些案例表明,C 和 Rust 之间的联系可能会引入额外的依赖关系,从而阻碍协同开发。

值得一提的是,讨论并非仅限于技术层面。Héctor Martín 建议,解决方案可能是直接通过 Linus Torvalds 来获取链接,绕过 DMA 子系统维护者。然而,这种方法可能会扰乱内核开发传统的层级结构。

Hector 还指出了一些他认为有害的行为,甚至提到 Hellwig 将 Rust 比作“癌性肿瘤”的批评加剧了他的沮丧,并最终导致他决定辞去主内核中 ARM/Apple 平台维护者的职务。尽管他已辞职,但该平台仍将继续由 Sven Peter 维护,他承诺会继续负责该平台的维护工作。

Linus Torvalds也加入了讨论,他强调内核开发流程虽然并不完美,但目前运行良好,技术讨论应该专注于补丁,而不应受到外部压力或社交媒体骚扰的影响。Torvalds认为,讨论的重点应该完全是技术性的,应该将个人恩怨抛诸脑后。

Christoph Hellwig 拒绝将 Rust 包装器合并到 DMA 子系统中,凸显了 Linux 内核开发人员之间的紧张关系。虽然有些人将 Rust 视为创建新项目的强大工具,但其他人担心集成多种语言可能会妨碍可维护性和代码库一致性。

这种情况仍存在争议,并可能对内核未来对 Rust 的支持产生重大影响。无论如何,显而易见的是,Linux 开发社区持续面临复杂的挑战,必须谨慎考虑技术决策,以确保项目的长期可持续发展。


在 Google 中将其添加为首选来源