AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

微软计划使用 Rust 取代 C 和 C++

  • 2019-07-19
  • 本文字数:2465 字

    阅读完需:约 8 分钟

微软计划使用Rust 取代C和C++

昨日,微软安全响应中心(MSRC)团队在官网更新文章,就近日提出的最新计划,即未来将使用Rust作为 C、C++以及其他编程语言的替代方案以改善应用程序的安全性的计划,从空间内存安全、时间内存安全、数据竞争等方面进行了进一步的深入补充。首席安全技术经理 Gavin Thomas 表示,开发人员的核心工作不是担心安全性,而是做好功能开发,首先需要启用一种“不会引入内存安全隐患”的开发语言。显然,这一次的主角是 Rust。

过去 12 年,约 70%的微软补丁针对内存安全漏洞

如今,内存安全漏洞已成为黑客攻击的主要方向。据微软最新调查数据显示,在过去 12 年里,约 70%的微软补丁都是针对内存安全的。


自 2004 年以来,微软安全响应中心(MSRC)已经对每一个报告的微软安全漏洞进行了分类。从所有的分类中,人们得出了一个令人惊讶的事实:正如 Matt Miller 今年在 BlueHat IL 的演讲中所讨论的那样,大多数修复的漏洞和分配的 CVE 都是由开发人员无意中将内存损坏错误插入到其 C 和 C++的代码中造成的。这两种存在内存安全风险的编程语言允许开发人员在代码被执行的地方对内存地址进行细粒度控制。开发人员内存管理代码中的一个错误可能导致大量内存安全漏洞,攻击者便可利用这些错误造成具有危险性和侵入性的后果,比如远程代码执行(RCE)和权限升级漏洞(EoP)。



数据来源:微软安全响应中心网站


近年来,随着微软增加其代码库并在代码中使用更多的开源软件,这一问题并没有得以解决,反而变得更糟,而微软也并不是唯一一个暴露出内存安全漏洞的企业。


在官网发布的最新文章中,微软安全响应中心(MSRC)团队就如何解决内存安全问题进行了如下分析,


为了解决内存安全问题,需要采取几种不同的方式。C++中的“现代”构造(例如 span)能够在一定程度上预防某些内存安全问题。此外,我们应尽可能使用其它现代 C++功能(例如智能指针)。然而,现代 C++仍然不具备全面的内存安全与数据争用机制。更重要的是,如果程序员不加以运用,这些功能本身将毫无意义;而且这些功能在规模较大,且较为模糊的代码库可能也无法奏效。再者,C++缺乏能够在安全抽象当中打包不安全代码的良好工具,这意味着虽然能够在本地级别强制执行正确的编码实践,但开发人员仍很难在 C 或者 C++当中构建出能够安全组合的软件组件。除此之外,我们应尽可能将软件最终迁移至具备全面内存安全特性的语言当中,例如,通过运行时检查以及垃圾回收机制,实现内存保护的 C#或者 F#。毕竟,内存管理是一项极为复杂的功能,最好是确保必要时才与其打交道。

Rust 的优势

多年来,微软始终在寻找更安全的 C 和 C++的替代品。2016 年 6 月,微软曾开源“Checked C”,这是 C 语言的一个扩展,它带来了一些解决安全问题的新特性,但依然没有彻底解决问题。由于自动内存管理,Microsoft 还有其他更安全的编程语言,C#和.NET 系列是一个,编译为 JavaScript 的 TypeScript 是另一个。这些语言被 Microsoft 及其客户广泛使用,但它们无法满足所有需求。对此,微软安全响应中心(MSRC)首席安全技术经理 Gavin Thomas 表示:“如果开发人员能够将确保内存安全的 .NET,C#等语言与高效的 C ++结合起来,那就太好了。也许我们可以。”因此,Rust 成为了这项计划的主角。


据了解,Rust 创建于 2006 年,被创建者 Mozilla 称为“C / C ++的替代品”。最初,它只是 Mozilla 的一个研究项目,旨在开发更安全、快速的编程语言以重写 Firefox 浏览器,大多数开发人员认为它是一个理论项目,而如今 Rust 正在逐步证明自己的实力。2016 年 8 月发布的 Firefox 48 采用了以 Rust 构建的 mp4 轨道元数据解析器,该解析器首次在 Windows 和 32 位 Linux 桌面提供。最近,Brave 浏览器用 Rust 替换了最初用 C ++编写的广告拦截组件。Cloudflare 和 Dropbox 目前也在生产系统中运行 Rust。


Rust 的显著特征包括:


  • 零成本抽象

  • 移动语义

  • 保证内存安全

  • 没有数据竞争的线程

  • 基于特质的泛型

  • 模式匹配

  • 类型推断

  • 最小运行时间

  • 高效的 C 绑定


Rust 团队表示,它具有丰富的系统和所有权模型,可确保内存安全和线程安全。此外,它还提供文档,包含集成的包管理器和其他有助于提高开发人员工作效率的工具。更为重要的是,Rust 从一开始就设计了防止内存损坏的漏洞。它的语法也更为简单,由它编写的应用程序不会产生相同数量的错误,因此开发人员可以专注于扩展其应用程序,而非进行持续的维护工作。


根据StackoverFlow2019年开发者调查报告的数据显示,Rust 是如今最受欢迎的编程语言,因此更容易招募到相关开发人员。相比之下,在这项调查中,受访者将 C 列为第四个最讨厌的编程语言,C++则排名第九。




