写点什么

微软正在探索使用 Rust 开发安全的软件

  • 2019-12-16
  • 本文字数:1136 字

    阅读完需:约 4 分钟

微软正在探索使用 Rust 开发安全的软件

近来,微软尝试使用 Rust 来提升软件的安全性。在巴塞罗那举行的RustFest大会上,微软工程师 Ryan Levick 和 Sebastian Fernandez 分享了他们在微软使用 Rust 时所面临的挑战。微软的 Rust 之旅包括使用 Rust 重写 Windows 的一个底层组件。


Fernandez 和 Levick 表示,软件行业建立在一个不安全的技术基础之上,涉及巨额成本。保守估计,微软的软件里被爆出的每一个问题平均需要耗费 15 万美元,而受安全漏洞侵害的组织需要付出更高的成本。英国国家医疗保健系统就是这样的一个案例,因为受到赎金攻击,预计损失达到 40 亿美元。


他们说,这些问题大部分与使用 C 语言和 C++有关。


C 语言和 C++非常适合用来开发底层系统,它们只使用非常少的资源。实际上,它们是我们创建的系统的基础,但问题是它们不够安全。在使用它们开发系统时,开发人员并没有考虑到安全问题。


这也解释了为什么微软在尝试使用 Rust,希望能够消除软件 bug,特别是那些会导致安全漏洞的 bug。


我们可以使用 Rust 开发出安全的组件。


两位工程师表示,这个有待验证,但他们希望结果能够如他们所愿。


实现这个目标的一个主要障碍是使用 Rust 从头开始重写所有东西是不可能的。Rust 应该与其他语言共存,虽然这样也不容易。例如,对于 Windows 来说,第一个障碍是 LLVM(Rust 的编译器),它对 Windows 的支持并不好。类似的,Rust 的构建工具 Cargo 无法管理微软的整个构建系统,只能被集成到现有的构建系统中。


这个问题适用于所有的 Rust 工具,以及被封装进 DLL 的共享可执行程序(它们大部分使用 C 语言和 C++开发)和对 COM、WinRT、Win32 的支持。


除此之外,微软以及其他类似的企业还有其他问题需要解决,包括人的因素在内。Rust 的受众通常是那些具有多年 C 语言或 C++经验的开发者,需要说服他们转向 Rust。


之前,当我们向有经验的 C++程序员推荐 Rust 时,他们一般都能够快速上手,因为他们的知识体系里已经有一些形式化的东西,这是好事。但对于那些从其他领域转过来的人来说就有一点困难。不过,虽然学习曲线比较陡峭,但一旦他们上手了,就会变得非常高效。


来自微软 Hyper-V 团队的工程师 Adam Burch 分享了微软使用 Rust 开发项目的经验。他讲述了使用 Rust 重写一个 Windows 底层系统组件的经历,并把 Rust 编译器的安全性保证说成是一股清流:


Rust 编译器提供的内存和数据安全性保证让程序员信心满满,因为通过能够编译的代码都是内存安全的。


与 Fernandez 和 Levick 一样,Burch 也同样认为 C/C++程序员能够快速上手 Rust,他还提供了一些有关 Rust 与 C/C++代码互操作以及如何保持语言安全的建议,包括使用工具生成可表示C语言数据的Rust数据结构,以及与COM API有关的东西。


原文链接


Microsoft Exploring Rust as the Solution for Safe Software


2019-12-16 09:001857

评论

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

【云原生 | 从零开始学Docker】二、Docker的常用指令学习以及使用

泡泡

Docker 云计算 云原生 9月月更

极速导入elasticsearch测试数据

程序员欣宸

elasticsearch 9月月更

哪些应用适合Docker化改造

阿泽🧸

Docker 9月月更

2022-09-10:以下go语言代码输出什么?A:编译错误;B:49.0;C:49。 package main import ( “fmt“ ) func main() { ch

福大大架构师每日一题

golang 福大大 选择题

FreeRTOS记录(五、FreeRTOS任务通知)

矜辰所致

FreeRTOS 9月月更 任务通知

【精通内核】Linux内核抢占原理源码解析

小明Java问道之路

cpu Linux内核 中断 9月月更 内核抢占

【JavaWeb】Servlet系列——session会话机制

胖虎不秃头

Web java; 9月月更

【JavaWeb】JSP系列——关于JSP、JSP的基础语法、利用Servlet+JSP改造项目、JSP指令、JSP九大内置对象

胖虎不秃头

Web java; 9月月更

C++ 学习 ------cmath 头文件的源码学习 03

桑榆

c++ 源码阅读 9月月更

【C语言深度剖析】深入理解C语言中函数的递归算法

Albert Edison

递归 C语言 函数 9月月更

架构师的十八般武艺:高并发架构

agnostic

高并发

值得收藏|三种经典的指标监控模型

穿过生命散发芬芳

9月月更 监控指标

IntelliJ IDEA远程调试Elasticsearch6.1.2

程序员欣宸

elasticsearch 9月月更

创立一年就估值5亿美金,这个项目是怎么做到的?

One Block Community

区块链 创业 融资 defi

【精通内核】Linux内核中断控制原理源码解析

小明Java问道之路

cpu 寄存器 Linux内核 中断 9月月更

融云 Flutter SDK,跨平台开发的真香之选

融云 RongCloud

flutter 跨平台开发 SDK 教程

python小知识-日志处理logging

AIWeker

Python python小知识 9月月更

高性能使用索引

急需上岸的小谢

9月月更

跟我以前学mybatis

楠羽

mybatis 笔记 9月月更

【编程实践】一步步带你从二叉树到实现哈夫曼编码

迷彩

算法 二叉树 9月月更 哈夫曼编码 哈夫曼树

如何用Python代码绘制赏月美景?

芯动大师

中秋节

InnoSetup制作补丁包替换文件操作

中国好公民st

c++ qt 9月月更

【精通内核】Linux内核自旋锁实现原理与源码解析

小明Java问道之路

Linux内核 自旋锁 读锁 9月月更 写锁

【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)

Fire_Shield

计算机视觉 9月月更 EasyX

【C语言】字符函数&字符串函数&内存函数(上)[进阶篇_复习专用]

Dream-Y.ocean

c c++ 9月月更

【JavaWeb】Servlet系列——Cookie机制、乱码问题总结

胖虎不秃头

Web java; 9月月更

一张图告诉你出海服务商怎么选:中国互联网出海服务商生态图谱

易观分析

报告 出海服务商

力扣260 - 只出现一次的数字||| 【哈希映射、异或位运算+分治思想】

Fire_Shield

位运算 哈希表 9月月更

图解Kafka的服务端的网络通信模型

石臻臻的杂货铺

kafka Kafka实战 9月月更

Web3.0 会长什么样?

掘金安东尼

前端 Web3.0 9月月更

HTML标准解读第一章:HTML、XML、XHTML、SGML究竟有什么区别?

水鱼兄

html 前端 HTML标准

微软正在探索使用 Rust 开发安全的软件_安全_Sergio De Simone_InfoQ精选文章