• 简中
    • 繁中
  • 注册
  • 查看作者
  • 谷歌“宠爱”升级,Rust 大步跨入 Android 平台

    转载:本文来自微信公众号“InfoQ”(ID:infoqchina),作者:杏娟、万佳、王强,转载经授权发布。

    呢排,谷歌宣布 Android 开源项目(AOSP)现已支持使用 Rust 编程语言来开发 OS。呢一举动让正火嘅 Rust 语言热度再次上涨。

    要用 Rust 解决乜嘢问题?

    目前,Android 项目主要用两种语言构建。Java(以及最近出现嘅同 jvm 兼容嘅语言,如 Kotlin) 已被用于操作系统嘅上层部分,如 UI 部分;在内核、驱动程序等 OS 嘅基础层面,则通常用 C 编写,有时也会使用 C++。

    为‌更适合 OS 嘅底层编程,呢啲语言在设计时,考虑到‌可控和可预测性等特性,但系以提供对底层系统资源和硬件嘅访问。同时,佢们嘅资源需求相对轻量,但系预测性更强。

    因此,C 语言,甚至 C++,都被认为非常适用于系统级编程,因为佢们某种程度上提供‌接近底层硬件嘅功能,这系一啲高级语言都好难实现嘅。

    谷歌“宠爱”升级,Rust 大步跨入 Android 平台

    但呢种灵活性系一将双刃剑。目前,C 和 C++ 嘅内存安全问题仍然好难解决。由于没有可依赖嘅垃圾收集,睇似简单嘅内存管理,经常导致严重嘅安全问题,如缓冲区溢出等。有分析指出,内存安全漏洞占 Android 开源项目中发现嘅所有严重安全漏洞嘅 70%。

    Rust 由 Mozilla 推出,最初是被设计为 C 和 C++ 更安全嘅替代语言。虽然 Rust 并没有被广泛用于应用开发,但佢已经迅速成为最受青睐嘅系统开发语言之一。Rust 不像 C 那样依赖手动内存管理,但也缺少带有 Java 风格嘅垃圾收集器。

    谷歌方面认为,Rust 使用编译时检查(强制执行对象生命周期 / 所有权)和运行时检查(确保内存访问有效)嘅组合来提供内存安全保证。提供呢种安全性嘅同时,Rust 嘅性能表现足以匹敌 C 和 C++。

    除咗 Rust 编程语言嘅安全性能外,谷歌认为使用 Rust 也可以减少成本投入。

    据悉,目前所有 Android 进程均已沙箱化。佢们通过遵循“三选二”规则(Rule of 2)来确定功能系咪需要额外嘅隔离和特权。呢种规则好简单:畀定三个选项,开发人员只能选择以下三个选项中嘅两个。

    谷歌“宠爱”升级,Rust 大步跨入 Android 平台

    对 Android 嚟讲,这意味住如果代码是用 C/C++ 编写并解析‌不可靠嘅输入,则应将其放入一个严格受限和无特权嘅沙箱中。

    虽然呢个规则可以有效降低安全漏洞嘅严重性和暴露程度,但 IPC(进程间通信) 和额外嘅内存占用,也会使其需要嘅新进程带来额外嘅开销并引入延迟。同时,高漏洞密度会降低其有效性,让攻击者可以将多个漏洞连接喺一齐。

    像 Rust 咁样嘅内存安全语言,但系以降低代码中错误嘅密度,提高家阵时沙箱嘅效率,并且可以减少谷歌对沙箱嘅需求,从而引入更安全、更省资源嘅新特性。

    Rust 嘅核心理念是所有权。简而言之,每个值都有一个所有者。当该所有者超出范围时,该值将被删除。这限制‌基于内存嘅安全漏洞风险,同时也限制‌为确保安全而需要编写嘅代码数量。

    根据谷歌嘅分析,大多数内存错误出而家新嘅或最近修改嘅代码度,大约 50%嘅错误出现时间仲未到一年。谷歌方面认为,在内存安全语言方面,最好是专注于新开发嘅代码,而唔系重写成熟嘅 C/C++ 代码。

    谷歌“宠爱”升级,Rust 大步跨入 Android 平台

    “当然,引入一种新嘅编程语言并唔可以解决现有 C/C++ 代码中嘅错误问题。即便我哋重新分配 Android 团队中所有软件工程师嘅工作,重写几千其行代码也是不可能嘅。”谷歌表示,旧代码并唔系亟需改进嘅。

    该消息宣布后,一啲开发者表示希望可以做 NDK,但据 Android 开发者关系团队嘅一个成员透露,谷歌目前没有发布 Rust NDK 嘅计划,支持应用程序开发嘅语言将继续是 Kotlin、Java、C 和 C++。

    Rust,谷歌“新宠”

    在过去嘅 18 个月度,谷歌一直在 Android 开源项目中添加 Rust 支持,但将 Rust 扩展到更多嘅 OS 会系一个艰巨且耗时好耐嘅项目。除咗要维护一啲工具链和依赖关系,测试基础设施和工具必须同步更新,开发人员也需要接受培训。

    上年 7 月,Android 平台安全负责人 Sudhi Herle 表示,将继续在 Rust 上进行投资,睇睇边啲系统组件用 Rust 编写会更好。“我哋相信,Rust 将最终从根本上让我哋所有嘅用户都可以安全地使用呢个平台。”

    目前,Android 嘅新蓝牙堆栈重写代码“ Gabeldorsche ”已经使用 Rust 编写。Gabeldorsche 嘅研发工作始于 Android 11,但至今仍未投入使用。Android 嘅 Keystore 2.0 模块是用 Rust 编写嘅,Android 嘅 IPC 驱动程序 binder 嘅用户空间部分也是咁。

    Rust 正喺度成为谷歌“新宠”,不仅表而家 Android 开发上。

    今年 2 月,Rust Core 团队宣布‌新成立嘅 Rust 基金会,创始成员中就包括谷歌。同月,谷歌宣布同 Internet Security Research Group 合作用 Rust 语言重新实现安全组件,包括用 Rust 为 curl 开发 HTTP 和 TLS 后端,为 Apache httpd 项目开发 TLS 库。

    谷歌有望取代 Android 嘅全新操作系统 Fuchsia 嘅新网络栈也使用‌ Rust 编写。此外,ChromeOS 中使用嘅 crosvm 虚拟机监视器和驱动程序、用于支持 FIDO 安全密钥嘅固件等都喺度使用 Rust。谷歌还对 Rust 开源项目 Mercurial 嘅控制系统也作出‌贡献。

    谷歌高级软件工程师兼 Rust 核心团队成员 Manish Goregaokar 表示,谷歌选择 Rust 语言,部分原因是佢能够同第啲语言轻松集成。

    过去几个月,谷歌、Amazon、Facebook、微软以及等科技巨头正疯狂吸纳人才市场上嘅 Rust 语言程序员,各方都喺度住力筹备组建 Rust 团队。

    上年 8 月嘅一轮裁员之后,Mozilla 遣散‌约 250 名员工,其中包括不少原 Rust 团队嘅活跃开发人员,谷歌聘请‌呢轮裁员中嘅 Mozilla 前员工 Lars Bergstrom 担任工程技术总监。Goregaokar 也来自 Mozilla,他目前主要任务是构建一套国际化 Rust 库,并有意继续在该语言嘅开源项目开发中投入精力。

    开发者表示欢迎

    对于谷歌嘅呢一决定,好多开发者表示好兴奋。喺 Hacker News 上,一位开发者留言表示:

    我好高兴睇到 Rust 在越来越多嘅项目中发挥作用。我在几周前开始学习,感觉同 C++ 相比,Rust 更加简单,快速,佢有一个熟悉嘅注册表。佢适用于嵌入式、web,、Wasm、一啲快速脚本,CLIs。我嘅背景主要是 JavaScript、Dart 和 Java,但而家我好兴奋地尝试一啲更低层次嘅嘢,唯一嘅问题是我需要揾到一种方法过渡到一个好嘅 Rust 项目。

    另外,也有开发者提出‌一个疑问:在 Java/Kotlin 应用程序中添加 Rust 代码,应用程序将不断地在 Java 和本机代码之间切换,虽然可以但对性能唔系好友好。但值得庆幸嘅系,Chrome 和 Firefox 并没有完全编译成字节码,JIT 和渲染代码是用本机代码编写嘅。Mozilla 在浏览器中使用‌ Rust,这意味住至少 Android 上已经有一个相当大嘅 Rust 运行库嘎啦。

    Kotlin 和 Java 都好棒,喺呢一点上,开发者们几乎没有乜嘢分歧,但有开发者表示“Java 太沉重嘎啦,使用 Rust 会带来新体验。”随住 Rust 嘅应用越来越广,已经有开发者讨论,谷歌将来会唔会发布一个可以用来写 Rust 嘅应用程序。

    参考链接:

    链接

    cantonese.live 足跡 粵字翻譯

    2021-04-09 15:35:10

  • 0
  • 0
  • 0
  • 162
  • 请登录之后再进行评论

    登录
  • 任务
  • 发布
  • 偏好设置
  • 单栏布局 侧栏位置: