2月6日、海外の技術メディアThe Registerが「Mixing Rust and C in Linux likened to cancer by maintainer」と題した記事を公開した。この記事では、LinuxカーネルにRustコードを導入しようとする開発者と、C言語での統一を重視するカーネルメンテナとの意見の対立について詳しく紹介されている。
以下に、その内容を紹介する。
記事によると、LinuxカーネルでRustを利用する試みは以前から進められてきたが、複数言語の共存を望まないメンテナの強い反対に直面しているという。反対派のメンテナは、「マルチ言語化によって保守が複雑化する」「C言語によるインターフェースを分割したくない」といった主張を展開している。具体的には、Rust製デバイスドライバがカーネルのDMA APIへ直接アクセスできるようにするための抽象化コードが提案されたが、メンテナであるChristoph Hellwig氏はこれを厳しく批判し、受け入れを拒否している。
提案されたパッチは、C言語側のDMA API(dma_alloc_coherent()
関数など)をRustドライバが利用できるようにするものだった。しかしHellwig氏は、Rustコードをカーネルのコア部分に持ち込むことでメンテナンスが複雑化することを懸念している。
If you want to make Linux impossible to maintain due to a cross-language codebase, do that in your driver so that you have to do it instead of spreading this cancer to core subsystems. (where this cancer explicitly is a cross-language codebase and not Rust itself, just to escape the flameware brigade).
もしクロス言語のコードベースのせいでLinuxのメンテナンスを不可能にしたいのなら、それはあなた自身のドライバの中で行い、コアのサブシステムにこの“がん”を広げるのはやめてほしい。(ここで言う“がん”とは、Rustそのものではなく、クロス言語のコードベースのことを指している。炎上を避けるために付け加えておく)
彼の主張によれば、Rustを使うなら独自にCインターフェースを呼び出すだけにとどめるべきであり、カーネル全体にRustの抽象化を広げることは避けるべきだという。
このような姿勢に対して、Rust for Linuxプロジェクトの開発者側からは「Cコード側には一切手を加えず、Rust側からカーネルAPIへの抽象化を行うのが効率的である」「ドライバごとに個別のCバインディングを実装するより、中央集権的にRustレイヤを維持する方が良い」との反論が示されている。しかしHellwig氏は「C言語以外のコードがコアサブシステムに影響を及ぼすのは容認できない」として、そのようなアプローチ自体を“がんのようなもの”と表現してまで拒否している。
この対立に関して、Rust導入を支持する開発者からは「Linus Torvalds氏による最終判断を仰ぐべきだ」という意見も出ている。実際、Linus氏はRustをカーネルに取り入れることに前向きな姿勢を示してきたが、Hellwig氏のように強硬に反対するメンテナとの意見調整は難航しているようだ。
RustをLinuxカーネルに導入したい勢力と、C言語主体の開発体制を維持するメンテナとの対立が顕在化し、現在激しさを増している。今後、この対立がどのように解消されるのかが注目されるところである。
詳細はMixing Rust and C in Linux likened to cancer by maintainerを参照していただきたい。