StackoverFlow2019 年开发者调查报告数据


据了解,目前,除 Mozilla 之外,全球有数百家公司正在使用 Rust,如 Amazon、Atlassian、Dropbox、Facebook、Google、Microsoft、Red Hat 和 Reddit 等。在国内,百度、字节跳动、 PingCAP、蚂蚁金服、知乎、SenseTime 等企业也都在使用 Rust。

Rust 存在的问题

然而,Rust 仍存在一些不足。据先前的一项调查显示,它需要改进的方面包括:


  • 更好的人体工程学

  • 更好的文档

  • 更好的库支持

  • 更简单的学习曲线

  • 更多的 IDE 支持


一些用户在谈及为何不使用 Rust 的原因时表示,“尽管学习曲线和语言的复杂性仍是人们学习 Rust 的阻碍,但令许多人产生共鸣的一个方面是,只是还没有足够活跃的采用 Rust 的商业项目让人们参与其中……对于一些人来说,只要有强烈的动机,他们就可以克服 Rust 的学习曲线。”此外,受缺少 IDE 支持的影响,约 10%的用户正在寻找更好的 IDE 支持,而 5%的老用户因此停用 Rust。


对于这项或将构建新的语言生态的计划,微软安全响应中心(MSRC)首席安全技术经理 Gavin Thomas 表示,“我们是一个响应组织,但我们也发挥积极的作用“,“我们应该从一开始就努力防止开发人员引入问题,而不是为解决问题提供指导和工具“。目前,关于何时在其产品或云服务上使用 Rust,微软还没有具体透露。


相关文章:


A proactive approach to more secure code


We Need a Safer Systems Programming Language


明明很好很强大,Rust 却还是那么小众


2019-07-19 15:0222938
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 74.3 次阅读, 收获喜欢 275 次。

关注

评论 2 条评论

发布
用户头像
关于Rust的缺陷在本文没有详细展开,欢迎读者批评指正!
2019-07-19 19:22
回复
没有更多了
发现更多内容

一文带你搞懂java8新特性,熟记于心

刘祥

JAVA stream

【愚公系列】2022年03月 RabbitMQ EasyNetQ的用法(window11+vs2022+.NET 6)

愚公搬代码

3月月更

Girlfriend含苞待笑——一次性处理上百份文档,BAT这种大厂履历意味着什么

程序媛可鸥

Python 程序员 面试

OBV指标交易策略(累积能量潮与移动能量潮,成交量多空比率净额及相关应用原则)

程序媛可鸥

Python 程序员 面试

微博评论的高性能高可用计算架构

tom

【愚公系列】2022年03月 Docker容器 Mysql主从复制的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 RabbitMQ之Erlang-Window11下的安装

愚公搬代码

3月月更

解密GaussDB(for Influx)时序洞察

华为云开发者联盟

Influxdb 时序数据库 GaussDB(for Influx) 时序数据 时序洞察

15 本你必须阅读的 PyTorch 书籍,【2021Python最新学习路线

程序媛可鸥

Python 程序员 面试

18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家

程序媛可鸥

Python 程序员 面试

Linux grep命令详解,手把手教你写

程序媛可鸥

Python 程序员 面试

【愚公系列】2022年03月 Docker容器 RabbitMQ集群的搭建

愚公搬代码

3月月更

一文简述:云端常用存储类型

穿过生命散发芬芳

3月月更 云端存储

这应该是目前市面上最好用的一款安卓兼容工具了!

优麒麟

Linux 开源 操作系统 优麒麟 KMRE

Matlab初级学习者,15个经典面试问题及回答思路

程序媛可鸥

Python 程序员 面试

Python 下载的9种方法,如何才能通过一线互联网公司面试

程序媛可鸥

Python 程序员 面试

python DataFrame数据分组统计groupby()函数,值得推荐

程序媛可鸥

Python 程序员 面试

架构训练营-模块五

Leo

架构训练营

微博评论的高可用高性能计算架构

浪飞

如何使用 HTML 和 CSS 写一个登录界面

宇宙之一粟

html/css 3月月更

华为自研编程语言“仓颉”试用报名开启

IT蜗壳-Tango

IT蜗壳 3月月更

物联网应用开发实践案例-智慧农业

DS小龙哥

3月月更

【愚公系列】2022年03月 RabbitMQ 环境搭建和初步使用(window11+vs2022+.NET 6)

愚公搬代码

3月月更

百度交易中台之账房系统架构浅析

百度Geek说

百度 架构 后端 交易中台

Python 中的八个“无代码”特性,这原因我服了

程序媛可鸥

Python 程序员 面试

【技术加油站】揭秘百度智能测试规模化落地

百度Geek说

百度 测试 后端 智能化测试

百度一线工程师浅谈日新月异的云原生

百度Geek说

云原生 后端

NFS服务器原理、搭建、配置,Python面试题选择题

程序媛可鸥

Python 程序员 面试

复盘归因,提高交付质量的秘诀

老张

软件测试 交付质量 复盘归因

【愚公系列】2022年03月 Docker容器 Oracle的搭建

愚公搬代码

3月月更

Newton迭代法开方(Python),最详细的docker中安装并配置redis

程序媛可鸥

Python 程序员 面试

微软计划使用Rust 取代C和C++_编程语言_王文婧_InfoQ精选文章