Linuxカーネルのアップグレード後にVMwareカーネルモジュールを再コンパイルする必要があるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/827862

質問

Linuxカーネルのアップグレード後、vmware-config.plを使用して再構成作業(カーネルモジュールのビルドを含む)を行うまで、VMWareサーバーを起動できません。

Windows VMWareホストを最新のWindows Service Packで更新する場合、通常、VMWareを実行するために何もする必要はありません。

VMWareの動作がLinuxとWindowsで異なるのはなぜですか?この再コンパイルアクションは、Windows上のLinuxプラットフォームにメリットをもたらしますか?

役に立ちましたか?

解決

Linuxカーネルドライバーインターフェースをご覧ください。

  

これは、Linuxにバイナリカーネルインターフェイスがなく、安定したカーネルインターフェイスがない理由を説明するために書かれています。この記事では、カーネルからユーザー空間へのインターフェースではなく、カーネル内のインターフェースについて説明していることに注意してください。カーネルからユーザー空間へのインターフェイスは、アプリケーションプログラムが使用するものであるsyscallインターフェイスです。そのインターフェースは長期にわたって非常に安定しており、壊れることはありません。 0.9より前のカーネルでビルドされた古いプログラムがあり、それでも最新の2.6カーネルリリースで正常に動作します。このインターフェースは、ユーザーとアプリケーションプログラマーが安定していることを期待できるインターフェースです。

これは、Linuxカーネル開発者の大部分の見解を反映しています。 カーネル内の実装の詳細とAPIをいつでも自由に変更できるため、開発をより迅速かつ効率的に行うことができます。

リリース間でカーネル内インターフェイスを同一にするという約束がなければ、VMWareのようなバイナリカーネルモジュールが複数のカーネルで確実に動作する方法はありません。

一例として、新しいカーネルリリースでいくつかの構造が変更された場合(パフォーマンスの向上、機能の追加、その他の理由により)、バイナリVMWareモジュールは古い構造レイアウトを使用して壊滅的な損害を引き起こす可能性があります。ソースからモジュールを再度コンパイルすると、新しい構造レイアウトがキャプチャされるため、フィールドが削除または名前変更されたり、別の目的が与えられたりした場合でも、100%ではありませんが動作する可能性が高くなります。

関数の引数リストが変更されたり、名前が変更されたり、使用できなくなったりした場合、同じソースコードからの再コンパイルも機能しません。モジュールは新しいカーネルに適応する必要があります。誰もがソースを持っているべきであり、(誰かを見つけることができるので)それに合わせてそれを修正することができます。 "エンドノードへの作業のプッシュ"ネットワーキングとフリーソフトウェアの両方で一般的なアイデアです。[Linuxカーネルの外部の開発者の]リソースは[バックボーンの] / [Linux開発者の]限られたリソースよりも大きいため、取引-offを使用すると、前者により多くの作業が行われます。

一方、Microsoftはバイナリドライバーの互換性を可能な限り保持する必要があると判断しました。プロプライエタリな世界でプレイしているため、選択肢がありません。ある意味で、これにより、動いているターゲットに直面しなくなった外部開発者や、何も変更する必要のないエンドユーザーにとって、はるかに簡単になります。欠点として、これにより、Microsoftは下位互換性を維持するように強制されます。これは、Microsoftの開発者にとって(せいぜい)時間を消費し、(最悪の場合)非効率であり、バグを引き起こし、前進を妨げます。

他のヒント

Linuxには安定したカーネルABIがありません-データ構造の内部レイアウトなどはバージョンごとに変更されます。新しいカーネルでABIを使用するには、VMWareを再構築する必要があります。

一方、Windowsには非常に安定したカーネルABIがあり、サービスパックごとに変化しません。

bdonlanの答えに追加するために、ABIの互換性はさまざまなものです。一方で、カーネルの新しいバージョンで動作するバイナリモジュールとドライバーを配布できます。一方、カーネルプログラマーは、後方互換性を維持するために大量のグルーコードを追加する必要があります。 Linuxはオープンソースであり、カーネル開発者が許可されているかどうかに関係なくため、バイナリモジュールを配布する能力はそれほど重要ではありません。利点として、Linuxカーネル開発者は、カーネルを改善するためにデータ構造を変更するときにABIの互換性について心配する必要がありません。長い目で見れば、これによりカーネルコードがよりきれいになります。

これは、LinuxとWindowsが異なる文化環境と期待で開発された結果です。 http:// www.joelonsoftware.com/articles/Biculturalism.html 。つまり、Windowsはユーザーに適した設計になっていますが、Linuxはオープンソース開発者に適した設計に進化しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top