MicrosoftはLinuxカーネルにコードを注入したい-それを把握しましょう

この記事では、MicrosoftがLinuxカーネルにコードを挿入したいという一般的な狂気を払拭したいと思います。 最初に、これがどのようなコードであるかを見てみましょう。 プレスリリース[1]では、Microsoftはいつものようにunningしており、これはLinuxコミュニティ向けに記述されたドライバーコードであると述べています。 正式にはこれは事実ですが、実際には、MicrosoftベースのHyper-V仮想マシン内のLinuxパフォーマンスを改善するために、カーネルに「パンツサポートシステム」が導入されています。 比較のために、他の仮想マシン(VMwareおよびVirtualBox)も独自のカーネルモジュールとツールをゲストOSにインストールしています。 ただし、VMwareとSunは独立してサポートしているため、このコードはバニラカーネルには含まれていません。



それでも、ゲストツールがインストールされていなくても、VMwareおよびSun仮想マシンはLinuxをゲストOSとして完全に起動できます(ネットワークが実行され、XサーバーはゲストOSのインストール直後です)。 MSエバンジェリストがハブに集中していることを考えると、ゲストOSのドライバーが構築されていない場合、ネットワークはHyper-Vで動作しますか?



なぜマイクロソフトはカーネルにコードを導入する必要があるのですか? 結局のところ、仮想マシンをサポートするためのツリー外モジュールには大きな利点があります。そのようなモジュールのコードは、対応するバージョンの仮想マシンとともに配布されるため、このバージョンのVMのすべての新機能のサポートが含まれる場合があります。 また、コードがカーネルに含まれている場合、仮想マシンはゲストOSの特定のカーネルバージョンに含まれているコードのバージョンで動作する必要があります。 データ交換プロトコルが将来変更または拡張される場合、これによりVMコードが大幅に複雑になる可能性があります。 または、ソリューションはMicrosoftのスタイルになります。VMの後にリリースされるカーネルを使用して、このバージョンのVMで実行するのに「適した」カーネルのサークルを制限します(したがって、新しいVMの機能のサポートを含みます)。



ここ[2]では、カーネルに含めることが提案されているコード自体を見つけることができます。 Microsoftは、WinAPIの最高の伝統をすべてコードに取り入れました。





また、Linuxカーネルのコーディングスタイルルールを無視します。コードはNTカーネルが記述されているスタイルで記述されます。 インデントは表になっていますが、コードの多くの場所では、著者によると「TAB = 4スペース」がはっきりと見えます。 300行以上のコード行があります。 CamelCaseによって使用されます。 コメントのフォーマットは異なります(コードにはいくつかの異なるスタイルがあります)。 一部の場所では、ハンガリー語の表記法に向かってクリープがありました(接頭辞、PFN_ON_OPEN-関数へのポインタを使用して変数名に型が追加された場合)。



比較のために、HTC Dreamをサポートするための最近の2つの投稿、 lkml.org / lkml / 2009/6/29/163lkml.org/lkml/2009/6/29/148を参照することをお勧めします。クリーンアップコードが必要な両方のパッチについて書いています。 それでも、パッチ自体を直接見ると、どこでもコードスタイルが必要なLinuxカーネルコーディングスタイルに対応しており、明示的な自転車(リンクリストなど)がないことがわかります。 それにも関わらず、このコードはソフトウェアの分野で独自の開発を行っているサードパーティ企業によっても書かれています(Googleの著作権はコードにあります)が、彼らの憲章はLinuxカーネルに登りません。



もちろん、コードの明らかな欠陥が解決される前に、コードはLinusツリーでのステージングにさえ入らないでしょう。 しかし、マイクロソフトだけでなく、コミュニティもこのエラー修正にエネルギーを浪費しています。 問題は、なぜ、そして最も重要なのはなぜですか? 結局のところ、未加工のドライバーがカーネルに含まれておらず、開発者に送られてコードを磨き、CodingStyle対応に磨いた場合の例を簡単に見つけることができます。



(もし)Microsoftのコードが磨かれ、ステージングを残してメインドライバーツリーに含まれている場合でも、カーネル開発者の問題はそこで終わりません。 現在、カーネル開発のルールに従って、誰かがカーネルサブシステム(たとえば、SCSI)のインターフェイスを変更した場合、Hyper-V VMのドライバーを含む、このサブシステムを使用するすべてのドライバーの操作性を確保する義務があります。 Microsoftは、ドライバーを最新の状態に保つために無料の工数を取得します。 利益!



参考:VMwareは6年以上にわたってVMwareゲストツールを独自にサポートしていますが、VMwareゲストツールにはカーネルモジュールといくつかのアプリケーションの両方が含まれています。



[1] www.microsoft.com/presspass/features/2009/Jul09/07-20LinuxQA.mspx

[2] www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-05-staging



All Articles