Linuxカーネル4.18から、userns mountに対して暗黙にSB_I_NODEVを設定するようになったために、既存のsystemdのnspawn実装が壊れた。
以下が問題のパッチだ。
https://github.com/torvalds/linux/commit/55956b59df336f6738da916dbb520b6e37df9fbd
Linuxカーネルにおいては、ユーザースペースの挙動は変えないという強い下位互換保障がある。以前のバージョンのカーネルで動いていたユーザースペースのコードが新しいバージョンのカーネルで動かなくなった場合、それは理由が何であれ新しいバージョンのカーネルのバグであるとみなされる。たとえそれが、ドキュメント化していない明示的に保証されているわけではない昔のカーネルの暗黙の挙動であれ、その挙動に依存している既存のユーザースペースのコードがあるのであれば、その挙動を壊すのはカーネルのバグであって、ユーザースペースのバグではない。
このパッチを書いたEric W. Biedermanは、そもそもドキュメント化されていない挙動であるのでこれはカーネルのバグではなくてユーザースペースのバグであると主張した。
このようなユーザースペースに悪影響を与える下位互換性を破壊する変更をして、しかも悪びれないLinuxカーネル開発者は、従来ならばLinus Torvalds直々に大文字かつFから始まる4文字言葉で罵倒されるのが常であった。
しかし、最近Linusは改心し、人の気持ちを勉強し、
本の虫: Linus、今までの行いを謝罪し一時的にカーネルメンテナーの立場を退いて人の気持ちを勉強してくると発言
その結果、人を叱るときにも以前のような罵倒はしなくなった。
本の虫: 帰ってきたきれいなリーナス・トーバルズ、無作法な開発者をたしなめる
さて、今回のLinusはどうであろうか。
エリック、これは到底受け入れられんぞ。
On Sat, Dec 22, 2018 at 12:58 PM Gabriel C <nix.or.die@gmail.com> wrote:
>
> これに関心がある人をCCに追加しておいた。サンクス
> > この問題についてlkmlに送られたメール
> >
> > https://lkml.org/lkml/2018/7/5/742
> >
> > これもリンクしておく。最後を引用
> >
> > そもそもデバイスノードへのmknodがデバイスノードをオープンできる保障なんてどこにもない。
> > リグレを起こしたアプリケーションはそもそも元から壊れていたものだ。
> > 俺らカーネルがバグ互換を維持しないというわけでもないが、俺らはバグ互換なバグについて明白にドキュメント化すべきだ。ああ、こいつは完全にゴミだ。
俺達カーネルの世界ではな、明白なルールってものがあるんだよ。もし何かが既存の仕組みを壊したら、それはアプリケーションが壊れたのでは(以���大文字)絶対にない。
カーネルが壊れているのだ。
ここにグレイエリアってものは一切ない。エリック、お前の行動は一線を越えた。そして俺らは明らかに6月にまで遡れるリグレッションを抱えていて、しかもお前の正しくない態度のせいで俺にまでその存在が報告されてこなかった。
エリック、俺はこれを1000%明白にしておくがな、ユーザースペースにバグはない。もしそれが動いていたのであれば、ユーザースペースは明白に正しいことをしている。お前が何度もユーザースペースのバグだと主張した事実は深刻な信頼の毀損だ。お前はこの問題について(以下大文字)知っていたはずだ。
いやマジで。言い訳になることはなにもねぇぞ。
このコミットは俺のツリーからrevertしておいた。そして、俺はお前がこの問題を根本的に理解して飲み込んだのが明らかになるまでお前からのプルリクは一切受け付けない。
なんでこの問題が俺にまで報告が上がってくるのにこんなに時間がかかったんだ?
リーナス
まず一見して罵倒語を使っていないのがわかる。にわかに母親を強姦した者呼ばわりすることもないし、男性器を吸引しろと迫ることもない。
そして最後のセリフがよい。かつてのリーナスは、このようなLinuxカーネル開発のルールを破ったものに対し、「なんでこの俺がいまさらこんな初歩的な問題についていちいち注意してやらなければならないのだ」と書いたものだった。これは典型的なコミュニケーションロスを招きやすい上司の言動である。このような人間にたいしては問題の報告を躊躇してしまう。今回のメールでは、「なんで自分への問題報告がこんなに遅れたのか」と書いている。これは自分への報告が遅れたことに怒っているのであって、怒りの矛先が違う。
Linusは明らかに変わった。