分享热点新闻
打造优质自媒体!

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码

Android系统作为一个完善的移动操作系统,涉及到很多组件。广义上可以分为两部分,应用生态和操作系统本身。对于开发者来说,选择的编程语言会根据正在开发的Android部分而有所不同。

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码 科学快报 第1张

Java和Kotlin是应用程序开发人员的热门选择。C和C是从事操作系统和内部底层开发人员的热门选择。今天,谷歌为操作系统开发者增加了第三个选择——Rust,因为安卓开源项目现在支持Rust编程语言来开发操作系统。

C和C限制

Android系统底层需要C、C等系统编程语言,这些语言为开发者提供了控制和可预测性,这在访问底层系统资源和硬件时非常重要。遗憾的是,C和C无法保证内存安全,容易出现错误和安全漏洞。在这些语言中,开发人员负责管理内存生存期,但是在复杂的多线程代码库中,这说起来容易做起来难。

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码 科学快报 第2张

C和C一起构成了Android平台上几千万行代码。这些内存安全漏洞已经成为最难处理的代码错误来源,约占安卓高严系统严重安全漏洞的70%。仅仅修复这些漏洞不足以解决问题。更好的方法是从一开始就防止这些bug。

由于缺乏内存安全性,开发人员被迫在一个严格受限的未授权沙盒运行Android进程。然而,沙盒的资源成本非常高,这将消耗额外的开销并引入延迟。沙盒不能完全消除代码漏洞,而且由于高bug密度,沙盒的功效会降低,进一步允许攻击者链多个漏洞。

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码 科学快报 第3张

另一个限制,虽然不是C和C独有的,但适用于所有内存安全问题,也就是说,在检测到错误状态之前,必须在检测到的代码中实际触发错误状态。因此,即使您的代码经过良好的测试,实际的bug也可能永远找不到。当发现bug时,修复是另一项任务,这涉及到一个漫长而昂贵的过程,可能无法正确修复。因此,bug检测变得不可靠,鉴于这些限制,bug预防是更好的方法。

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码 科学快报 第4张

铁锈及其优点

Rust通过结合编译时检查和运行时检查来加强对象的生存期/所有权,并确保内存访问有效,从而提供内存安全性。在实现这种安全性的同时,它还可以提供与C和C相当的性能。Rust还减少了对沙盒,的需求,为开发人员提供了更多的开销空间来引入更安全、更轻的新功能。

让安卓更安全 谷歌建议开发人员使用Rust编写系统代码 科学快报 第5张

Rust虽然确实有它的优势,但是一夜之间把整个安卓操作系统换成Rust是不可行的。而且可能完全没有必要,因为大多数Android内存错误发生在新的或者最近修改的代码中,大约50%的代码不到一年。谷歌认为其内存安全语言的工作应该集中在新的开发上,而不是重写成熟的C和C代码。

切换到Rust对Android意味着什么

Rust还注重防止bug,而不是过于依赖检测bug,从而提高代码的正确性。它有几个关键特性,比如内存安全、数据并发、更具表现力的类型系统、默认的不可变引用和变量、更安全的整数处理、标准库中更好的错误处理等等。

谷歌表示,在过去的18个月里,它一直在安卓开源项目中增加Rust支持。但是在Android平台上增加一门新的语言是一个巨大的工程。一些工具链和依赖关系需要维护,测试基础设施和工具必须更新,开发人员需要接受培训。