Linuxカーネル作成思想?の、Linuxカーネルコミュニティ外でドライバなどを開発する人への恐ろしい部分。

最近、D01NXIIのドライバ(VMB5000チップ用ドライバ)を動かそうとしていて、気づいたこと。

まず最初にコメントしておくと、私が気にしているのは技術的な観点だけで、ソースがクローズドとか、オープンとか、そういうことには興味が無い。ただし、個人的には当たり前だと思うのだが、ソフトウェアとハードウェア、また、ドライバとカーネルなどが、それぞれ進化するためにはどういう考え方が良いかというのを気にして、以下の文章を記述した。

さて。
Linuxカーネルのドキュメントには、サードパーティ、かつ企業向けなどのドライバを開発している人には、背筋の凍るような思想が書いてある。

以下、Linuxカーネル(参照したのは2.6の日本語訳だが、基本的な思想は当初から、そしてひょっとすると未来に渡って変わらないと思われる)ドキュメントの抜粋。(JFドキュメントの中から)このファイルの名称がstable_api_nonsense.txtということだけでも、背筋の凍る開発者が大量にいると思われる。

                                                                                                                                  • -

要旨

      • -

あなたは不変のカーネルインターフェースが必要だと考えているかもしれ
ないが、実際のところはそうではない。あなたは必要としているものが分
かっていない。あなたが必要としているものは安定して動作するドライバ
であり、それはドライバがメインのカーネルツリーに含まれる場合のみ得
ることができる。ドライバがメインのカーネルツリーに含まれていると、
他にも多くの良いことがある。それは、Linux をより強固で、安定な、成
熟したオペレーティングシステムにすることができるということだ。これ
こそ、そもそもあなたが Linux を使う理由のはずだ。

                                                                                                                                  • -

この要旨を読んだだけでも、Linuxカーネル開発者が、ドライバを開発する人たちは全てLinuxカーネルのメインツリーに反映されることを”期待”していることがわかる。

もちろん、強固で、安定な、成熟したオペレーティングシステムはだれもが望むところだとは思う。

しかし、現実的には、あらゆるドライバがメインのカーネルツリーに含まれる、というようなことはあり得ないと思う。

例えば、VMware。ホスト用ドライバ、ゲスト用ドライバを作っているが、VMware社自身はLinuxカーネル開発者ではない。結果として、ホストとしてサポートするディストリビューションが(VMware社で動作確認したものに)制限され、ゲストOSもvmware-toolsドライバレイヤが動作するものに限定されてしまっている。VMwareは、こういうLinuxディストリビューションのポーティングの多さ&大変さの割には、頑張っていろいろなディストリビューションが動くよう努力しているように思う。他にも、仮想化機能だけでもSun xVM VirtualBoxも同様だ。
個人的に悲惨だと思うのは、主にI/O系などのハードウェアで、「Linuxカーネルツリーに含まれない」ドライバを作成しているベンダー、メーカー。これらは多く存在すると思われる。また、使う側に対するインパクトは少ないかもしれないが、例えば個人で、あるハードウェア用のドライバを作成したとしても、メインツリーに含まれることは困難と思われる。

実際には、Linuxカーネルは(一応Linusが統率を取っているということにはなっているが、)非常に多くの寄稿者によるパッチによってリリース/バージョンアップを行っている。そして、Linuxカーネルのコミュニティが存在し、そこで「了承されなければ」メインソースツリーには反映されない。

ということは、悪く取れば、メインカーネルソースツリーに反映を了承されないようなドライバを排斥している文面と解釈してしまう。なぜなら、「了承」されるには、コミュニティや、発言力を持つLinuxカーネル開発者を納得させなければならないのだから。

さらに言えば。

ハードウェアの進化は、Linuxカーネルを含む、ソフトウェアの進化より著しく速い。極論をあえて言えば、メインストリームのカーネルに入るためにコミュニティに対して議論をしているうちに、そのチップは時代遅れになり、新しいチップのドライバを開発しなければならなくなることだってあり得る。

Cコンパイラの進化/変化によって、カーネルのコーディングを変えなければならないということも記載されている。しかし、これはLinuxカーネルのみならず、libc、コマンドを含めたディストリビューション全体で、それぞれのパーツを開発している人たちがそれぞれのコミュニティで作成したものを組み合わせるのだから、APIの互換性など考慮されてうまく開発されるはずがないことを、カーネルの観点で述べているに過ぎない。

Linuxカーネルの進化が速いことにも言及されている。しかし、例えばこれは、現在あるいくつかのLinux/UNIXディストリビューション(カーネルだけでなく、ドライバ、ライブラリ、コマンドを含むとして)と基本的な考え方は同じだと思われる。新しいものを、互換性を切り捨てて開発するのであれば、それは従来とは別物であり、切り離さざるを得ないと思われる。

