2021 年 4 月 7 日,zdnet 发布文章:Android 平台基础支持转向 Rust。2021 年 4 月 6 日,谷歌宣布,Rust 可以在 Android 开源项目内部使用。
为了减少内存安全漏洞,谷歌宣布开源项目 Android 平台,将支持内置 Rust。
虽然 Android 平台上的应用程序可以用 java 和 Kotlin 等受监管的/托管类语言编写,但这些语言没有用于构建 Android 操作系统的低级语言(如 C/C )的“控制和可预测性”。
它们的资源较少,而且具有更可预测的性能特征。对于 C/C ,开发人员负责管理内存生命周期。不幸的是,这样做很容易出错,特别是在复杂和多线程的代码库中。
Rust 使用编译时检查,来强制执行对象生命周期/所有权,并通过运行时检查来确保内存访问的有效性,从而提供内存安全保证。这种安全性,是其在提供与 C/C 相同性能的同时实现的。
由于目前在 Android 系统中,如果用 C/C 编写的进程处理不可信任的输入,那么它运行在沙箱中。google 说这是昂贵的,并且仍然允许攻击者链接安全漏洞。
此外,google 发现一半的内存 bug 来自一年内的新代码,因此将 Rust 对准新代码是有意义的,而不是用 Rust 重写操作系统。
“即使我们重新调整了 Android 团队中每个软件工程师的工作方向,重写数千万行代码也根本不可行的”,Android 团队说。
“比较罕见的是,老旧的历史 bug,其内存错误可能会让一些人感到惊讶,但我们发现旧代码并不是我们最迫切需要改进的地方。随着时间的推移,软件缺陷会被发现并修复,因此我们预计,正在维护但未积极开发的代码中,其缺陷数量会随着时间的推移而减少。”
Rust 开发的 gabeldorsche 项目正在进行,它被誉为蓝牙的继承者。
Android 团队还谈到了试图检测和复制内存缺陷,以修复它们的问题。
“对于复杂的 C/C 代码库,通常只有少数人能够开发和检查修复,即使花费大量的精力去修复 bug,有时修复后也不完全正确。”他们写道。
“当缺陷相对罕见时,缺陷检测是最有效的,危险的缺陷可以被赋予必要的紧迫性和优先性。我们要想从缺陷检测的改进中获益,就必须优先防止引入新的缺陷。”
谷歌表示,使用 Rust 的好处之一是语言中固有的附加约束和检查,例如强制初始化变量,这可以防止 Android 中高达 5% 的安全漏洞。
为 Android 平台添加一种新的语言,是一项艰巨的任务。有需要维护的工具链和依赖项,必须更新的测试基础设施和工具,以及需要培训的开发人员。
“在过去的 18 个月里,我们一直在为 Android 开源项目添加 Rust 支持。我们有几个采用 Rust 的早期项目,我们将在未来几个月内分享这些项目。”
今年早些时候,Rust 从 Mozilla 转移到了自己的 Rust 基金会。Mozilla 使用了 Rust 来构建其浏览器引擎,目前,已经使用 85000 行 Rust 代码替换了 160000 行 C/C 代码。
Mozilla 最近在 Firefox 上运行线程清理器,以清除浏览器代码库中存在的任何数据竞争,这些问题是由 C/C 语言开发的。
总体来说,Rust 似乎正在实现其最初的设计目标之一:允许我们安全地编写更多并发代码。
谢谢您的阅读!
原文链接:Rust support moves into Android underpinnings