在过去几年里,科技巨头如谷歌和微软一直公开强调内存安全漏洞带来的问题,并积极推广使用除C和C++之外的其他不需要手动管理内存的语言。这种倡导不仅在私营部门产生了影响,也引起了公共部门的关注,后者拥有大量的遗留代码。
白宫和美国网络安全与基础设施安全局(CISA)因此鼓励采用内存安全的编程语言,主要提倡的是Rust,同时也包括C#、Go、Java、Python和Swift等语言。
尽管如此,C和C++的维护者们提出了异议,他们认为只要严格遵循ISO标准,并充分利用现有的测试工具,就能达到与Rust相似的安全水平,而不必彻底重写所有代码。
然而,DARPA对此的看法似乎表明了对C和C++的态度已经转变。
Rust语言在2015年首次稳定发布,比C语言出现晚了四十多年,它内置了内存安全性,并且也适合用于低级、性能敏感的系统编程。
Rust语言自2015年首次稳定发布以来,虽然比C语言晚了四十多年,但它内置了内存安全性,并且非常适合用于低级别的、性能敏感的系统编程任务。
Rust语言的特性及其日益增长的受欢迎程度催生了诸如Prossimo这样的倡议。这是一个由非营利组织Internet Security Research Group发起的项目,旨在通过用Rust重写关键库和代码来减少安全风险,其中包括网络时间协议(NTP)守护进程(ntpd-rs)。
Prossimo项目的执行董事Josh Aas表示:“鉴于互联网基础设施中运行着大量C代码,使用翻译工具变得极具吸引力。”
Aas还提到:“我们已经在这一领域进行了实验,例如最近我们将基于C的AV1实现翻译为Rust。目前的翻译工具仍然需要大量的人工干预以确保翻译结果的正确性和符合Rust的习惯性编程风格,但我们希望随着进一步的投资,这些工具将变得更加高效。”
Code Metal公司的首席执行官Peter Morales则认为DARPA的TRACTOR项目既具有前景又恰逢其时。Code Metal是一家专注于为边缘硬件转译代码的公司,最近刚筹集了1650万美元。
“我认为TRACTOR项目在实现上非常可行,我相信它将在网络安全领域产生重大影响,因为内存安全已成为该领域的重要议题之一。”Morales说道。
当被问及是否同意DARPA所说的软件社区已经就解决内存安全问题达成共识时,Morales并未完全否定C和C++的价值。
谈及自动代码转换的挑战,Morales表示:“这确实是一个DARPA级别的难题。”在尝试为不同语言之间的语句转换制定规则时,面临的各种特殊情况数量之多令人望而却步。
TRACTOR项目的负责人Wallach强调,他们的目标是实现高度自动化,但这需要克服一系列复杂的技术挑战。
“例如,大型语言模型在被要求翻译代码时有时能给出惊人的答案,但有时也会产生错误的答案,”他解释道。“另一个挑战在于,C语言允许代码对指针执行操作,包括算术运算,而Rust则禁止这类操作。要跨越这个差距,需要的远不止是简单的逐字翻译。”
当被问及DARPA是否有特定的代码库打算进行转换时,Wallach回答说:“我们的目标是对整个庞大的开源代码世界,以及国防工业基础中使用的代码进行转换。虽然我没有具体的计划,但像Linux内核这样的项目由于存在技术上的限制,目前不适合使用Rust。”
Reddit技术论坛上,有开发者直言他对此事的感受“十分复杂”。
“一方面,我看到了在关键系统中确保内存安全的必要性。另一方面……依靠GPT生成的代码来进行转换?真的吗?那些出于安全原因应该转向Rust的系统,似乎是不应该使用任何AI生成代码的那种系统。”
不少人对此有同感。他们认可在关键系统中确保内存安全的重要性,也不否认这的确是Rust的主要卖点。但是,他们对于依赖AI(如GPT)生成的代码来实现这种转换持保留意见。毕竟AI生成的代码可能存在不确定性,总是让人难以完全信任,在这一前提下让其满足关键系统的安全性要求是非常矛盾的。
还有人给出了更为辛辣戏谑的评论:“当一切都变得一团糟时,就是Rust开发者们大赚特赚的时候。”当那些本不适合被转换到新语言(如 Rust)的旧代码或系统被强行要求转换时,当盲目地使用AI来转转换旧代码时,可能会产生更多的问题而不是解决问题。
这些来自民间的声音也印证了Stack Overflow不久前发布的2024年开发者调查数据。尽管美国政府不断呼吁减少对C和C++的依赖,但编程语言的受欢迎程度几乎没有变化。调查结果显示,Rust的使用率从13.5%下降到了12.6%,而C和C++的使用率略有增长。目前没有迹象表明会有大规模从C或C++向其他语言的迁移。
END