极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:49
登录|注册

Rust成为C的接班人,或将开发Linux驱动

讲述:初明明大小:4.41M时长:04:49
Rust 是由 Mozilla 主导开发的专注于安全、速度和并发的系统级编程语言,目前已经逐渐走向成熟。最近,英特尔首席工程师 Josh Triplett 在 2019 年开源技术峰会(OSTS)上发表了主题为“英特尔和 Rust:系统编程的未来”的演讲。他就开发人员是否可以用 Rust 开发驱动程序这一问题询问了 Linux 内核稳定版维护者格雷格·克洛赫 - 哈特曼(Greg Kroah-Hartman)。
克洛赫 - 哈特曼表示愿意接受用 Rust 开发 Linux 内核的驱动程序,但有两个条件。其一,以可选的方式存在,而不是默认启用,这样其他开发者就不需要使用 Rust 去构建内核;其二,Rust 驱动需要展现出比 C 驱动更具优势的特性,比如针对内核 API 的安全封装器。看样子,开发者未来有很大的机会使用 Rust 编写 Linux 驱动。
在很长一段时间里,Linux 内核和驱动程序开发,基本上都是用 C 语言编写的。然而,C 写 driver 的主要缺陷在于 C 赋予程序员的自由度过大,所谓能力越大责任越大,程序员需要小心处理各种细节以保证 driver 的安全。在一些情况下,程序员容易因为疏忽大意写出不安全的代码,这都归因于 C 是一门不安全的语言。
前段时间,随着微软计划用 Rust 取代 C 和 C++ 新闻的曝出,Rust 被认为是 C/C++ 的接班人。由 Mozilla 开发的 Rust 被认为具有较强的安全性。同时,由于特殊的类型系统,Rust 不需要垃圾收集,也被认为是高效的。Rust 程序运行速度极快,可防止段错误并保证线程安全。
这些属性使 Rust 极大地吸引了专注于应用程序安全性的开发人员。香港中文大学系统安全系博士李卓华指出,Rust 主要通过严格的语法和安全检查来限制程序员,“逼迫”程序员写出更安全的代码。
此外,Rust 的优势在于内存安全和并发安全,以及现代化的类型系统,更能保证程序的正确性。并且,Rust 拥有现代化的工具链,比如对 SIMD、WASM 等的支持。现在已经有人用 Rust 写了 WASM 的虚拟机(Wasmer),允许在 Linux 内核中实现安全的 WebAssembly 运行环境,这样可以避免如系统调用、用户态 / 内核态数据复制等性能损耗。看得出来,使用 Rust 扩展 Linux 内核,会带来更多的可能性。
需要注意的是,Rust 保障的内存安全不包括防止内存泄露。因为内存泄露的语义和具体应用逻辑强相关,所以还需要做额外的内存泄露检查,但这方面的工具比较现成,一般不是大问题。
尽管前面提到这么多 Rust 的优点,但是,目前用 Rust 写驱动还不太乐观,主要是两个原因。一是需要把底层的 unsafe 仔细封装,因为在驱动场景下,很多操作不满足 Rust safe 的要求,一旦代码里混杂了很多 unsafe,那么因常规安全检验工具的缺乏,Rust 反而会不如 C。二是硬件厂家的工程师从 C 改为 Rust 更漫长,广泛的硬件驱动支持才是 Linux 生态繁荣昌盛的根基,这个生态挑战比单纯的技术挑战更大。
就 Rust 目前开发 Linux 驱动的落地难点问题,李卓华列出以下几点:
Linux 内核中定义的函数,结构体众多,想要在 Rust 中使用需要将它们重新改写成对应的 Rust 版本,这一点人工完成的话工作量极大,自动完成的话,代码丑陋杂乱,且缺乏安全抽象。
Linux 内核使用的很多 C 的特性没有对应的 Rust 实现。
Driver 主要是底层的代码,有时需要 Rust 的 unsafe 特性,无法保证安全性。
编写 Driver 主要是提供一组回调函数(callback function),由内核负责在合适的时候调用。这就需要回调函数必须用 FFI(Foreign Function Interface)编写,且必须是全局的,这就限制了开发者封装和组织风格良好的代码。
调用内核函数也是 unsafe 的,除非为其提供一层安全抽象。
Linux 不保证 API 和 ABI 的稳定性,因此难以封装内核函数和数据结构。
另外,关于人们关心的如何为 Linux 的内核函数提供一层安全的抽象的问题。专家认为,这里存在不少挑战,但是,这是一个正确的方向,这个方向如果成功,会极大的提升 Linux 内核的安全性和稳定性。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 天涯海峰
    rust go dlang 三个的前途都不好说。
    1
收起评论
显示
设置
留言
1
收藏
32
沉浸
阅读
分享
手机端
快捷键
回顶部