LinuxカーネルのRust論争、再び炎上
(byline.network)- Direct Memory Access APIを実装したRustコードが、Linuxカーネルリポジトリにプルリクエストされた。
- Linuxカーネルの中間管理者であるChristoph Hellwigが、RustコードをLinuxカーネルに入れるなとして拒否し、対立が始まった。
- 対立の規模が次第に大きくなる中で、Christoph HellwigはRustをがん細胞にたとえた。
- Asahi Linuxの総責任者Hector Martinはこのがん細胞発言に反発し、ソーシャルメディアでLinus Torvaldsを巻き込みながら激しく非難した。
- Linus TorvaldsはHector Martinに対し、「問題はあなた自身だ」として、「ソーシャルメディアで世論工作(Brigading)をするな」と警告した。
- 現在、Hector MartinはApple Arm互換ハードウェアをサポートするアップストリームLinuxコード管理者の職からの辞任を求められている。
28件のコメント
要約版では起きた出来事だけに触れていますが、元記事(韓国語です)の末尾には、出来事をよりよく理解するための追加の背景知識が2つ付いています。
プロジェクトを単一言語で管理するのが望ましいとは思いますが、それとは別に、これを同僚に納得させるやり方は最悪ですね。
権力でひざまずかせるのは理不尽ですよね
該当PRのメールスレッドです:
https://lwn.net/ml/all/…
DMA実装を修正したわけでもなく、DMA APIを直接いじったわけでもなく、RustからDMA APIにアクセスできるようにするFFIバインディングを書いたPRのようです。
そのようなPRに対して "No rust code in kernel/dma, please." という一言で拒否したわけで、https://lwn.net/ml/all/20250108135951.GA18074@lst.de/
ではどうすればよいのかと尋ねると、"Keep the wrappers in your code instead of making life painful for others." と言っています。 https://lwn.net/ml/all/20250108151858.GB24499@lst.de/
(言われたとおりにやったのは確かです。PRはkernel/dmaではなく、rust/kernel配下のツリーを修正したものです。)
もちろんFFIバインディングが追加されれば、DMA APIが変わるたびにRustのFFIバインディングも修正しなければならないという負担はあるでしょうが、
それはRustに手を入れる側でうまく対応すると言っているにもかかわらず、当該ツリーの担当でもない人がこのような態度で反発するのが正しいのかは、よく分かりません。
(Christoph Hellwigはkernel/dmaのメンテナーです: https://docs.kernel.org/process/maintainers.html/…
そのためHector MartinがLinusをスレッドに呼び込んだようです:
https://lwn.net/ml/all/2b9b75d1-eb8e-494a-b05f-59f75c92e6ae@marcan.st/
ただ、その直前のスレッドで交わされていた話が少し面白いのですが、
「APIにbreaking changeが入ったとき、Rustチームが素早く対応しなければビルドが壊れ、LinusがPRを受け入れなくなる」という内容です。
どう考えても、breaking changeを作ったモジュールと別のモジュールの間の問題だと考えるなら、私はRustがあるほうがより良いと思います。
xモジュールがbreaking changeを作り、yモジュールが素早く対応できなかった状況を考えると、
LinuxカーネルでRustが
unsafeを使う部分は、ほとんどがCをラップする部分です。そのほかに、メモリを直接扱う必要があるハードウェア制御の部分もありますが、ごく一部です。
Rustが適用されるのはドライバ開発です。メモリ管理やブロックレイヤーなど、カーネル本体は触る必要もなく、触ることもできません。
カーネル本体のコードより、はるかに多いのがドライバのコードです。そして問題が起きる箇所の大半も、ドライバコードです。
私は、ドライバ開発の部分はCよりもメモリ安全性が高く、セキュリティに優れた言語で開発されるべきだと思います。
それがRustなのかZigなのか、何になるのかは分かりませんが。
Rustは一般的なアプリケーションを開発するには過剰に複雑で、C言語の開発者が短期間で習得するのも難しい、という点には私も同感です。
それでも、どんな言語であれ、せめてドライバ開発だけでも新しい世代の言語に置き換わってほしいと思います。
私が前の会社で数千行にも満たないドライバを開発して安定化させるのに、およそ7年かかりました。完全に単純化はできませんが、そのうち大体3年ほどはデバッグばかりしていた気がします。
その大半がメモリ関連のバグで、デッドロックのような論理的な不具合は少数でした。
大きなプロジェクトを自分の言語の実験場として使うのは、あまり良く見えません。
こじれたらフォークしていた昔に戻る必要があります。
機器全般を扱うカーネルで Rust を使っても、
unsafeを使い始めたら読みにくい問題のあるコードになるだけ、という印象しかありません。0.91、0.92、0.99、0.991 みたいにメインリリースもないようなプロジェクトでもないのに、なぜうまく動いていた部分をポーティングしているのか分かりません。
大きなバグが出て、それを直すついでに安全に変えました、という話でもないですし。
このPRは移植ではありません。既存のDMA APIを、新しく作成するRustベースのモジュールでも使えるように、Rust側でFFIバインディングを追加したPRです。それをDMA担当者が止めたのです。
記事本文に引用元の原文がなくて残念ですね。気になって原文を探して読んできたのですが、私もきちんと把握できているわけではないものの、単純に原文どおりに語れる話ではなく、裏側の経緯がかなり多いように思います。
記事のタイトルが原文の名称に変更されました。
対応ありがとうございます
大規模なCコードベースにRustを組み込むのは、思ったほど面白いものではないですよね。メモリ安全性を高めると言っても、結局は
unsafeな領域が大きくなって実効性もそれほど高くないし……。結局、Rustの使用範囲が広がる以上の意味はあまりなく……その結果として既存のC開発者たちの反発を招くのも自然な流れのように思えます。むしろ本当にRustでゼロから始めるカーネルプロジェクトに集中したほうがよいのかもしれません。いや、本文のクオリティが思ったよりしっかりしていて、面白く読めました。
トーバルズが言った「問題はあなたにある」という趣旨は、Rust導入とは無関係に、技術的な問題の解決策がSNSになり得ないという論点でしたが、この要約だけを見ると誤解を招く余地があるように思います。
ヘクター・マーティンにとっては、どうしようもない選択でした。
Linux の中間管理層がみな C の専門家で埋め尽くされているのに、少数派の Rust 開発者の意見など、受け入れてもらえるはずがあるでしょうか。
https://youtu.be/opTJH76wJxs?si=WHR0_1uPpSlpDTHr 論争へと発展していく過程を示しています。
トーバルズもRustを許可しているんじゃなかったんですか?
トーバルズはその論争で、Rustについては一言も触れていませんでした。
技術的な意見の対立があるなら、技術的な根拠で議論を進めるべきで、
SNSで世論を作って対立を終わらせようとするような行為はするな、ということです。
そんなに自信があるなら、カーネルをフォークして全部 Rust で書けばいい。がんのようにじわじわ入り込もうとするな。そんな意見が多いですね
そのコードがRustで使いやすくするために
kernel/dma周りへ手を入れたコードならまだしも、kernel/dmaをラップしたFFIレイヤーをrust/kernel/dmaに追加したコードでした。元のコードをいじったわけではありません。
実際の核心は、
Rustで作られた公式DMA FFIを誤用したうえで私に問い合わせが来るのが嫌だ、という程度の話で……
そのうえで、じゃあ各ドライバ側で勝手にFFIを作ればいいと言え、という前後の合わないことを言っていました。
それはRedoxですね。まだサポートしていない部分があるのでLinuxに行くのでしょうが……
https://vt.social/@lina/113064510447670892
書いていただいた内容は、完全にヘルヴィヒの発言をそのままなぞっているように見えますが、そうした意見が多数派だと言えるのかは分かりません。
こんにちは。良い記事を投稿してくださり、ありがとうございます。楽しく拝読しました。
ただ、原文を確認し、原文のタイトルを見たときに少し気になる点があったため、コメントします。
https://news.hada.io/guidelines
> 基本的に記事の元のタイトルを付けるか、タイトルを韓国語に翻訳して投稿してください。
と提案されています。また、該当の記事の内容を読んだ限りでは、「Linuxカーネル Rust 論争、再び燃え上がる。」の代わりに
「リーナス・トーバルズ『問題はあなた』」というタイトルは、元のタイトル以上に記事の内容について誤解を招くおそれがあると思います。
要約と記事のご紹介をしてくださり、改めてありがとうございます。良い一日をお過ごしください。
すごくすごい
参考にします。
'm 'b 良い一日をお過ごしください!おかげで良い文章を読めて感謝しています。 \(__ )
より正確な説明のために、タイトルに自分なりの副題を付けるのが癖だったのですが、そのタイトルが他の方には適切ではなかったうえ、そのような規定があることも知りませんでした。次回からは原文どおりに出します。
元のタイトルは何についての話なのかがすぐ分かる一方で、変更されたタイトルは下手をすると釣りっぽいという誤解を招く恐れがあるように見えます。個人的な意見です。
ご意見ありがとうございます。
リーナスの発言が最も重要だと考えてタイトルにしましたが、それで大きく歪められてしまったようですね。
今後は確実に注意します。