📄 stable_api_nonsense.txt
字号:
信じて欲しい。このような方法でサポートを続けようとするなら、あなたはいずれ正気を失うだろう。遠い昔、私はそれがいかに困難なことか、身をもって学んだのだ・・・不変のカーネルソースレベルインターフェース------------------------------------------メインカーネルツリーに含まれていない Linux カーネルドライバを継続してサポートしていこうとしている人たちとの議論においては、これは極めて「引火性の高い」話題である。[訳注(2)]訳注(2)「引火性の高い」の原文は "volatile"。volatile には「揮発性の」「爆発しやすい」という意味の他、「変わりやすい」「移り気な」という意味がある。「(この話題は)爆発的に激しい論争を巻き起こしかねない」ということを、「(カーネルのソースレベルインターフェースは)移ろい行くものである」ということを連想させる "volatile" という単語で表現している。Linux カーネルの開発は継続的に速いペースで行われ、決して歩みを緩めることがない。その中でカーネル開発者達は、現状のインターフェースにあるバグを見つけ、より良い方法を考え出す。彼らはやがて、現状のインターフェースがより正しく動作するように修正を行う。その過程で関数の名前は変更されるかもしれず、構造体は大きく、または小さくなるかもしれず、関数の引数は検討しなおされるかもしれない。そのような場合、引き続き全てが正常に動作するよう、カーネル内でこれらのインターフェースを使用している個所も全て同時に修正される。具体的な例として、カーネル内の USB インターフェースを挙げる。USBサブシステムはこれまでに少なくとも3回の書き直しが行われ、その結果インターフェースが変更された。これらの書き直しはいくつかの異なった問題を修正するために行われた。 - 同期的データストリームが非同期に変更された。これにより多数のド ライバを単純化でき、全てのドライバのスループットが向上した。今 やほとんど全ての USB デバイスは、考えられる最高の速度で動作し ている。 - USB ドライバが USB サブシステムのコアから行う、データパケット 用のメモリ確保方法が変更された。これに伴い、いくつもの文書化さ れたデッドロック条件を回避するため、全ての USB ドライバはより 多くの情報を USB コアに提供しなければならないようになっている。このできごとは、数多く存在するクローズソースのオペレーティングシステムとは全く対照的だ。それらは長期に渡り古い USB インターフェースをメンテナンスしなければならない。古いインターフェースが残ることで、新たな開発者が偶然古いインターフェースを使い、正しくない方法で開発を行ってしまう可能性が生じる。これによりシステムの安定性は危険にさらされることになる。上に挙げたどちらの例においても、開発者達はその変更が重要かつ必要であることに合意し、比較的楽にそれを実行した。もし Linux がソースレベルでインターフェースの不変性を保証しなければならないとしたら、新しいインターフェースを作ると同時に、古い、問題のある方を今後ともメンテナンスするという余計な仕事を USB の開発者にさせなければならない。Linux の USB 開発者は、自分の時間を使って仕事をしている。よって、価値のない余計な仕事を報酬もなしに実行しろと言うことはできない。セキュリティ問題も、Linux にとっては非常に重要である。ひとたびセキュリティに関する問題が発見されれば、それは極めて短期間のうちに修正される。セキュリティ問題の発生を防ぐための修正は、カーネルの内部インターフェースの変更を何度も引き起こしてきた。その際同時に、変更されたインターフェースを使用する全てのドライバもまた変更された。これにより問題が解消し、将来偶然に問題が再発してしまわないことが保証される。もし内部インターフェースの変更が許されないとしたら、このようにセキュリティ問題を修正し、将来再発しないことを保証することなど不可能なのだ。カーネルのインターフェースは時が経つにつれクリーンナップを受ける。誰も使っていないインターフェースは削除される。これにより、可能な限りカーネルが小さく保たれ、現役の全てのインターフェースが可能な限りテストされることを保証しているのだ。(使われていないインターフェースの妥当性をテストすることは不可能と言っていいだろう)これから何をすべきか-----------------------では、もしメインのカーネルツリーに含まれない Linux カーネルドライバがあったとして、あなたは、つまり開発者は何をするべきだろうか?全てのディストリビューションの全てのカーネルバージョン向けにバイナリのドライバを供給することは悪夢であり、カーネルインターフェースの変更を追いかけ続けることもまた過酷な仕事だ。答えは簡単。そのドライバをメインのカーネルツリーに入れてしまえばよい。(ここで言及しているのは、GPL に従って公開されるドライバのことだということに注意してほしい。あなたのコードがそれに該当しないならば、さよなら。幸運を祈ります。ご自分で何とかしてください。Andrewと Linus からのコメント<Andrew と Linus のコメントへのリンクをここに置く>をどうぞ)ドライバがメインツリーに入れば、カーネルのインターフェースが変更された場合、変更を行った開発者によってドライバも修正されることになるだろう。あなたはほとんど労力を払うことなしに、常にビルド可能できちんと動作するドライバを手に入れることができる。ドライバをメインのカーネルツリーに入れると、非常に好ましい以下の効果がある。 - ドライバの品質が向上する一方で、(元の開発者にとっての)メンテ ナンスコストは下がる。 - あなたのドライバに他の開発者が機能を追加してくれる。 - 誰かがあなたのドライバにあるバグを見つけ、修正してくれる。 - 誰かがあなたのドライバにある改善点を見つけてくれる。 - 外部インターフェースが変更されドライバの更新が必要になった場合、 誰かがあなたの代わりに更新してくれる。 - ドライバを入れてくれとディストロに頼まなくても、そのドライバは 全ての Linux ディストリビューションに自動的に含まれてリリース される。Linux では、他のどのオペレーティングシステムよりも数多くのデバイスが「そのまま」使用できるようになった。また Linux は、どのオペレーティングシステムよりも数多くのプロセッサアーキテクチャ上でそれらのデバイスを使用することができるようにもなった。このように、Linux の開発モデルは実証されており、今後も間違いなく正しい方向へと進んでいくだろう。:)------この文書の初期の草稿に対し、Randy Dunlap, Andrew Morton, DavidBrownell, Hanna Linder, Robert Love, Nishanth Aravamudan から査読と助言を頂きました。感謝申し上げます。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -