开发者试图将 Rust 代码添加到 Linux 内核时,持续面临来自内核维护者的反对。这些维护者认为使用多种编程语言是一种不受欢迎且具有风险的复杂做法。
去年 9 月,当 Microsoft 软件工程师 Wedson Almeida Filho 因为对"非技术性的无聊事务"感到不满而退出 Rust for Linux 项目时,这种担忧就已经浮出水面。这种"非技术性的无聊事务"可以理解为与持不同目标者合作的困难。
上个月,当一个允许用 Rust 编写的设备驱动程序调用主要基于 C 语言的内核核心 DMA API 的抽象提案遭到内核维护者 Christoph Hellwig 的反对时,这个问题再次激化。
具体来说,有人提交了一个补丁,允许 Rust 驱动程序使用 DMA API 的 dma_alloc_coherent() C 函数来分配和映射大内存区域,以供硬件进行直接内存访问。
Hellwig 在 Linux 内核邮件列表中写道:"请不要在 kernel/dma 中放置 Rust 代码。"尽管据我们所知,该补丁是将代码添加到 Linux 源代码树的 rust/kernel 部分,而不是 kernel/dma。
Rust for Linux 项目的 Miguel Ojeda 请 Hellwig 提出替代方案。
Hellwig 回复说:"将包装器保留在你们自己的代码中,而不是让别人的生活变得痛苦。"他进一步论述说,"DMA API 的接口应该保持在可读的 C 代码中,而不是奇怪的绑定中,这样它才能保持可搜索和可维护性。"
当被参与 Rust for Linux 项目的 Red Hat 软件工程师 Danilo Krummrich 质疑时,Hellwig 明确表示他就是不愿意处理 Rust 代码。
"不要强迫我处理你们的新潮语言,"他写道。"维护多语言项目是一件令人头疼的事,我不想处理。如果你想使用 C 以外的语言,无论是汇编还是 Rust,你都要编写 C 接口,并自己处理不匹配的问题。"
作为回应,Krummrich 解释说,Rust for Linux 工作组正在创建抽象 C API 的 Rust 代码,供所有 Rust 驱动程序使用,并由 Rust 开发者维护。换句话说,C 端保持不变,Rust 驱动程序使用对 C 代码的抽象,这些抽象由 rust/kernel 中的团队维护,这比让驱动程序拥有各自的 C 绑定要好。
但 Hellwig 似乎对单独维护 DMA Rust 抽象不感兴趣。他解释说他不想要另一个维护者:
"如果你想通过跨语言代码库使 Linux 变得无法维护,那就在你的驱动程序中这样做,这样你就必须自己处理,而不是将这种癌症扩散到核心子系统。(这里的癌症明确指的是跨语言代码库,而不是 Rust 本身,以避免引发争议。)"
技术史研究者可能记得,2001 年时任 Microsoft CEO 的 Steve Ballmer 也将 Linux 比作癌症。"Linux 是一种癌症,从知识产权的角度来说,它会附着在它接触的一切事物上,"Ballmer 说道,那时的 Linux 还没有演变成 Windows Subsystem for Linux。
Hellwig 继续论述说,让其他人将 DMA 一致性分配器的 Rust 抽象层作为单独的组件来维护并不能改善情况,反而会阻碍内核的可维护性:
"每增加一点其他语言的渗入都会大大降低内核作为一个整体项目的可维护性。Linux 之所以能存活这么久,唯一的原因是没有内部边界,而添加另一种语言完全打破了这一点。你可能不喜欢我的答案,但我会尽我所能阻止这种情况。这不是因为我讨厌 Rust。虽然它不是我最喜欢的语言,但它绝对是最好的新语言之一,我鼓励人们在合适的新项目中使用它。我不希望它出现在我需要维护的庞大 C 代码库附近。"
Ashai Linux 项目负责人 Hector Martin 表示,他认为 Hellwig 的言论违反了行为准则,但他怀疑是否会采取任何纪律处分。
Martin 认为 Rust for Linux 开发者应该忽略 Hellwig 的担忧,直接向内核负责人 Linus Torvalds 提交补丁请求批准:
"如果 Linus 不对这个讨论线程做出权威回应,Miguel 和其他 Rust 开发者应该在补丁经过审查并准备就绪后直接合并它,忽略 Christoph 公然破坏项目的企图。如果 Linus 接受这个 pull request,那么 Christoph 说什么都无关紧要。如果 Linus 不接受,那么 Rust for Linux 项目实际上就陷入停滞,直到 Linus 或 Christoph 采取行动。其他一切都是在绕圈子。"
为什么选择 Rust
Linux 内核于 2022 年 10 月 3 日添加了对 Rust 代码的支持,此前不久 Microsoft Azure CTO Mark Russinovich 曾主张新的编程项目应该使用 Rust 而不是 C 或 C++。
"为了安全和可靠性,业界应该宣布这些语言已经过时,"Russinovich 说。
他的理由是,Rust 代码可以编写得避免内存安全漏洞(如缓冲区溢出),这些漏洞困扰着 C 和 C++ 代码,并构成了大型项目中大多数严重漏洞。这一观点已经得到了世界各地政府安全组织的支持。
那些编写 C 和 C++ 代码的人已经注意到了对 Rust 日益增长的兴趣,并承认需要解决内存安全问题。因此,除了像 DARPA 的 TRACTOR 这样将 C 代码自动转换为 Rust 的项目外,还有许多项目正在进行中,如 TrapC、FilC、Mini-C 和 Safe C++,旨在使 C 和 C++ 更不容易受到内存漏洞的影响。
在 Filho 去年宣布退出 Rust for Linux 后不久,Linux 掌门人 Linus Torvalds 在维也纳 Linux 基金会开源峰会上谈到了 C 和 Rust 开发者之间的摩擦。
"很明显,有些人就是不喜欢 Rust 的概念,也不喜欢 Rust 侵入他们的领域,"Torvalds 说。"人们甚至在谈论 Rust 集成是一个失败...我们做这件事才几年,现在说这些还为时过早,但我也认为,即使它最终成为一个失败 —— 我不认为会失败 —— 这也是学习的方式。"
到目前为止,Linux 开发者社区已经认识到 Rust 并不总是受欢迎的。
好文章,需要你的鼓励
火箭实验室(Rocket Lab)宣布计划以现金加股票方式,斥资80亿美元收购主要卫星运营商铱星通信(Iridium Communications),交易预计于2027年中完成。铱星目前运营着由66颗活跃低轨卫星组成的星座网络,拥有约255万活跃用户,2024年营收达8.717亿美元。收购完成后,Rocket Lab计划借助其新型重型运载火箭Neutron及Lightning卫星平台,扩大铱星星座规模,开拓未被覆盖的市场并降低发射成本。
腾讯等机构提出ViQ框架,通过两阶段渐进量化训练,让离散视觉编码在多模态理解和图像重建上同时追平连续特征编码器,训练速度最高提升70%。
音乐流媒体平台Tidal宣布,将于7月中旬启用自动化工具,对完全由AI生成的音乐添加"AI"标识,并移除具有欺诈性质的曲目。平台还将取消AI生成音乐的版税资格,仅向真人创作、演唱的原创音乐开放变现渠道。此外,Tidal明确将高频异常上传、干扰真实艺术家等行为列为欺诈活动。Deezer、Spotify等竞争对手此前已推出类似检测机制,流媒体行业正加速构建AI内容治理体系。
香港科技大学与华为联合提出LISA训练方法,通过让副网络对齐"似然分数",将ControlNet等图像生成模型的训练收敛速度提升逾2.78倍,同时改善图像质量与条件控制精度。