Collabora 的 Daniel Almeida 在 Linux 2 (V4L2) 子系统中发布了 Linux 内核** 4 重写的 VP9 编解码器库。 通过使用 rust 而不是现有的 c**,这应该会带来更好的内存安全性和对现有 ** 中潜在问题的更好弹性。
征求意见"将 VP9 库移植到 Rust 中,并将 rkvdec 和 hantro 驱动程序转换为使用 Rust 版本。
Fluendo 的 Fluster 测试表明,无论你使用的是 Rust 还是 C 版本的 **,结果都是一样的。
Almeida 对 RFC 补丁的评论如下:
我们在不同的场合说了很多关于车手的事情,我觉得目前的共识是等待。 这就是为什么我提出了一种不同的方法:将我们的编解码器库移植到 Rust 中。 在我看来,这些组件可以从 Rust 中受益匪浅,因为它们实现了复杂的算法,同时还通过 v4l2 控制处理从用户空间接收的数据。 这些算法受益于 Rust 的内存安全性,它使用从用户空间接收的数据来索引大型数组。他接着在补丁求职信中补充道:关于**的第一件事是它不包含任何绑定层。
这里的 Rust 还为 C 驱动程序提供了一个 C API。 这个 C API 是由 cbindgen 自动生成的,我已经提供了如何生成它的说明。 我们甚至可以同时使用 C 库和 Rust 库中的函数,因为 ABI 是相同的。
以上内容非常有用,因为这意味着我们可以在必要时逐节转换给定的库。 C 驱动程序将通过 C API 正常工作,而任何新的 Rust 驱动程序都将受益于原生 Rust 接口。
最后,请注意,这只是一个概念验证,如果反响良好,我们可以推出官方补丁(包括所有相关内容)。"有兴趣的人可以在内核邮件列表上找到这些 RFC 补丁,同时等待其他 Linux 内核上游利益相关者的反馈。