Google宣布android开源项目现在支持rust用于开发OS本身,提供比C和C ++更多的内存安全保证

2021-04-07 04:15:31

Android作为完整的操作系统解决方案涉及大量的活动部件。非常广泛地说,这些部分是应用生态系统,然后是OS本身。作为开发人员,您的编程语言的选择语言因您正在处理的Android的哪个部分而异。对于应用程序开发人员,Java和Kotlin是流行的选择。对于在OS上工作的开发人员以及其中的较低级别,C和C ++到目前为止是流行的选择。如今,Google正在为OS开发人员添加第三个选项,因为Android开源项目现在支持用于开发OS本身的生锈编程语言。

较低级别的Android OS需要像C和C ++这样的系统编程语言。这些语言为具有控制和可预测性的开发人员提供了控制和可预测性,这在访问低级系统资源和硬件时非常重要。

不幸的是,C和C ++无法提供内存安全保证,使其容易发生错误和安全漏洞。开发人员负责管理这些语言的内存生存期,但在复杂和多线程的码条上,这比完成更容易。

C和C ++共同构成了Android平台上的数百万个代码。这些内存安全错误成为代码的最困难的错误源,代表〜70%的Android的高度严重性安全漏洞。仅修复这些错误不足以处理这个问题,更好的方法是在第一位置防止它们。

缺乏内存安全保障开发人员在严格限制和未经特势率的沙箱中运行Android进程。但沙箱对资源昂贵,消耗额外的开销并引入延迟。沙盒也不会完全消除代码的漏洞,由于高虫密度,它的功效降低,进一步允许攻击者将多种漏洞连锁。

另一个限制,但对于C和C ++而不是唯一的限制,但适用于所有内存安全问题,是必须在仪表代码中实际触发错误状态,以便检测到。因此,即使您的代码具有出色的测试,实际错误也可能保持未被发现。当发现错误时,让它们修复是另一个任务,涉及长期且昂贵的过程,可能不会总是导致正确的修复。因此,错误检测变得不可靠,并且错误预防是鉴于这些限制的更好方法。

这是切换到像生锈等内存安全语言的地方。

Rust通过使用编译时检查的组合来提供内存安全保证,以强制执行对象生命周期/所有权,以及运行时检查以确保内存访问有效。在为C和C ++提供等效性能的同时实现了这种安全性。 Rust还减少了对沙箱的需求,允许开发人员更多的开销室来引入更安全和更轻松的新功能。

虽然Rust确实具有其优势,但在一夜之间切换整个Android操作系统是不可行的。并且可能甚至不需要,因为大多数Android的内存错误发生在新的或最近修改的代码中,大约有50%的时间不到一年。谷歌认为,其内存安全的语言努力最为关注新的发展而不是重写成熟的C和C ++代码。

Rust还侧重于防止虫子而不是倾向于重视错误,从而提高了代码的正确性。它有几个关键功能,例如内存安全,数据并发,更具表现力类型的系统,不可变的引用和变量默认,更安全整数处理,在标准库中更好地处理,以及更多。

谷歌表示,它一直在过去18个月内向Android开源项目添加了RUDE支持。但为Android平台添加新语言是一个巨大的事业。需要维护某些工具链和依赖项,必须更新测试基础架构和工具,并且需要培训开发人员。

谷歌拥有一些早期采用项目,他们将在未来几个月分享。但即便如此,它正在明确的是,对更多操作系统的缩放生锈支持是一个多年的项目。

从我们所看到的,谷歌已经在几个地方使用了生锈。 Android的新蓝牙堆栈重写代码名为“gabeldorsche”正在锈写。在Android 11的时间围绕Gabeldorsche开始工作,但仍未使用。 Android的KeyStore 2.0模块是用Rust编写的,因此Binder的用户空间部分是Android的IPC驱动程序。虽然与Android无关,紫红色的新Netstack也正在锈蚀。

对于应用程序开发人员来说,交换机没有任何关于如何作为应用程序开发人员,编写应用程序或框架API工作方式的问题。此交换机仅影响操作系统的写入方式。根据Android开发人员关系团队的成员,谷歌也不打算此刻释放生锈NDK。支持的应用程序开发语言将继续成为Kotlin,Java,C和C ++。