本文来自 CSDN资讯

Rust这两年实火了。

近年来,Rust凭借着出色的内存效率、速度与安全性,深受亚马逊、微软、华为、Facebook等科技巨头的青睐。Rust从根本上考虑安全性,提出了“没有数据竞争的并发性”、“没有垃圾收集的内存安全”及最终的“无恐惧的黑客“等概念,反映了Rust独特的学术研究和工业实用性结合价值。除了企业使用Rust语言的场景逐步扩大,操作系统也不例外。

而作为一个完善的移动操作系统,Android系统涉及到很多组件,可以广义地概括为两部分:生态系统及操作系统本身。

作为开发者来说,你开发Android的哪个部分决定了你所选择的编程语言;对于应用开发者来说,Java和Kotlin是比较流行的选择;而对于操作系统及其内部底层的开发者来说,C语言和C++语言是目前更受欢迎的选项。

如今,谷歌为操作系统开发者增加了第3个选择:Rust。因为Android Open Source Project现在支持Rust语言来开发操作系统了。

C和C++有哪些限制?

Android系统的底层需要C和C++这样的系统编程语言,因为这类语言可以为开发者提供控制和可预测性,这在访问底层系统资源和硬件时非常重要。

但问题是,C和C++并不能提供内存安全保证。这样一来使它们很容易出现错误和安全漏洞,开发者需要在复杂和多线程的代码库中管理这些语言的内存寿命,并非一件易事。

C和C++构成了Android平台上数千万行代码,这使得一旦发生内存安全漏洞,就形成最难以解决的代码错误来源,占Android高严重度安全漏洞的70%左右。所以与其事后再解决这些Bug,不如从一开始就预防。

因为缺乏内存安全保障,迫使开发者在严格约束和无权限沙盒内运行Android进程。但使用沙盒是成本很高的,不仅会消耗额外的开销还会引起延迟,并且不能完全消除代码的漏洞,而且由于Bug密度高,沙盒的有效性降低了,这样的情况让攻击者可以将多个漏洞连接起来。

缺乏内存安全保障迫使开发者在严格受限和无特权的沙箱中运行Android进程。但是沙箱在资源上是昂贵的,消耗额外的开销并引入延迟。沙箱也没有完全消除代码的漏洞,而且由于漏洞密度高,沙箱的有效性降低了,进一步允许攻击者将多个漏洞链接起来。

另一方面的限制是,为了检测到错误状态,必须在工具化的代码中实际触发才能被检测到。因此即使你的代码经过了严密的测试,也可能发现不了隐藏的Bug。而等到发现Bug的时候,修复他们又是一个漫长而高成本的过程了,而且还不一定能得到最准确的修复。

这导致Bug的检测变得很不可靠,鉴于这些限制,事前预防Bug是最好的方法。针对这些问题,Rust这样的语言就到了发挥的时候了。

从C和C++转向Rust,对Android意味着什么?

为Android系统增加一种新语言,实际上是一项很艰巨的任务,包括工具链和依赖项需要维护、测试基础设施和工具必须更新、开发人员需要接受培训等。不过在谷歌方面,最近一年多时间里已经一直在大力推广Rust了。

在谷歌看来,想要预防非安全语言编写软件的Bug,现在是内存安全编程语言切入的好时机。因为谷歌已经在其免费OSS-Fuzz服务的375个开源项目里发现了由内存安全错误引起的5500多个漏洞;还发布了Syzkaller来监测操作系统内核中的Bug,并通过gVisor等沙盒来减少Bug检测期间造成的实际影响。

在使用Rust方面,谷歌用Rust将Android中的操作系统模块进行了优化,包括蓝牙和Keystore2.0,Keystore 2.0模块就是用Rust编写的;在底层的项目中使用Rust,如ChromeOS中的crosvm虚拟机监视器和驱动程序;包括curl的HTTP和TLS后端、以及Apache httpd新的TLS库,这些代码库位于Internet的网关,需要保护全球数百万用户的数据,它们的安全性极其重要。所以这些作为相关工作重要起点的代码库,均已开始接受Rust语言改造。

虽然目标已经定下了,但谷歌方面也很明确,真正将Rust扩展到更多的操作系统,需要很多年的时间。

而对于应用开发者来说,这样的切换不会改变其编写应用的方式,也不会改变框架API的工作方式,只是会影响操作系统的编写方式。根据Android开发者团队透露,谷歌目前也没有发布Rust NDK的计划,支持应用程序开发的语言还继续是Kotlin、Java、C和C++。

