ワインとモノの違い


31

私の知る限り、WineとMonoはどちらもUbuntuでWindowsアプリケーションを実行するために使用されます。

だから私は疑問に思っていました

  1. それらの違いは何ですか?両方とも仮想マシンですか?または、それぞれが他のカテゴリに属しますか?
  2. どの種類のWindowsアプリケーションにどれを使用するのが良いですか?たとえば、.net Frameworkを必要とする場合と必要としない場合があります。
  3. 彼らはお互いに依存していますか?一緒にインストールする必要がありますか?または、それぞれが他の存在なしに独立して動作しますか?

よろしくお願いします!

回答:


34

プログラムを正常に実行するには、次の3つが一致する必要があります。

  • CPU命令セット(PCのx86、携帯電話のARM、一部のApple MacのPowerPC、JavaアプレットのJavaバイトコード、「。Net」/ MonoアプリケーションのCLI
  • バイナリファイル形式(たとえば、Microsoft Windowsの場合はPE / COFF ".exe" 、Javaアプレットの場合は.jar、Unix / Linuxの場合はPE32 ".exe"、ELF
  • インターフェイスのプログラミングアプリケーション。(たとえば、Linux / Unix上のPOSIX、Mac OSX用のCocoa、Microsoft Windows用のWin32、「。Net」/ Monoアプリケーション用の基本クラスライブラリ)。

エミュレーター/インタープリター(他のCPU命令セット用)、追加のファイルローダー(外部ファイル形式用)、および追加のAPIを提供する追加のプログラミングライブラリにより、3つすべてに一致する可能性を高めることができます。

また、一部のプロセッサは複数の命令セットをネイティブに実行できることに注意してください。PCには、x86およびamd64命令セットが含まれていることがよくあります。ARMプロセッサは、ARM32 / Thumb / Java bytecode / ThumbEEの 4つを実行できます。一部のオペレーティングシステムは、複数のAPIをネイティブに提供することもできます(Microsoft WindowsはWin32POSIXを提供します)。

それ以外の場合は、追加のソフトウェアが必要です。Javaプログラムを実行するには、動作させるために上記の3つの部分が必要です。バイトコードを実行するJava仮想マシンプログラム。Javaプログラムを起動する方法、およびプログラムが呼び出すJavaクラスライブラリ。「Java」は、元々はSunによって開発されたいくつかの個別の技術のブランド名ですが、ユーザーにとっては1つとしてしばしばダウンロードされます。

同じことは、元々マイクロソフトによって開発されたいくつかの異なる技術のマーケティングブランドである「.Net」にも当てはまります。共通言語ランタイム/ベースクラスライブラリ(CLR)はAPIです。VESはローダーであり、共通言語インターフェイス(CLI)は命令セットです。

もともと何かを発明したからといって、Microsoft、Sun、またはIntelからこれらのテクノロジーをダウンロードする必要はありません。AMDは、プロセッサをIntelの標準に適合させます。Apache( "Harmony")とGoogle( "Android Dalvik")は両方ともJavaのようなスイートを作成します。MonoはCLR / CLI / VESスイートを提供します。重要なことは、誰もが同じ標準を使用し、互換性を持たせることです。DVDディスクは標準を満たすDVDプレーヤーで再生され、HTML WebページはHTML標準を満たすWebブラウザーでレンダリングされます。

  • Monoは、Mac OSX、MS Windows、Linuxで実行できるCLR / CLI / VESスイートです。
  • Wineは、Mac OSX、MS Windows、およびLinuxで実行できるWin32 API実装です。
  • あなたは実行できるモノをの上にワインのいずれかのオペレーティングシステムの上に、。
  • あなたは実行することができますワインをの上にQEMU任意のCPUアーキテクチャの上に、。

したがって、MonoはCLR .exeアプリケーションを実行し、WineはWin32 .exeアプリケーションを実行します。唯一の共通点は、ファイル名の末尾が「.exe」であることです。内容は完全に異なり、互換性がないため、適切なものが必要です。

PythonインタープリターがPerl(およびその逆)で表示されるときにエラーが発生するように、CLRインタープリターはx86 + Win32またはJVM + Javaバイトコードで表示されるときにエラーを発生します。実行したい特定のプログラムへのリンクを投稿できる場合、私自身または他の誰かが、正確な命令セット、ファイル形式とAPIの設計、およびLinuxにインストールする必要があるものを伝えることができるはずです。それを実行します。お役に立てば幸いです!

(場合によっては両方が必要になることもあります。たとえば、OpenbveトレインシミュレータはC#であり、PE / COFF + CLI + CLRにコンパイルされますが、オプションでPE / COFF + Win32 + x86用にコンパイルされたCバイナリプラグインを使用できます。この場合、 WineでのMonoのWin32バージョンが必要CPUアーキテクチャもエミュレートが必要な場合は異なるため、QemuでのWineでのMono


22

短い答え:

.NETはMicrosoftのJavaに対する答えであり、MonoはJavaのオープンソース実装です。Wineはネイティブexe用であり、Monoとは何の関係もありません。ただし、他のネイティブWindowsソフトウェアのように、それを使用して.NETランタイムを実行できる場合があります。


長い答え:

WineとMono(および.NET)の違いを理解するには、ネイティブマシンコードの実行可能ファイルと「共通言語ランタイム」または「仮想マシン」実行可能ファイルの違いを理解する必要があります。

ネイティブマシンコード実行可能ファイルは、プロセッサ固有の命令コードを使用し、プロセッサによって直接実行されます。つまり、異なるプロセッサ用に再コンパイルする必要があります。Wineは、この実行可能コードを直接実行し、それが行うライブラリ呼び出しをキャッチし、Win32 APIの独自の実装にリダイレクトすることにより、Windows用のネイティブマシンコード実行可能ファイルを実行できます。

「CLR」または「VM」実行可能ファイルは、1つのプロセッサに固有のものではありません。プロセッサで実行できるようにするには、追加のソフトウェアが必要です。Mono / .NETは、この種のシステムの一例です。.NETプログラムをWindowsで実行する場合でも、.NETランタイムをインストールする必要があります。Javaも同じように機能します。

そう:

1)WineとMonoの違い:WineはWindows用に作成されたネイティブマシンコード実行可能ファイルを実行するためのものであり、Monoは特定のプラットフォーム用に必ずしも作成されないMono / .NET実行可能ファイルを実行するためのものです。LinuxにMonoをインストールすることは、Windowsに.NETランタイムをインストールすることと同等です。

2)実行するプログラムが.NETをまったく使用しない場合、Wineを使用する必要があります。ここでは、Monoはまったく役に立ちません。

ただし、プログラムが.NETを使用する場合、次の2つのオプションがあり、どちらかが機能する場合と機能しない場合があります。

  • Monoを使用して実行することができます。.NETプログラムが、Windows用に作成された多くの(ただしすべてではない).NETアプリケーションが実行するwin32 APIのネイティブ関数も使用する場合、これは失敗します。

  • または、Wine内にWindows用のMicrosoft .NETランタイムインストールし、それを介して.NETアプリケーションを実行することもできます。この場合、Monoはまったく使用しません。

3)WineとMonoは互いに依存していませんが、上記のように、WineのMicrosoft .NETランタイムを使用してMono / .NETアプリケーションを実行できます。


ありがとう!(1)アプリケーションが.NETとwin32の両方に依存している場合、唯一の方法は.NETをWineにインストールしてからアプリケーションをWineにインストールすることですか?(2)アプリケーションが.NETやwin32に依存しているかどうかを知る方法は?
ティム

1
入力file *.exeすると、CPU命令セットとファイルタイプに関する情報が表示されます。ネイティブWin32 API呼び出し使用するCLI / CLR( ".Net" / Mono)アプリケーションの場合、それを実行するか、file *.dllネイティブx86 + Win32として表示されるファイルを探す必要があります。
11

WineにMono for Windowsをインストールすることもできますが、Wine FAQによると、.NETランタイムよりも動作する可能性は低くなります。.NETプログラムがネイティブのwin32呼び出しを使用しているかどうかを知る簡単な方法はありません。さまざまな方法があります。最善の方法は、まずMonoを試すことです。うまくいかない場合は、Wine + .NETを試します。
アリステアバクストン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.