Wineはどのようにエミュレーターではありませんか?


23

エミュレータを(簡単な方法で)理解しているので、システムXの機能を使用するプログラムの関数呼び出しを、プログラムが実行されるシステムYで使用される機能に変換または置き換えます。Wineプロジェクトは、Wineはエミュレータではないと主張しています。

仮想マシンやエミュレーターのような内部Windowsロジックをシミュレートする代わりに、WineはWindows API呼び出しをオンザフライでPOSIX呼び出しに変換し、他のメソッドのパフォーマンスとメモリペナルティーを排除し、Windowsアプリケーションをデスクトップにきれいに統合できるようにします。

さて、エミュレータと仮想マシンは、Windows以外のホストシステムで内部Windowsロジックをどのようにシミュレートしますか?それは、Windowsシステムコールをホストのそれぞれのコールに変換することではないでしょうか?エミュレーターと非エミュレーター(Wineなど)の違いは、エミュレーターがオペレーティングシステム全体をエミュレートし、アプリケーションがエミュレーターと通信していることを知らずにそのシステムAPIを使用するのに対し、非エミュレーターはアプリケーションの呼び出しをホストの(そして、アプリケーションもそれを知らないかもしれません)?エミュレーターとWineの違いは、間接レベルの追加だけですか?


7
通常、コンピュータ志向の人々が「エミュレータ」という言葉を使用するとき、それらはハードウェアエミュレータ、ハードウェアをエミュレートするソフトウェアを意味します。その意味で、Wineはエミュレーターではありません。ただし、辞書の意味では、WineはWindowsをエミュレートします。その意味で、WineはWindowsエミュレーターと呼ぶことができます。
クリストファーハンマルストローム

1
WINEはわずかに引き伸ばされたバックロニムでもあり、そもそもWINEを作成するために必要な個性に訴える一種のユーモアです。
RBerteig

回答:


29

さて、エミュレータと仮想マシンは、Windows以外のホストシステムで内部Windowsロジックをどのようにシミュレートしますか?それは、Windowsシステムコールをホストのそれぞれのコールに変換することではないでしょうか?

いいえ、または少なくともWINEの意味ではそうではありません。システムコールをユーザー空間で文字通り1対1で変換することによって。エミュレータは、より遠回りのルートを介してこれを抽象的に行います。システムコールを直接変換しません。

真のエミュレーターは、仮想オペレーティングシステムではなく、仮想マシン(x86-64など)を作成します。その後、理論的には、そのスタイルのマシンを対象とする任意のオペレーティングシステムを実行できます。通常、「エミュレータ」にはオペレーティングシステムが含まれますが、それは実際にはエミュレートするものではありません。含まれるOSは、実際のマシンで実行されるOSと同じです。

エミュレータは、ホストマシンとは異なるハードウェアをシミュレートするために使用される場合がありますが、あるOSを別のOSで実行するためにまったく同じハードウェアもシミュレートする場合があります。

WINEは、実際にはウィンドウではないという点でこれとは異なります。Windowsの実際のコピーを使用してx86-64エミュレーターを実行できますが、それはWINEとは異なります。エミュレータよりも実際に効率的であるという彼らの主張は、システムコールを変換するだけのオーバーヘッドは、おそらくVMを実行するオーバーヘッドよりも低いことです。欠点は、WINEがウィンドウにしかなれないことです。通常のVMと同様に、他のOSで使用することはできません。


13

Java仮想マシンを検討してください。JVMは他をエミュレートしません。それらはすべて仕様の実装です。Wineはwin32 APIをエミュレートするのではなく、その実装です。仕様と現実は必ずしも一致しません。Microsoftの実装とWineの実装の両方には、バグのあるコードを機能させるための回避策があり、どの実装が特定のプロジェクトのより良いターゲットであるかは必ずしも明らかではありません。


4

Wineは、Windows API呼び出しをインターセプトし、その場で対応するLinux API呼び出しに変換するシムです。エミュレータまたは仮想マシンは、代わりに物理マシンをエミュレートします。明らかにシムはより効率的ですが、必要な機能を完全に模倣することはできません。


0

エミュレータは、別のOS /プロセッサプラットフォーム上で実行されるエミュレータアプリケーションにOS /プロセッサプラットフォームのロジックと動作を作成することにより、通常Windowsアプリケーションを実行するプロセッサやOSを仮想化します。Wineは、Windows OS /プロセッサーの動作を仮想化せず、Windows OSと同じ抽象化レベルでWindowsアプリケーションを実行します。これは、Windows APIを再実装して、UnixベースのOS /プロセッサプラットフォームで直接実行することにより、これを行います。つまり、WineはWindows OSのコア要素の再実装であり、Windows API呼び出し要求を物理プロセッサと直接通信する同等のUnixベースのコードに直接変換するコンパイル済みDLLのセットです。

これは、Wine + LinuxがWindows自体よりも高速にWindowsアプリケーションを実行できるようにするランタイムコンテキストがあることを意味します。エミュレーターは、そのコードがより高い抽象化レベルでUnixベースのプラットフォームの上でCPU / WinOSプラットフォームをシミュレートするのに忙しいので、その可能性は決してありません。この場合、Windowsアプリケーションを実行するには、より多くの翻訳とインターフェースが必要です。(下図を参照)

要するに、WineはWindowsの再実装であり、Windowsのエミュレーションではありません。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.