Canonical 联合英研创署资助三年博士项目,用双技术将 C 代码转 Rust
项目目标项目目标是构建一个能把 C 代码仓库转换为行为正确、易于维护的 Rust 代码的平台。Rust 在 Ubuntu 中的作用及挑战Rust 预计会在 Ubuntu 未来发展中起到重要作用。它是一种能让程序员更好控制资源使用和性能还能解决诸多内存安全问题的编程语言尤其适合构建对安全性要求高的软件。不过对目前支撑 Linux 操作系统的大量遗留 C 代码进行现代化改造一直且仍将是重大挑战。项目背景与原因Canonical 工程副总裁乔恩·西格Jon Seager周三在博客文章中写道长期以来代码重写成本高、风险大还往往没明显改进。成熟代码库通常有多年的 bug 修复、兼容性决策、运维知识和来之不易的性能优化。若想让更多系统软件从内存安全中受益就需更好的方法降低迁移成本和风险。项目情况为此Canonical 与英国研究与创新署UK Research and Innovation合作资助了一个为期三年的博士项目要创建能将数十万行 C 代码转换为 Rust 代码的平台。该项目由王猛Meng Wang教授牵头西格和克里斯蒂娜·大卫Cristina David博士担任博士生亚历克斯·伍德Alex Wood的联合导师。传统工具与大语言模型的局限西格表示这件事没听起来那么简单。传统源到源翻译工具能处理大量代码但常刻板地保留 C 语言结构。转换后的代码虽能用 Rust 编译但仍严重依赖不安全操作保留了生硬的 C 语言惯用法还需大量人工处理才能被 Rust 代码维护者接手。另一方面西格称大语言模型LLM能生成“令人信服、符合习惯用法的 Rust 代码”但处理“代码仓库级别的上下文”有困难。他还说看起来合理的输出不能证明转换后的程序与原程序行为一致。系统架构所以该项目会结合机器学习和传统程序分析这两种技术构建系统。其提议的架构有四个部分调度模块把代码仓库拆分成含足够上下文的代码块让翻译机制理解类型、依赖关系和行为用针对已知 C 到 Rust 转换库训练的模型进行翻译验证模块检查转换后的代码是否与原 C 代码行为一致调试和修复模块分析并纠正问题。对语言模型的看法西格写道语言模型只是系统一部分在有证据表明生成的代码能保持预期行为前都应视为不可信的。案例研究对象Ubuntu 的两个安全组件 AppArmor 和 snap - confine 将作为案例研究对象。西格指出这并非承诺用转换后的代码取代它们而是对这些软件感兴趣渴望看到研究结果。项目理想结果西格表示该项目“最理想的结果”是打造一个系统能将大量 C 代码仓库转换为 Rust 代码且有充分证据表明转换后的代码与原代码行为一致只需相对较少的人工干预。这项研究还可能产生更好的代码仓库分解方法、更强大的验证技术、可复用的翻译数据集、改进的程序修复工具以及更精准地了解自动迁移在哪些情况下会变得不可靠。