Google:Rust实战评估

近年来,Rust 已成为一种颇具争议的语言。

Google:Rust实战评估

近年来,Rust 已成为一种颇具争议的语言。一方面,美国政府机构公开呼吁放弃 C/C++ 并过渡到像 Rust 这样的内存安全语言。大型科技公司也正在拥抱 Rust,强调它能带来更安全的代码。另一方面,许多开发者产生了一种明显的“反炒作”情绪 —— 觉得 Rust 被过分吹捧,而且比大多数语言更难学。

在这种“流行却又遭怨恨”的氛围中,Google 最近在其官方网站上分享了一篇关于 Rust 在 Android 内部实际部署的博文,展示了 Rust 如何影响 Android 安全性的具体数据。

随着这一声明,关于 Rust 的争论被推向了一个新的高峰。那么让我们来看看:Google 究竟是如何在 Android 内部使用 Rust 的?

1、内存安全漏洞首次降至 20% 以下

根据 Google 最新发布的 2025 年数据,Android 中的内存安全漏洞首次降至所有漏洞的 20% 以下。

统计数据涵盖了 C、C++、Java、Kotlin 和 Rust 的第一方和第三方(包括开源)代码更新。

Google 表示,他们采用 Rust 是为了提高安全性 —— 结果超出了预期:与 Android 中现有的 C/C++ 代码相比,Rust 将内存安全漏洞密度降低了 1000 倍。

Rust 不仅提高了安全性,还显着提升了软件交付效率 —— 与 Rust 相关的回滚率降低了 4 倍,代码审查时间减少了 25%。换句话说,“更安全”现在也意味着“更高效”。

2、Rust 采用背后的现实

“构建操作系统需要像 C、C++ 和 Rust 这样的系统编程语言提供的低级控制和可预测性,”Google 说。“虽然 Java 和 Kotlin 对于 Android 开发也是必不可少的,但它们扮演着补充角色,不能取代系统语言。”

从 2021 年开始,Google 开始将 Rust 引入 Android 系统,作为 C/C++ 的更安全替代品。因此,Google 的分析侧重于“新代码或正在积极开发的代码”,这更能反映真实趋势。

观察整体系统语言使用情况(不包括 Java/Kotlin),两个趋势很明显:Rust 的使用量迅速上升,而新 C++ 代码正在缓慢下降。

Google 进一步解释说,如果你只看他们的第一方 Android 代码,新 Rust 代码的数量现在与 C++ 相当 —— 这意味着两种语言显示出相似的开发效率。

为了衡量这种转变,Google 使用了行业标准的 DORA 框架(用于评估工程绩效),重点关注两个关键指标:

  • 吞吐量:变更交付的速度
  • 稳定性:这些变更的质量

跨语言比较很棘手。Google 表示他们使用了多种方法来确保公平比较,例如:

  • 相似的变更大小:Rust 和 C++ 具有相似的功能密度,Rust 略高 —— 这偏向于有利于 C++,但仍保持比较有效。他们使用 Gerrit 对变更大小的定义。
  • 相似的开发者群体:仅分析第一方 Android 平台代码;大多数开发者是 Google 工程师,并且有很大的重叠 —— 许多工程师同时编写 Rust 和 C++。
  • 长期跟踪:随着 Rust 使用量的增长,Google 监控指标是否稳步改善、加速或回归均值。

基于此,Google 发现了以下内容:

2.1 吞吐量:Rust 审查更快,返工更少

Google 指出,代码审查是开发中的主要瓶颈,而“返工”会导致巨大的延误。

数据显示 Rust 在这方面表现更好:自 2023 年以来,Rust 代码在审查期间所需的修改比相同大小的 C++ 变更少约 20%

Rust 变更在审查中停留的时间也更少 —— 比 C++ 少大约 25%。Google 推测,从 2023 年到 2024 年的显着改善可能与 Android 团队中 Rust 熟练程度的提高有关。

然而,尽管更快的审查有所帮助,Google 表示 Rust 的真正优势在于“稳定性”。

2.2 稳定性:Rust 的回滚率低得惊人

在 DORA 指标中,回滚率是衡量代码质量的关键指标。Google 报告称,Rust 在这里明显占据主导地位:对于中型到大型变更,Rust 的回滚率大约是 C++ 的四分之一,并且随着采用范围的扩大而继续下降。

低回滚率不仅仅意味着“稳定”。

Google 解释说,回滚严重损害组织效率 —— 它们破坏工作流、减慢协作、触发重新构建、需要事故报告并阻塞其他团队。因此,Rust 的稳定性提升也增加了整体工程吞吐量。

Google 在 2022 年的一项内部调查中指出,工程师发现 Rust 代码更容易审查且更难出错。现在,数据支持了这一点。

3、扩充战场:将 Rust 带到更多组件

