开发者试图将 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 并不总是受欢迎的。
好文章,需要你的鼓励
亚马逊云服务部门与OpenAI签署了一项价值380亿美元的七年协议,为ChatGPT制造商提供数十万块英伟达图形处理单元。这标志着OpenAI从研究实验室向AI行业巨头的转型,该公司已承诺投入1.4万亿美元用于基础设施建设。对于在AI时代竞争中处于劣势的亚马逊而言,这项协议证明了其构建和运营大规模数据中心网络的能力。
Meta FAIR团队发布的CWM是首个将"世界模型"概念引入代码生成的32亿参数开源模型。与传统只学习静态代码的AI不同,CWM通过学习Python执行轨迹和Docker环境交互,真正理解代码运行过程。在SWE-bench等重要测试中表现卓越,为AI编程助手的发展开辟了新方向。
当今最大的AI数据中心耗电量相当于一座小城市。美国数据中心已占全国总电力消费的4%,预计到2028年将升至12%。电力供应已成为数据中心发展的主要制约因素。核能以其清洁、全天候供电特性成为数据中心运营商的新选择。核能项目供应链复杂,需要创新的采购模式、标准化设计、早期参与和数字化工具来确保按时交付。
卡内基梅隆大学研究团队发现AI训练中的"繁荣-崩溃"现象,揭示陈旧数据蕴含丰富信息但被传统方法错误屏蔽。他们提出M2PO方法,通过改进数据筛选策略,使模型即使用256步前的陈旧数据也能达到最新数据的训练效果,准确率最高提升11.2%,为大规模异步AI训练开辟新途径。