写点什么

谷歌“新宠” 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:566158

评论

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

GreptimeDB 监控自举 | 如何用 GreptimeDB 监控 GreptimeDB

Greptime 格睿科技

数据库 数据 数据监控

轻松搞定平稳运行,数据库平台 DBStack 帮助 DBA 运维不同基础设施上的各类数据库

百度Geek说

AIGC产品经理训练营第一期 -- 毕业总结

AnMin

芯盾时代的身份安全产品体系

芯盾时代

身份认证 移动安全 iam 权限架构

有哪些好用的私有化企业网盘?6款国内推荐

易成研发中心

分布式锁的实现原理

vivo互联网技术

redis zookeeper 分布式锁

正义不打烊!法行宝携手北京市丰台区司法局,共同点亮智慧普法新道路

科技热闻

硬核议程一睹为快!龙蜥社区走进Arm MeetUp邀您报名

OpenAnolis小助手

操作系统 arm 龙蜥社区 龙蜥meetup

未成年人模式护航,保障安全健康上网

HarmonyOS SDK

HarmonyOS

生态伙伴集体呼吁升级原生鸿蒙,近千元“鸿蒙有礼”先锋权益等你来领!

最新动态

17年深耕中国互联网与云生态,英特尔携手合作伙伴助力行业数智化升级

E科讯

感谢 OpenAI,让中国开源 AI 大模型全球排名第一

Tp_jh

#人工智能 ChatGPT Open AI AI 智能体

倒计时1天!龙蜥社区走进中科方德MeetUp演讲亮点一览

OpenAnolis小助手

操作系统 龙蜥社区 中科方德 龙蜥meetup

hyperf-wise-locksmith,一个高效的PHP分布式锁方案

左诗右码

8款OKR开源系统与非开源系统:全面比较与选择指南

易成研发中心

如何在HarmonyOS NEXT中处理页面间的数据传递?

威哥爱编程

huawei HarmonyOS ArkTS HarmonyOS NEXT

LAZADA关键词搜索API接口的获取与应用

科普小能手

API 接口 lazada商品评价接口 lazada API接口 关键词搜索 lazada API

聚焦银行业数智化转型,火山引擎数据飞轮系列白皮书重磅发布

字节跳动数据平台

仿真软件的功能有哪些?仿真软件助力科研与工程领域

思茂信息

cst cst使用教程 CST软件

小程序免备案

HUODUNYUN

小程序 CDN CDN技术 小程序免备案 免备案

8款值得尝试的OKR系统推荐,助力企业目标管理

易成研发中心

COMSOL工作站:配置指南与性能优化

GPU算力

数字孪生 高性能计算 仿真软件 #算法 COMSOL Multiphysics

Web端IM聊天消息该不该用浏览器本地存储?一文即懂!

JackJiang

即时通讯;IM;网络编程

聚焦银行业数智化转型,火山引擎数据飞轮系列白皮书重磅发布

字节跳动数据平台

中年程序员大叔找工作太难还要低三下四受气;计算机硕士北京生存困难;一个讨论被裁员的贴子下边3700条留言

陆通

求同尊异 龙蜥鼎力支持开源生态发展合作倡议

OpenAnolis小助手

开源 操作系统 龙蜥社区

极狐GitLab 正式发布安全补丁版本17.6.1, 17.5.3, 17.4.5

极狐GitLab

gitlab

世界首次!智源研究院实现数字孪生心脏电功能超实时仿真

智源研究院

你知道这些隐藏的编程技巧吗?提高代码质量的十大方法。

天津汇柏科技有限公司

编程技巧

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