得益于这些结果,Google 表示,随着系统服务和库中 Rust 支持的成熟,他们正在将 Rust 扩展到更多领域:

  • 内核:Android 基于 Linux 6.12 的内核首次默认启用了 Rust,包括第一个生产级 Rust 驱动程序。Google 正在与 Arm 和 Collabora 合作开发 Rust GPU 驱动程序。
  • 固件:固件具有高权限、严格的性能限制和很少的防御措施,因此漏洞是有风险的。Google 表示 Rust 多年来一直用于固件;他们还发布了教程和示例 (https://github.com/google/aarch64-rt) 并与 Arm 在 Rusted Firmware-A 项目上合作。
  • Google 第一方应用:几个安全敏感的 Google 应用现在使用 Rust 来保证内存安全,例如:
Nearby Presence:用于安全发现附近蓝牙设备的协议,用 Rust 重写并在 Google Play 服务中运行
MLS:RCS 安全消息传递协议的 Rust 实现将在未来的 Google Messages 中发布
Chromium:多个解析器(PNG、JSON、Web Fonts)已被 Rust 实现取代

Google 强调,Rust 降低了风险,但内存安全语言只是他们多层防御策略中的一层 —— 最近这一策略再次证明了自己。

4、Android 差点遭遇了第一个 Rust 内存安全Bug

使用 Rust 并不意味着“零 Bug”。Google 透露,他们最近避免了 Android 上本来会出现的第一个 Rust 内存安全漏洞:CrabbyAVIF 中的线性缓冲区溢出。

为了确保补丁获得优先级,Google 为其分配了 CVE-2025–48530。

虽然它从未到达用户手中,但 Google 吸取了重要的教训。

4.1 Scudo:意想不到的英雄

Google 发现 Android 默认的强化分配器 Scudo 通过其“保护页”机制阻止了利用 —— 将静默损坏转换为可检测的崩溃。

然而,崩溃报告缺乏“这是由溢出引起的”,减慢了调查速度。这已得到修复,现在溢出崩溃清楚地指明了原因。

Google 补充说,虽然 Pixel 设备默认启用了 Scudo,但他们正在努力让 Scudo 对所有合作伙伴成为强制性的。与此同时,他们将继续为 Scudo 可以阻止的漏洞分配 CVE。

4.2 更好的 Unsafe Rust 培训:不能禁止它,所以教授它

Google 强调 OS 开发总是需要不安全代码 —— 无论是 C、C++ 还是 Rust 中的 unsafe{} —— 所以禁止 unsafe 是不现实的。关键是教开发者正确使用它。

Google 正在为其完整的 Rust 培训课程 添加一个全面的 unsafe 模块,涵盖诸如健全性、未定义行为、安全抽象以及如何推理不安全代码等主题。

他们相信更好的 unsafe Rust 素养将进一步提高 Android 和开源生态系统的质量。

5、漏洞密度比较:Rust 的安全差距并不小

作为回应,一些用户表示怀疑:“如果 Rust 仍然可能有内存安全漏洞,那使用 Rust 有什么意义?”

Google 的回答很直接 —— 使用 Rust 极大地降低了漏洞密度。

Google 保守估计,Android 平台目前包含约 500 万行 Rust 代码,发现了 1 个潜在的内存安全问题(并在发布前修复)。这相当于每百万行代码 (MLOC) 大约 0.2 个漏洞。

相比之下,历史数据显示 C/C++ 的密度约为每百万行 1000 个漏洞。

换句话说,Rust 带来了超过 1000 倍的减少。

Google 指出,内存安全漏洞极具破坏性(且历史上非常普遍),高缺陷密度甚至会使强大的安全设计失效,因为攻击者可以链接多个漏洞来绕过防御。因此,漏洞密度的急剧下降不仅减少了 Bug,还使整个安全架构更加健壮。

Unsafe Rust 更危险吗?

Google 的回答是 —— 不。

Google 进一步解决了围绕 unsafe Rust 的争议。一些人认为 Rust 中大约 4% 的 unsafe{} 代码可能比 C/C++ 更容易出错。但 Google 的数据表明,即使在保守假设“unsafe Rust 具有与 C/C++ 相同的 Bug 概率”下,风险仍然被大大高估了。

可能的原因包括:

  • unsafe{}禁用 Rust 的大部分安全检查(一个常见的误解)
  • 封装使推理安全性变得更容易
  • unsafe{} 块自然会受到更多审查

6、Google 不再需要在“快”和“安全”之间做选择

None

Google 表示,历史上,降低内存安全风险需要静态分析、运行时强化、沙盒、快速修补等 —— 所有这些都要付出性能或工程时间的代价。Rust 提供了一条新路径:最安全的选择也是最高效的。

Google 相信 Android 安全性将继续提高,随着 Rust 采用的增长,他们甚至可能“赚回”以前为安全而牺牲的性能和生产力。


原文链接: Using Rust, Google's Real Test: Memory Vulnerability Rate on Android Is 1000× Lower Than C/C++!

汇智网翻译整理,转载请标明出处