Linux Daily Topics

2021年4月15日パニックお断り―Linus、"Rust for Linux"の盛り上がりに釘を刺す

開発者の間で人気上昇中のRustだが、Linuxカーネル開発においても1年ほど前からメインラインでのRustサポート―新たにデバイスドライバを記述する言語としてRustを認めるよう求める声が強くなりつつある。3月にはカーネル開発者のMiguel Ojedaが最初の"Rust for Linux"となるパッチをlinux-next(次期カーネルへのマージを希望するパッチが集められたGitリポジトリ)にポストし、Stephen Rothwellによってマージされた。

kernel/git/next/linux-next.git - The linux-next integration testing tree

Ojedaはさらに一歩踏み込んだステップとして、4月14日、カーネル開発者向けメーリングリスト「LKML」「[RFC] Rust support」と題したメッセージをポストしており、カーネルを記述する第2言語としてRustを採用するメリット、とくにRustのメモリ安全性を強調している。また、Rustの現状の課題としてコンパイルの遅さやLLVMへの依存、C言語と比べてツールの少なさなども挙げているが、これらのカーネル記述言語として不利な点はプログラミング言語としての歴史の浅さによるもので、Rustより多くのユーザを獲得し、普及が進めば解決を図ることができるとしている。

[PATCH 00/13] [RFC] Rust support -ojeda@kernel

こうしたRust推進派の動きに対し、Linus Torvaldsはどう反応しているのか。LinusはRustのパニック機構についていくつかの疑問をOjedaに投げかけたあと、4/14付のメッセージで「ランタイムエラーでパニックを発生させるのは根本的に問題があると思っている(I do think that the "run-time failure panic" is a fundamental issue.⁠⁠」とコメントしており、Rustがメモリアロケーションに失敗した際にパニックを発生させることは断じて受け入れられないと強調している。

Re: [PATCH 00/13] [RFC] Rust support -Linus Torvalds

Linusは昔から「カーネルランドとユーザランド」を厳格に区別してきたことはよく知られているが、今回も「カーネルコードとユーザスペース内で使われているようなツールのコードでは話がまったく違う。メモリ不足がアボートを引き起こすなんてことがあっては絶対にならない。メモリアロケーションに失敗したなら、ふつうにエラーを返せ。僕が"ダイナミックなパニック"を受け入れることはありえない」と、カーネル内での"MUST NOT"であるパニック発生を強く牽制している。

「"パニックはRustにとってのプレースホルダでコンパイラの仕様だから"というなら、エラーをキャッチするコードを実装して、コンパイラを修正すべき。話はそれからだ」⁠Linus)

もっともLinusはRustのサポート自体にはそれほど強く反対しているわけではなく、テストが十分に行われ、今回指摘されたパニックに関わる問題などが解決に向かえば、メインラインへのマージはそう遠くないと見られている。Linusの"パニック厳禁"のお達しを受けたOjedaは「すべて了承しました(Agreed on all your points.⁠⁠」として、アロケーション周りの改善を早急に進める意向を示している。次期カーネルの「Linux 5.12」はまもなくのリリースが予定されているが、はたして年内に"Rust for Linux"の最初の成果がメインラインに取り込まれるのを見ることはできるのか、早くも次のマージウィンドウが気になるところだ。

おすすめ記事

記事・ニュース一覧