結果として、FedoraRedHatDebian unstable/testing/stable、OpenSolaris/Solaris10など、安定で固定されたブランチとガンガン進化するブランチを分けざるを得ないように、個人的には思う。
理想的な、コンパクトなソースで最新機能満載なカーネルを設計すること、従来互換のメンテナンスを行わなければならないこと。このトレードオフ
もちろん、同時にするのは不可能ではないにしても、かなりの労力(人的リソース)が必要になると思う。
が、
従来のシステム(Linuxカーネルの場合は、ドライバが特に問題となると思われる)を使い続けているユーザーを切り捨てて行くという思想には、個人的にはついて行けない。

繰り返しになるが、Linuxカーネルの思想ドキュメントによれば、最新カーネルについていくためにはドライバがメインカーネルに組み込まれれば良いと記載されている。
しかし、現実的には、コミュニティに対する発言力や政治力の問題で、メインカーネルに組み込まれないままにされたドライバがどのくらいあったかと考えると。。。

想像するだけで恐ろしい。

また、今後もこの思想で開発が行われるのならば、メインカーネルのコミュニティでの発言力の強いメンバーに、自分が開発したドライバの必要性を理解させることができない開発者は当然、メインカーネルに組み込ませてもらえない。結果として、そのドライバが必要とされる間はずっと、どんどん変化するカーネルに合わせて、自分が開発したドライバを書き換えなければならない。。。

Linuxディストリビュータも同じだ。メインカーネルでセキュリティ脆弱性の修正が行われても、現在そのディストリビュータが提供しているカーネルに対しては、Linuxカーネルメイン開発者からはフォローされない。自分たちで、メインカーネルの修正のうち必要なものを、かつ一歩間違えば大きく変更されている最新カーネルから、自分たちがディストリビューションリリースで提供しているカーネルにバックポートしなければならない。
もちろん、ディストリビュータが提供しているパッケージそれぞれについても同じことが言える。
しかし、通常のソフトウェアと違い、たった数行の修正が大きなレベルダウンを引き起こしかねない、巨大な一枚岩のソフトウェアであるLinuxカーネルに対して、それを行わなければならない、というところが恐ろしい。
つまり、Linuxカーネル開発者として認められていない人が「ユーザーに信頼される」ディストリビューターになるためには、少なくとも最新Linuxカーネルのパッチを常に監視し、例えば重要なセキュリティ脆弱性が検出されたとき、それに関するパッチなどを、早急に、自分が配布しているカーネルに(その時既に最新版カーネルの中身が大きく変更されていたとしても)反映し、提供しなければならないことになる。
逆に言えば、Linuxカーネルの内部をきちんと理解し、かつ最新版カーネルの変更を追っているようなメンバーがいないLinuxディストリビューションを使用するのは、ユーザーの観点からすると、非常に危険、ということになる。
以前から思っていたことではあるが、カーネルとパッケージを寄せ集め、リリースするだけでは、本当の意味でのディストリビューターではないのだ。常に、(機能という意味ではなく、安定性、セキュリティ脆弱性などに対する安全性、という意味で)最新のものを提供できなければ、意味が無いのだから。
それを行うことを困難にしているのが、Linuxカーネルの開発思想、というところが、悲しいところだ。

「安定したAPIはナンセンス」の文書を読んで、いかにLinuxカーネル開発の中心にいるメンバー以外を軽視しているかがわかった。

こんな恐ろしい思想のカーネルをベースとしたオペレーティングシステム、また、ライブラリ、コマンドも含めると、ディストリビューションになるが、これらを、「Linux」という名前の総称だけが先行して利用している人のうち、何人が理解しているのだろうか。。。

Windowsが98/98SEからMEに変わったときや、XPからVistaに変わったときのように、明らかに大々的に変更したことをアピールしたMicrosoftでさえ、(新OSの互換性、安定性を気にするユーザーほど)なかなか新OSに移行してくれないことで苦労しているというのに。結局、ある程度危険性を意識しているユーザは、WindowsではME(安定性、リソース使用量の大きさ、結果的に体感速度などに影響。)ではなく2000を選択したり、現在もVistaを買い控え、Windows7を待っている感じが見受けられる。
現在は、Windows系に対する"ターゲットがコンシューマ/中小規模企業ユーザという意味で"対抗勢力の中では一番手であるLinuxの、中枢であるカーネルが、もっと恐ろしい思想で開発されているとは。

個人的な話で言えば、D01NX系で使用されているチップVMB5000のドライバも、2.6.19ベースのまま放置されている理由が、すごくわかった気がする。