速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

谷歌“新宠” Rust

  • 2021-04-09
  • 本文字数:2654 字

    阅读完需:约 9 分钟

谷歌“新宠” Rust

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

 

要用 Rust 解决什么问题?

 

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

 

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

 

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


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

 

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

 

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

 

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

 

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



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

 

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

 

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

 

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

 

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


 “当然,引入一种新的编程语言并不能解决现有 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 的应用程序。

 

参考链接:

 

https://security.googleblog.com/2021/04/rust-in-android-platform.html

2021-04-09 15:566142

评论

发布
暂无评论
发现更多内容

这篇 python 文章,是过去你错过的 python 细节知识点,滚雪球第4季第15篇

梦想橡皮擦

10月月更

Apache APISIX 社区周报 | 2021 9.13-9.30

API7.ai 技术团队

开源社区 api 网关 社区周报 Apache APISIX

阿里大牛珍藏版:高并发系统设计(全彩版手册)带你从基础走向实战

Java 架构 面试 后端 高并发

新书榜第一的《图解产品》,帮助内卷中的产品经理实现跨越式发展!

博文视点Broadview

iOS签名校验那些事儿

百度Geek说

后端

秀到飞起!Alibaba全新出品JDK源码学习指南(终极版)限时开源

收到请回复

Java jdk 面试

第六届世界智能大会主题征集活动入选主题公布

InfoQ 天津

腾讯云,五轮面试,六个小时,灵魂拷问,含泪拿下 60W offer

收到请回复

Java 面试 大厂Offer

云小课丨SA基线检查:给云服务来一次全面“体检”

华为云开发者联盟

态势感知 华为云 基线检查 SA 上云合规

☕【Java技术指南】「技术盲区」看看线程以及线程池的异常处理机制都有哪些?

洛神灬殇

Java 线上程序问题 线程异常 10月月更

这几种Java异常处理方法,你会吗?

华为云开发者联盟

Java 数组 异常 程序

怎样才能画出清晰明了的时序图

华为云开发者联盟

接口 模型 UML 系统 时序图

基于HarmonyOS分布式技术,这群学生赋予冰箱更智能的体验

科技汇

官方线索|2021科大讯飞全球开发者大会

搬砖人

AI 大会 1024我在现场

【万字长文】吃透负载均衡

Java 负载均衡 架构 面试 后端

关于征集第六届世界智能大会平行论坛活动方案的通知

InfoQ 天津

Vue进阶(幺叁捌):vue 路由传参的几种基本方式

No Silver Bullet

Vue 路由 10月月更

Apache APISIX 社区新里程碑——全球贡献者突破 300 位!

API7.ai 技术团队

开源社区 API网关 Apache APISIX

产业互联网下半场,SaaS平台的机遇与挑战

雯雯写代码

SaaS

java springboot自习室选座预约小程序源码

清风

计算机毕业设计

爱奇艺埋点投递治理实践

爱奇艺技术产品团队

数据治理 埋点 pingback

华为云企业级Redis:助力VMALL打造先进特征平台

华为云开发者联盟

华为云 云数据库 GaussDB(for Redis) 华为商城 VMALL

技术干货 | jsAPI 方式下的导航栏的动态化修改

蚂蚁集团移动开发平台 mPaaS

容器 大前端 移动开发 mPaaS 动态化

开源许可协议介绍

webrtc developer

10 月 30 日 北京 LiveVideoStack 阿里云视频云专场限量赠票 100 张

阿里云CloudImagine

阿里云 音视频 高清视频 视频编解码 视频云

【Flutter 专题】28 易忽略的【小而巧】的技术点汇总 (五)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

Apache APISIX 社区成员助力 openEuler 发布第一个社区创新版

API7.ai 技术团队

开源 openresty openEuler api 网关 Apache APISIX

无处不在的Kubernetes ,难用的问题解决了吗?

望宸

容器 云原生 PaaS KubeVela kubenetes

一周信创舆情观察(9.27~10.10)

统小信uos

Python代码阅读(第38篇):根据谓词函数和属性字符串构造判断函数

Felix

Python 编程 Code Programing 阅读代码

从Ftrace开始内核探索之旅

金蝶天燕云

Linux内核 Ftrace

谷歌“新宠” Rust_语言 & 开发_褚杏娟_InfoQ精选文章