Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

机器之心编辑部报道

C和C++不安全?谷歌宣布Android加入对Rust语言支持

Rust 越来越流行,开始跨入 Android 领域。谷歌宣布 AOSP (Android Open Source Project) 现已支持使用 Rust 开发 Android 操作系统。


图片


Android 系统涉及很多组件,开发者会根据正在开发的 Android 部分而选择不同的编程语言。对于应用开发者来说,Java 和 Kotlin 是比较流行的选择;而对于从事操作系统以及内部底层的开发人员来说,C 和 C++ 是比较好的选择。

近日,谷歌为操作系统开发者增加了第 3 个选择 Rust。谷歌发布博客称 AOSP (Android Open Source Project) 现已支持使用 Rust 开发 Android 操作系统

图片


内存安全 bug

C 和 C++ 中的内存安全 bug 是最难解决的错误源。谷歌已经投入了大量的精力和资源来检测、修复和缓解这类 bug,并有效地防止了大量 bug 进入 Android 版本。然而,尽管做出了这些努力,内存安全 bug 仍然是稳定性问题的主要原因,它在 Android 严重安全漏洞中长期占据大约 70% 的比例。

对于这些内存安全问题,谷歌表示除了优化内存错误检测机制外,最有效的解决办法是采用内存安全语言。Java 和 Kotlin 等托管语言是 Android 应用开发的最佳选择。这些语言专为易于使用、可移植性和安全性而设计,它们是开发 Android 应用的最佳选择。Android OS 广泛使用 Java 语言,从而有效地保护了大部分 Android 平台不受内存 bug 的影响。但对于操作系统的底层而言,不能选择 Kotlin 和 Java。

图片


较低层级的 OS 需要系统编程语言,如 C、C++ 和 Rust。这些语言设计时考虑到了可控和可预测性的目标。它们提供对低级系统资源和硬件的访问,资源较少,并具有更可预测的性能特征。

对于 C 和 C++,开发人员负责管理内存生存期。遗憾的是,这样做很容易出错,特别是在复杂的多线程代码库中。

Rust 使用编译时检查(强制执行对象生命周期 / 所有权)和运行时检查(确保内存访问有效)的组合来提供内存安全保证。提供这种安全性的同时,Rust 的性能表现足以媲美 C 和 C++。

大约 50% 的错误发生在一年之内

谷歌表示,用 Rust 重写数千万行的 C 和 c++ Android 代码根本不可行,而重写旧的 Android 不会有太大影响,因为到目前为止旧代码已经清除了大部分 bug。由于 Android 源代码是一个拥有数十亿用户的开源项目,很多人都在关注它。大部分内存 bug 都发生在新的或最近修改过的代码中,大约 50% 的错误发生在不到一年的时间里。必要时,Rust 将用于新组件,这将有助于减少谷歌可能引入的新内存 bug。

图片

Android 内存 bug 图表。旧代码有很多 bug,现在已经修复了。

比较罕见的旧内存 bug 可能会让人感到惊讶,但谷歌表示旧代码并不是最迫切需要改进的地方。随着时间的推移,软件 bug 会被逐渐发现和修复,因此我们可以预期还在维护但未处于活跃开发状态的代码中的错误量会逐渐减少。

无论如何,向 Android 平台添加新的开发语言支持是一项大工程。谷歌表示:「在过去的 18 个月里,我们一直在为 Android 开源项目添加 Rust 支持,在接下来的几个月里,我们将分享一些早期采用 Rust 的项目。将 Rust 扩展到更多的 OS 是一个长期项目。」

参考链接:
https://arstechnica.com/gadgets/2021/04/google-is-now-writing-low-level-android-code-in-rust/
https://security.googleblog.com/2021/04/rust-in-android-platform.html
https://www.oschina.net/news/136467/rust-in-android-platform
https://www.cnbeta.com/articles/tech/1111455.htm
产业AndroidRust谷歌
相关数据
操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

推荐文章
暂无评论
暂无评论~