自去年9月以来,Linux内核维护者Greg表示愿意使用Rust来开发Linux驱动程序。
今年7月,Linus Torvalds回答说默认情况下可以启用Rust支持。
Linux开发人员不仅在谈论。
在8月底举行的2020 Linux Plumbers Conference上,Rust上游的Linux内核的开放性成为讨论的最热门话题。
Rust语言团队Thomas和Gaynor的共同负责人,以及Linux内核开发人员Josh Triplett和其他人参加了这次讨论,并向您展示了到目前为止的一些研究结果,思想和问题。
他们强调,他们不打算将现有内核重写为Rust,而只是专注于可以用Rust编写的新代码。
具体来说,参与者集中在Linux内核对Rust的支持可能涉及的三个方面:内核中现有的API,体系结构支持以及ABI与内核的兼容性。
绑定到现有的C API目前,Rust尚无法生成可以链接到内核的代码。
它还需要一种方法来访问Linux内核中使用的大量API,这些API当前在C头文件中定义。
Linux内核开发人员指出,Rust和C具有良好的互操作性。
另外,bindgen工具可以解析C头文件以生成适当的Rust声明,因此Rust不需要从C复制重复的定义,这也为语言类型检查提供了一种交叉措施。
从表面上看,这些功能使Rust具有与现有C API集成的良好条件,但实际上在实现方面仍然存在一些挑战。
例如,Linux大量使用了预处理器宏和内联函数,bindgen和Rust的外部函数接口无法轻松地支持它们。
关于API绑定的第二个问题是:需要手动封装多少个C API才能呈现惯用的Rust接口? Thomas和Gaynor展示了一个linux-kernel-module-rust项目,在这里您可以看到一个内核模式的Rust代码示例。
在此项目中,指向用户空间的指针封装在UserSlicePtr类型中。
现有的Rust开发人员更熟悉通过这种封装生成的代码,并使Rust的类型系统和借用检查器提供最大程度的安全性。
但是,必须设计和开发每个API,并且用C和Rust编写的模块也将创建不同的API。
无疑,这增加了工作的繁琐性。
John Baublitz还提供了一个演示模块,该模块可以更直接地绑定内核的用户访问功能,并且绑定主要由bindgen自动生成。
但是,Rust开发人员可能不习惯这些代码,因此这种方法可能需要放弃很多Rust的安全保证。
最终,会议达成了共识:对于某些最常见和关键的API,编写Rust包装器是有意义的,但是手动包装每个核心API是不可行的。
托马斯还提到Google正在研究用于自动生成C ++代码的惯用绑定,并正在考虑内核是否可以做类似的事情。
体系结构支持对体系结构的支持是讨论的另一个重点。
与会者说,在Rust中实现Linux驱动程序是可以接受的,但是无论如何都不应将其放在更晦涩的体系结构上。
就这一点而言,现阶段唯一成熟的Rust实现是rustc编译器,该编译器通过LLVM发出代码。
Linux内核支持多种体系结构,其中一些没有可用的LLVM后端,有些具有LLVM后端,但是rustc尚不支持。
Triplett相信,首先将Rust添加到Linux内核将反过来有助于增加Rust对更多架构的支持。
正如Debian中引入Rust软件吸引了更多不同体系结构的爱好者来帮助改善Rust支持一样,他希望将Rust支持添加到Linux内核中也能获得类似的结果。
ABI和内核兼容性Gaynor询问了有关ABI兼容性的建议。
目前,Rust是通过LLVM编译的,而Linux内核通常是用GCC构建的,因此将Rust代码链接到内核可能意味着混合GCC和LLVM发布的代码。
参与者担心LLVM和GCC可能存在ABI兼容性问题,因此他们提出了一个想法,即Linux内核社区是否可以将Rust支持限制为使用Clang构建的内核,以确保兼容性。
Linux内核维护者Greg指出,当前的内核规则是,只有当内核中的所有目标文件都使用相同的编译器和相同的标志构建时,才能保证兼容性。
但是,只要将LLVM构建的Rust对象链接到GCC构建的内核,只要对它进行了正确配置并通过了测试,他仍然感到满意。
他认为不需要任何事先限制
Advanced Analogic Technologies Incorporated (AnalogicTech)是移动消费电子产品全面电源管理(Total Power Managementä)半导体解决方案提供商,产品应用于诸如各种无线电话、笔记本电脑和平板电脑、智能电话、数码相机、无线局域网(WLAN)和个人媒体播放器等等产品中。公司面向消费、通信和计算应用等领域内快速发展的各种设备,专注于开发和销售满足不同应用需求的电源管理方案。AnalogicTech还开发和授权各种器件、工艺、封装和应用相关技术。AnalogicTech总部位于美国加州圣克拉拉和澳门特别行政区,并在中国(北京、上海和深圳)、香港、日本、韩国、瑞典、法国和英国等国家和地区设立了办事处,同时还拥有遍及全球的销售代理和分销商网络。