トーバルズが「不快」と一蹴したのは機能ではなく、ファイルの置き方だった
新しいコードに不具合があったわけではない。遅いわけでもない。リーナス・トーバルズ(Linus Torvalds)が「不快だ」と書いたのは、ファイルをディレクトリのどこに置くか、その一点だった。そして彼が引き合いに出したのは、半世紀前の技術だった。
機能には何も言わなかった
舞台はLinuxカーネルの次期版、7.2のマージウィンドウ。sched_extと呼ばれる仕組みの更新が、トーバルズのもとに届いた。sched_extは、ユーザー空間で動くBPFプログラムとしてCPUスケジューラを書ける拡張可能スケジューラの枠組みで、6.12でカーネル本体に取り込まれて以来、ゲーミング性能の改善やスケジューラ研究の素早い試作に使われてきた。今回の7.2では、サブスケジューラ支援の開発が続いている。1つのシステムに複数のスケジューラを階層的に載せ、ワークロードごとに最適なものを割り当てる構想だ。マルチテナント環境のような場面で効いてくる。
トーバルズは、この機能のどれにも反対しなかった。コードは取り込んだ。ただし、取り込みながらこう書いた。
Please don't do this disgusting thing.(こんな不快なことはやめてくれ)
引っかかったのは、kernel/sched/ の直下に ext_arena.c、ext_cid.c、ext_types.h といった ext_ 接頭辞付きのファイルが何枚も並べて置かれたこと。トーバルズは、これだけの数のファイルがあるならディレクトリでまとめるべきで、接頭辞で見分ける方式は「disgusting and wrong(不快で間違っている)」だとした。そして、取り込みはしたが抗議のもとでだと付け加え、最後にこう締めくくった。
適切な階層型ファイルシステムは1965年から利用できる。
1965年。半世紀以上前から、ファイルをフォルダで整理する手段は存在していた、という皮肉だ。
なぜ、たかがファイルの置き場所に
ここが、今回の出来事のいちばん面白いところだと思う。動かないわけでも、遅いわけでもない。ext_ を頭に付けて並べてもコンパイルは通るし、機能はそのまま動く。それでもトーバルズは見過ごさなかった。
理由は、後からそのコードに触れる人にある。ディレクトリで切ってあれば、関連するファイルが1つの場所にまとまり、無関係なものと分かれる。接頭辞で見分ける方式は、見た目こそ似たような整理に見えて、ファイルが共通の置き場に散らばったままだ。30年以上カーネルを束ねてきたトーバルズが守ろうとしているのは、今この瞬間の動作ではない。これから何年もそのコードを読み、直し、追いかける人の手間のほうだ。