C和C++不安全?Android 支持 Rust 开发操作系统相关推荐

  1. C 和 C++ 不安全?Android 支持 Rust 开发操作系统

    作者 | Carol 出品 | CSDN(ID:CSDNnews) Rust这两年实火了. 近年来,Rust凭借着出色的内存效率.速度与安全性,深受亚马逊.微软.华为.Facebook等科技巨头的青睐 ...

  2. 使用Rust开发操作系统(UEFI基本介绍)

    UEFI基本介绍 关于UEFI BIOS UEFI介绍 引导管理 UEFI Image UEFI 应用程序 OS Loader UEFI运行时服务 调用约定 调用约定的数据类型 IA-32架构调用约定 ...

  3. Rust开发调试环境搭建Windows

    Rust Windows环境搭建 2019年02月18日 13:48:31 6日Simmp 阅读数 1672 该文章主要讲述在windows10+vscode下如何构建一个完整的rust编译调试环境, ...

  4. 在Windows上搭建Rust开发环境——Clion篇

    文章目录 在Windows上搭建Rust开发环境--Clion篇 安装mingw64 安装Rust hello world 安装Clion 使用Clion创建并调试项目 在Windows上搭建Rust ...

  5. android采用什么图标单位,Android支持的长度单位

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...

  6. 【Xamarin.Android】掌握android支持库

    Android支持库是每个Android应用程序中必不可少的一部分,你会发现它们无处不在.支持库为开发人员提供了将Android的最新和最强大功能添加到应用程序的能力,同时保持与旧版本Android的 ...

  7. Android 支持主线 Linux 内核指日可待?

    整理 | 郭芮 作为当前市场上唯一能与 iOS 抗衡的移动操作系统,基于 Linux 开发的 Android 系统重要性不言而喻.但是为了使其更加适应智能手机的需求,华为.三星以及谷歌自己等 OEM ...

  8. android支持平台,Android 平台功能

    Android 平台功能Android Platform Features 12/11/2019 本文内容 开发 Xamarin.Forms 适用于 Android 的应用程序需要 Visual St ...

  9. android studio多媒体播放器,Android支持全屏、小窗口的视频播放器

    NiceVieoPlayer Android支持全屏.小窗口的视频播放器,完美实现全屏.小窗口播放切换 Features 用IjkPlayer/MediaPlayer + TextureView封装, ...

  10. 【Rust日报】2020-10-02 移动操作系统SailfishOS支持Rust了

    移动操作系统SailfishOS支持Rust了 链接:https://forum.sailfishos.org/t/release-notes-pallas-yllastunturi-3-4-0/22 ...

最新文章

  1. 自动泊车技术短暂困境,前景可期
  2. 一文看懂 AI 训练集、验证集、测试集(附:分割方法+交叉验证)
  3. Vim的简单实用(存活篇)
  4. matlab优化应用
  5. 每天一道LeetCode-----实现二叉搜索树的迭代器
  6. Solr Facet(分片)
  7. linux可以http安装么,Linux 5下 http的安装
  8. React 性能优化之批量处理 unstable_batchedUpdates
  9. MFC初探 —— 文件与文件夹的选择与拷贝
  10. [转载] python中list与string的转换
  11. iOS平台下闪退原因汇总(一):Ran out of trampolines of type 0/1/2 运行时间错误
  12. 学习《华为基本法》(11):项目管理与审计制度
  13. 华为转正答辩ppt范文_华为转正答辩ppt模板下载-精选版.ppt
  14. 【推荐算法论文阅读】STAMP: Short-Term Attention/Memory Priority Model for Session-based Recommendation
  15. 详说ArcGIS之重采样技术图文解析
  16. 星际争霸php,星际争霸之php简单工厂模式
  17. 如何更改linux文件的拥有者及用户组 chown和chgrp
  18. PHP实现手机号或身份证号中间几位变*
  19. NOIP大纲整理:(零)历年2000-2016NOIP提高组题目分析
  20. 2021-02-05

热门文章

  1. java 根据手机号获取归属地
  2. Oracle dba_users视图
  3. c语言8bit转10bit,Win10系统如何才能将8bit(位深度)设定变成10bit呢?
  4. md5和sha1文件完整性校验
  5. 数据结构实现学生信息管理系统功能
  6. 不同证书格式Der 、Cer 、Pfx 、Pem区别
  7. 不应忘却的纪念-小百合(Lilybbs)
  8. Googler在中国的“幸福”生活
  9. 图像特征提取现成的方法
  10. android app内动态获取apk签名md5,与keytool获取的一致