回答:
プログラムを正常に実行するには、次の3つが一致する必要があります。
エミュレーター/インタープリター(他のCPU命令セット用)、追加のファイルローダー(外部ファイル形式用)、および追加のAPIを提供する追加のプログラミングライブラリにより、3つすべてに一致する可能性を高めることができます。
また、一部のプロセッサは複数の命令セットをネイティブに実行できることに注意してください。PCには、x86およびamd64命令セットが含まれていることがよくあります。ARMプロセッサは、ARM32 / Thumb / Java bytecode / ThumbEEの 4つを実行できます。一部のオペレーティングシステムは、複数のAPIをネイティブに提供することもできます(Microsoft WindowsはWin32とPOSIXを提供します)。
それ以外の場合は、追加のソフトウェアが必要です。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は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
短い答え:
.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アプリケーションを実行できます。
file *.exe
すると、CPU命令セットとファイルタイプに関する情報が表示されます。ネイティブWin32 API呼び出しも使用するCLI / CLR( ".Net" / Mono)アプリケーションの場合、それを実行するか、file *.dll
ネイティブx86 + Win32として表示されるファイルを探す必要があります。