左が今回届いた形、右がトーバルズの求めた形。やっていることは同じファイルの移動でしかない。けれど、半年後にこのコードを初めて開く人にとって、どちらが「どこに何があるか」を一目で掴めるかは、はっきりしている。
トーバルズがファイルシステムまわりの設計に強いこだわりを見せるのは、今回が初めてではない。2025年にも、大文字小文字を区別しないファイルシステムの実装をめぐって、似たような率直さで持論をぶつけている。彼にとってこれは趣味の潔癖ではなく、長く保守できるコードベースを守るための線引きなのだろう。
その日のうちに直された
この話には、後味の良い続きがある。
トーバルズの苦言から間を置かず、sched_extのメンテナを務めるホ・テジュン(Tejun Heo)が、ソースツリーを組み直すプルリクエストを送った。ext_ 接頭辞をやめ、kernel/sched/ext/ という新しいサブディレクトリを作って、その中にファイルを収める。ヘッダとソースは各ファイル単体でも解析できるよう自己完結させ、エディタの補完ツールが1ファイルずつ正しく読めるようにもした。
中身の動作は何も変わっていない。純粋な置き場所の組み替えだけだ。そして、トーバルズはこの再編コードも取り込んだ。指摘から再編、再マージまでが、ほとんど待ち時間なく回った。
公開の場で「不快だ」と名指しされ、そこから言い争いに発展することもなく、求められた形に淡々と直して送り返す。Linuxカーネルの開発が時に荒っぽい言葉で知られる一方で、その荒っぽさが指している中身は、たいてい「コードをどう良くするか」に閉じている。今回のやり取りは、その閉じ方がきれいに出た一例だった。動くか動かないかではなく、次にこれを読む人がどう感じるか。トーバルズが1965年を持ち出してまで守ろうとしたのは、そこだったように見える。
道についた名前
ある村に、山を越える道があった。
道は獣道に毛が生えたようなもので、どこで左に折れ、どこで右に曲がるかは、村人の足が覚えていた。
それで困る者はいなかった。
道は使えた。
村から山向こうの町へ、荷を背負って歩けた。
あるとき、村に井戸掘りの男がやってきた。
男は道を歩いて山を越え、帰ってきてからこう言った。
「分かれ道に名前をつけてくれ」
村人は笑った。
名前がなくても歩けると。
男は言い返さなかった。
ただこう言った。
「私が次にここへ来るとは限らない。次に来るのは、この道を知らない人かもしれない」
村人は、しぶしぶ分かれ道に杭を立て、名前を書いた。
「北の沢」「岩場越え」
それだけのことだった。
翌年、井戸掘りの男は来なかった。
代わりに、別の職人が来た。
その職人は、杭の名前を読みながら山を越えた。
迷わなかった。
コードの中にファイルを並べるとき、私たちは道を作っている。
接頭辞は足の記憶だ。
今ここにいる人には読める。
けれど、杭を立てなければ、次に来る人は一つずつ確かめるしかない。
トーバルズ氏が「不快だ」と書いたのは、杭のない道を見たからだろう。
そしてホ・テジュン氏が送り返した再編のコードは、杭を立て直すことに等しかった。
中身は同じだ。
道は変わらない。
変わったのは、次に来る人が迷わずに歩けるかどうかだけ。
私は自分のコードにいつも杭を立てているかと聞かれたら、正直に言えば、立てていない場面のほうが多い。
動けばいい、と思う瞬間がある。
名前を考えるより先に形にしたくなる。
そういう怠慢を、トーバルズ氏は35年間、世界中の開発者に対してひとつずつ潰してきた。
1965年のMulticsが作ったのは、フォルダという杭だった。
ファイルを分け、名前をつけ、場所を与える。
それだけの仕組みが、61年後の今も使われている。
人が道に杭を立て始めてからの時間は、もっと長い。
たぶん、道ができた瞬間から、杭はあった。
道を歩いた者は、道を作ったつもりになる。
歩けたのだから、道はあると。
けれど杭がなければ、それは自分だけの道だ。
トーバルズ氏が1965年を持ち出して言いたかったのは、この区別を忘れるな、ということだと思う。
道は通れる。
誰も困っていない。
けれど、杭がない。
次に来る人のことを考えていない。
その怠慢に、61年前の技術を引き合いに出して「不快だ」と書ける人が、まだこのプロジェクトの中心にいる。
それは、たぶん幸運なことだ。
参考:再編のプルリクエスト(lore.kernel.org)
関連記事
- USB4STREAMがLinux 7.2にマージ。ケーブル1本のPC間転送が正式機能に
- Linuxカーネルからstrncpyが消えた。6年362コミットの結末
- Apple自身が捨てて17年。AppleTalkがLinuxからも消える
- Linux 7.1-rc6、AI修正の波は収まらず
- Btrfsがhuge folios対応、Linux 7.2で投入へ
- IntelがUSB4STREAMをLinuxに導入、ケーブル1本でPC間転送
- トーバルズ氏、AI由来の修正を差し戻すと宣言
- ssh-keysign-pwn対応Linux 7.0.8公開
- Linux 7.1-rc3公開、カーネル肥大は「新常態」だ
- Tux30歳、満腹ペンギンが生き残った理由