编辑 | 言征
出品 | 51CTO技术栈(微信号:blog51cto)
为了消除基于 C++ 的 Android 应用中的内存错误,Google 希望让开发人员能够轻松地用 Rust 编写代码。
本周一,谷歌承诺向Rust 基金会捐赠100 万美元,以改善C++和Rust编程语言之间的互操作性。
图片
根据公告,虽然该项目被称为“互操作倡议(Interop Initiative)”。谷歌Android 平台工具和库总监兼 Rust 基金会董事会主席 Lars Bergstrom 宣布了这笔拨款,并表示这笔资金将“提高 Rust 代码与现有遗留 C++ 代码库互操作的能力”。其目标本质上更加单向,即让“组织逐渐将当前的 C++ 迁移到 Rust”。
Rust基金会董事会主席兼谷歌成员总监Lars Bergstrom表示:“谷歌相信Rust等内存安全语言发挥的关键作用,以及解决各种领域内存安全问题的迫切需要。”
“我们支持Rust基金会的互操作计划,因为与C++的更大互操作性将是Rust采用的关键,并使更多组织和社区从内存安全系统中受益。”
1、C++内存安全压力空前
由于对安全性的担忧,C++ 作为流行的通用编程语言,不少企业认为它已经过时了。比如,内存安全错误是 Google 和 Microsoft 的大多数漏洞的根源,这导致了内存安全 Rust 的普及和 使用C/C++ 的红字警告。
谷歌工程、Android 安全和隐私副总裁 Dave Kleidermacher 在一份声明中表示:“根据历史漏洞密度统计数据,Rust 已主动阻止了数百个漏洞影响 Android 生态系统。” “这项投资旨在扩大 Rust 在平台各个组件中的采用。”
由于 Microsoft Azure 首席技术官Mark Russinovich等行业人士以及 CISA 总监Jen Easterly等公共部门人士的认可,更不用说 ISRG 的Prossimo等行业人士的努力,软件开发人员面临着压力,需要在合适的情况下考虑 Rust 和其他内存安全语言。
去年12月,美国网络安全和基础设施局(CISA)再次敦促:商业和技术领导人应准备在软件开发中关注内存安全,应该摒弃C++,选择Rust等内容安全的语言。
2、C++转向Rust的最大障碍:互操作性
然而,鉴于 C++ 往往用于大型、性能密集型程序,例如现代游戏和操作系统,迁移到Rust,这绝非易事。
尽管 Rust 是这样的更好的安全性和更高的开发生产力的“假定好处”,但无论是营利性的,还是其他形式的软件构建组织,在人才、工具和代码生成方面对 C++ 进行了大量投资,可能并不会那么急于转向另一种(并且有些具有挑战性的)语言来学习。
关于这一点,Rust 基金会执行董事兼首席执行官 Rebecca Rumbul 在一份声明中坦承,“尽管Rust具有很多至关重要的优势,并且越来越受欢迎和得到采用,但即使是最先进的技术组织也很难轻易转向Rust并放弃现有代码库的架构,很不现实。”
Bergstrom表示与 C++ 的互操作性是 Google 和其他组织更广泛采用 Rust 的最大障碍之一。
“这是所有组织为了加强 Rust 的实施而必须克服的最常见的障碍,”“许多现有的遗留代码库以及核心库和服务要么是用 C++ 编写的,要么只有 C++、Java、Go 或 Python 中可用的 API。如今,在有后备 C API 的情况下集成 Rust 是可能的,但对于高性能和高保真互操作性,提高直接使用 C++ 代码的能力是进一步提高采用 Rust 能力的最大举措。”
3、为了解决这一问题,都在做哪些努力?
据 MSPowerUser 报道,微软最近组建了一个团队,将更多 Rust 引入其 Office365 应用程序底层。此外,微软也宣布还要在 Windows 内核中使用更多 Rust,理由是 C++ 持续存在的安全问题。
同样,Linux 负责人 Linus Torvalds对将Rust用于主要用 C 编写的Linux 的一些核心组件持开放态度。Rust 支持甚至被写入 GNU C 编译器 (GCC) 中。
4、为什么谷歌对 Rust 如此感兴趣?
就 Google 而言,该公司似乎对使用 Rust 实现内存安全非常感兴趣。C++的天然设计,会无意中导致程序员在内存分配中犯错误,为恶意行为者侵入这些程序提供了空间(当然,C++语言本身也在思考如何解决这个问题:C++之父做决定了:内部自救!)。
“虽然 Rust 可能并不适合所有产品应用程序,但优先考虑与 C++ 的无缝互操作性将加速更广泛的社区采用,从而与提高内存安全性的行业目标保持一致,”谷歌 Android 平台工具总监Lars Bergstrom写道。
据该公司估计,Rust 的使用已经使谷歌的Android OS移动操作系统受益匪浅,它可以防止内存较少的安全语言可能出现的数百个漏洞。
5、Rust 代码应该能够轻松调用 C++ 函数
为了将 Rust 融入到以 C++ 为主的代码库中,您需要通过包装器库、直接工具和构建系统支持以及对应用程序二进制接口 (ABI) 的修改,为用 Rust 编写的功能提供与现有 C++ 库交互的简单方法。
许多工作已经完成。软件咨询公司KDAB创建了一组 Rust crate,称为cxx-qt is,这将有助于通过Qt跨平台开发框架使用 C++ 的CMake构建系统将 Rust 集成到 C++ 应用程序中。
Google 本身已经投资了Android 操作系统和 iChromium的互操作工具,包括autocxx、 bindgen、 cbindgen、 Diplomat和 crubit,
为了进一步推动 Rust 的发展,Google 还汇总并发布了 对Google 项目中使用的 Rust 箱的审核。
图片
根据 Google 的说法,Rust 已经可以通过现有的 C++ 绑定(例如 bindgen)使用许多 C++ 库。
6、Rust 开发者对 C++ 感兴趣
根据 JetBrains 的《2023 年开发者生态系统状况》,11% 的 Rust 开发者在使用 Rust 的同时使用 C++。
图片
事实上,23% 的 Rust 开发人员已经将应用程序从 C++ 迁移到 Rust,占所有从其他语言迁移应用程序而不是从新手开始的 Rust 开发人员的 35%。
图片
7、下一步计划
随着Rust基金会开始制定其互操作计划,Rust项目的许多成员已经为Rust互操作性做出了有意义的贡献,以及其他组织在这一领域所做的工作,如Rust Foundation Silver Member、KDAB与Qt的双向Rust和C++绑定。
该倡议计划由Rust 项目领导委员会起草了工作提案范围,并听取 Rust 项目领导者和“相关”Rust 基金会成员组织及其董事会的意见。
当然,计划的完成少不了人员的支持。该计划将希望聘请一些工程师来构建更多集成点,并为现有项目提供资金以继续进行。值得注意的是,该项目甚至可能会研究使用人工智能来加快进程。
具体而言,“建议可能包括雇佣一名或多名Interop Initiative工程师,并可能包括提供资源以扩大现有的互操作性工作、构建系统集成、使用人工智能进行C++到Rust的转换,或所有这些的某种组合。”
参考链接:
https://thenewstack.io/google-spends-1-million-to-make-rust-c-interoperable/
https://www.theregister.com/2023/12/07/memory_correction_five_eyes/
https://www.theregister.com/2024/02/05/google_rust_donation/