阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

微软计划使用 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:0222663
用户头像
王文婧 InfoQ编辑

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

关注

评论 2 条评论

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

强大的日志权限管理:多索引与访问规则的创新应用

观测云

日志 数据安全

走出大模型部署新手村!小明这样用魔搭×函数计算

阿里巴巴云原生

阿里云 云原生 函数计算

进击的 Serverless:Java 应用如何从容地面对突增流量

阿里巴巴云原生

阿里云 Serverless 云原生

突破职业瓶颈:测试管理者如何有效提升领导力

测吧(北京)科技有限公司

测试

管理型人才的心理修炼:从技术到测试管理的平稳转变

测吧(北京)科技有限公司

测试

Databend 开源周报第 129 期

Databend

笔记软件哪个好?超全的笔记软件盘点推荐:手写笔记、文本笔记、协作笔记、知识管理等!

彭宏豪95

效率工具 在线白板 办公软件 笔记软件 boardmix

测试管理的黄金法则:晋升之路上不可忽视的要点

测吧(北京)科技有限公司

测试

搭建开发体育赛事直播间解说平台,现成源码框架功能模块具备

软件开发-梦幻运营部

如何查看苹果手机的CPU型号?

雪奈椰子

C# 循环与条件语句详解

小万哥

C# 程序人生 编程语言 软件工程 后端开发

《Java性能权威指南(第2版)》PDF

程序员李木子

活动回顾丨云原生技术实践营上海站「云原生 AI &大数据」专场(附 PPT)

阿里巴巴云原生

阿里云 容器 云原生

玩转数据处理利器:学会使用 YAML 文件轻松处理数据

测试人

软件测试 测试开发

云原生离线工作流编排利器 -- 分布式工作流 Argo 集群

阿里巴巴云原生

阿里云 云原生

项目管理中有效沟通的7大技巧

PingCode

项目管理 项目经理 沟通技巧

OpenKruiseGame × KubeSphere 联合发布游戏服运维控制台,推动云原生游戏落地

阿里巴巴云原生

阿里云 开源 容器 云原生

测试管理的方法论宝典:工具、流程与最佳实践

测吧(北京)科技有限公司

测试

影视行业使用云电脑能有哪些好处?云电脑有什么优势

青椒云云电脑

云桌面 云电脑 云电脑平台

Sentinel 新版本发布,提升配置灵活性以及可观测配套

阿里巴巴云原生

阿里云 开源 云原生

测试管理者的成功之路:职业发展的关键因素揭示

测吧(北京)科技有限公司

测试

管理者必备:测试管理岗位与职责的全面定义

测吧(北京)科技有限公司

测试

测试管理者的智慧:能力图谱指导下的职业发展之道

测吧(北京)科技有限公司

测试

KubeBlocks 研发轶事之 addon 抽象

小猿姐

数据库 Kubernetes 云原生 抽象

聚道云连接器实现航信与用友NC凭证对接,助力企业实现数字化转型

聚道云软件连接器

案例分享

运营商大模型,数字中国的一枚“落子”

脑极体

AI 大模型

「回看 Milvus 的 2023」:AI 热潮中的非典型向量数据库

Zilliz

Milvus 大模型 AIGC 向量数据库

左耳听风 - 软件开发与架构设计的原则「读书打卡 day 13」

Java 工程师蔡姬

读书笔记 程序员 个人成长 职业发展

《数据结构与算法分析:Java语言描述(第3版)》PDF

程序员李木子

定向减免!函数计算让轻量 ETL 数据加工更简单,更省钱

阿里巴巴云原生

阿里云 云原生 函数计算

Consul 留给你的时间不多了

阿里巴巴云原生

阿里云 云原生

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