让Android更安全 谷歌推荐开发者使用Rust编写系统代码

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

让Android更安全 谷歌推荐开发者使用Rust编写系统代码

文章插图
对于应用开发者来说 , JAVA 和 Kotlin 是比较流行的选择;而对于从事操作系统以及内部底层的开发者来说 , C 和 C++ 是比较热门的选择 。而今天谷歌为操作系统开发者增加了第 3 个选择-- Rust , 因为 Android Open Source Project 现在支持 Rust 编程语言来开发操作系统了 。
C 和 C++ 的限制
Android 系统的底层需要 C 和 C++ 等系统编程语言 。这些语言为开发者提供了控制和可预测性 , 这在访问低级系统资源和硬件时非常重要 。不幸的是 , C 和 C++ 并不能提供内存安全保证 , 使得它们容易出现错误和安全漏洞 。开发者有责任在这些语言上管理内存寿命 , 但在复杂和多线程的代码库中 , 这说起来容易做起来难 。
让Android更安全 谷歌推荐开发者使用Rust编写系统代码

文章插图
C 和 C++ 共同构成了 Android 平台上数以千万计的代码行 。这些内存安全漏洞成为最难解决的代码错误来源 , 占 Android 高严重度安全漏洞的 70% 左右 。单纯的修复这些 bug 变得不足以处理问题 , 更好的方法是在一开始就预防这些 bug 。
由于缺乏内存安全保障 , 迫使开发者在严格约束的无权限沙盒内运行Android进程 。但沙盒在资源上的成本很高 , 会消耗额外的开销 , 并引入延迟 。沙盒也不能完全消除代码的漏洞 , 而且由于 bug 密度高 , 沙盒的功效会降低 , 进一步让攻击者连锁多个漏洞 。
让Android更安全 谷歌推荐开发者使用Rust编写系统代码

文章插图
另一个限制 , 虽然不是 C 和 C++ 独有的 , 但适用于所有的内存安全问题 , 那就是错误状态必须在工具化的代码中实际触发 , 才能被检测到 。所以即使你的代码有很好的测试 , 实际的 bug 也可能一直没有被发现 。而当发现bug时 , 让它们得到修复又是另一项任务 , 涉及到一个漫长而昂贵的过程 , 不一定能得到正确的修复 。因此 , bug 检测变得不可靠 , 鉴于这些局限性 , bug 预防是更好的方法 。
让Android更安全 谷歌推荐开发者使用Rust编写系统代码

文章插图
Rust 及其优势
Rust 通过使用编译时检查和运行时检查相结合的方式提供内存安全保证 , 以强制执行对象的寿命/所有权 , 并确保内存访问是有效的 。在实现这种安全性的同时 , 还能提供与C和C++相当的性能 。Rust 还减少了对沙盒的需求 , 让开发人员有更多的开销空间来引入更安全、更轻量的新功能 。
让Android更安全 谷歌推荐开发者使用Rust编写系统代码

文章插图
虽然 Rust 确实有它的好处 , 但一夜之间将整个Android操作系统换成Rust是不可行的 。而且可能根本不需要这样做 , 因为大多数 Android 的内存错误都发生在新的或最近修改的代码中 , 大约有50%的代码是不到一年的 。谷歌认为 , 其内存安全语言的工作最好集中在新的开发上 , 而不是重写成熟的C和C++代码 。
切换到 Rust 对于Android 意味着什么
Rust还专注于防止bug , 而不是严重依赖检测bug , 从而提高代码的正确性 。它有几个关键特性 , 比如内存安全、数据并发、更有表现力的类型系统、默认的不可变引用和变量、更安全的整数处理、标准库中更好的错误处理等等 。
google表示 , 在过去的18个月里 , 它一直在为Android开源项目添加Rust支持 。但在Android平台上添加一门新语言是一项巨大的工程 。一些工具链和依赖关系需要维护 , 测试基础设施和工具必须更新 , 开发人员需要接受培训 。

【让Android更安全 谷歌推荐开发者使用Rust编写系统代码】


    推荐阅读