5

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

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

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

4

4 に答える 4

14

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

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

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

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

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

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

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

于 2009-05-06T03:38:04.587 に答える
3

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

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

于 2009-05-06T03:09:36.010 に答える
1

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

于 2011-09-30T14:43:40.607 に答える
1

bdonlan の回答に追加すると、ABI の互換性は混合バッグです。一方では、新しいバージョンのカーネルで動作するバイナリ モジュールとドライバを配布できます。一方で、カーネル プログラマーは、下位​​互換性を維持するために大量のグルー コードを追加する必要があります。Linux はオープンソースであり、カーネル開発者は許可されているかどうかにかかわらず であるため、バイナリ モジュールを配布する機能はそれほど重要ではないと考えられています。利点として、Linux カーネル開発者は、カーネルを改善するためにデータ構造を変更する際に、ABI の互換性について心配する必要がありません。長期的には、これによりカーネル コードがよりクリーンになります。

于 2009-05-06T03:23:48.647 に答える