Collabora的Daniel Almeida发布了对Linux内核的视频4 Linux 2(V4L2)子系统中的VP9编解码库代码的重写。在使用Rust而不是现有的C代码时,这应该会产生更好的内存安全性,并更好地避免现有代码中的潜在问题。
“请求注解”代码将VP9库代码移植到Rust,并将RKVDEC和Hantro驱动程序代码转换为使用Rust‘ed版本。在使用Rust或C语言版本的代码时,Fluendo的Flster测试显示了相同的结果。
阿尔梅达用RFC补丁评论道:
“在不同的场合,关于驱动程序的讨论已经很多了,我觉得大家的共识是现在等待。这就是为什么我提出了一种不同的方法:将我们的编解码库移植到Rust。
恕我直言,这些组件可以从Rust中受益匪浅,因为它们实现了复杂的算法,这些算法也恰好处理通过V4L2控件从用户空间接收的数据。这些算法使用从用户空间接收的数据来索引到大量数组中,从而受益于Rust的内存安全。
关于代码的第一件事是它不包括任何绑定层。由于需要保持它们与C代码同步,这被多次指出是一个阻塞器。
这里的Rust代码还为C驱动程序提供了一个C API。这个C API是由cbindgen自动生成的,我已经提供了如何执行此操作的说明。我们甚至可以同时使用C和Rust库中的函数,因为ABI是相同的。
上面的方法可以派上用场,因为这意味着如果需要的话,我们可以逐段转换给定的代码库。C驱动程序将通过C API正常工作,任何新的Rust驱动程序都将受益于原生Rust接口。“
他接着在补丁封面信中补充道:
我希望让社区相信,这是一种可行的方式,可以慢慢地试验铁锈代码,而不会把我们绑在太多东西上。
最后,请注意,此代码只是一个概念验证,如果它被广泛接受,我们可以确定一个适当的补丁-包括所有需要的补丁。
感兴趣的人可以在上面找到这些RFC补丁内核邮件列表 while awaiting feedback from other upstream Linux kernel stakeholders.