Berhasil menjalankan suatu program mensyaratkan bahwa tiga hal cocok:
- Set instruksi CPU (Misalnya. X86 di PC Anda, ARM di ponsel Anda, PowerPC di beberapa Apple Mac, Java bytecode untuk Java Applet, CLI untuk aplikasi ".Net" / Mono)
- Format File Biner (Misalnya. PE / COFF ".exe" untuk Microsoft Windows, .jar untuk Java Applet, PE32 ".exe", ELF di Unix / Linux)
- Antarmuka Pemrograman Aplikasi ; (Mis. POSIX di Linux / Unix, Cocoa untuk Mac OSX, Win32 di Microsoft Windows, Perpustakaan Kelas Dasar untuk aplikasi ".Net" / Mono).
Anda dapat meningkatkan peluang untuk mencocokkan ketiganya dengan memiliki emulator / juru bahasa (untuk set instruksi CPU lainnya), dengan memiliki pemuat file tambahan (untuk format file asing), dan memiliki pustaka pemrograman tambahan yang menyediakan lebih banyak API.
Perhatikan juga, bahwa beberapa prosesor secara native dapat menjalankan lebih dari satu set instruksi; PC cukup sering memiliki set instruksi x86 dan amd64 ; sebuah ARM prosesor dapat mengeksekusi empat: ARM32 / Thumb / bytecode Java / ThumbEE . Beberapa sistem operasi dapat menyediakan lebih dari satu API secara asli juga (Microsoft Windows menyediakan Win32 dan POSIX ).
Untuk yang lainnya, Anda memerlukan perangkat lunak tambahan. Untuk menjalankan program Java, Anda memerlukan tiga bagian yang tercantum di atas untuk membuatnya berfungsi: program Java Virtual Machine untuk menjalankan bytecode; cara meluncurkan program Java, dan Java Classlibrary untuk memanggil program. "Java" adalah nama merek di sini untuk beberapa teknologi terpisah yang semula dikembangkan oleh Sun, tetapi bagi pengguna mereka sering diunduh sebagai satu.
Hal yang sama berlaku untuk ".Net", yang merupakan merek dagang pemasaran untuk beberapa teknologi berbeda yang pada awalnya dikembangkan oleh Microsoft: The Common Language Run-time / Base Class Library (CLR) adalah API; VES adalah loader dan Common Language Interface (CLI) adalah set instruksi.
Anda tidak harus mengunduh teknologi itu dari Microsoft, dari Sun, atau dari Intel hanya karena mereka awalnya menemukan sesuatu. AMD membuat prosesor kompatibel dengan standar Intel; baik Apache ("Harmony") dan Google ("Android Dalvik") keduanya membuat suite mirip Java; dan Mono menyediakan suite CLR / CLI / VES. Yang penting adalah bahwa setiap orang menggunakan standar yang sama, menjadikannya kompatibel. Cakram DVD akan diputar di sembarang pemutar DVD yang memenuhi standar, dan laman web HTML akan merender di Peramban Web apa pun yang memenuhi standar HTML.
- Mono adalah suite CLR / CLI / VES yang dapat berjalan di Mac OSX, MS Windows dan Linux.
- Wine adalah implementasi Win32 API yang dapat berjalan di Mac OSX, MS Windows dan Linux.
- Anda dapat menjalankan Mono di atas Wine , di atas sistem operasi apa pun.
- Anda dapat menjalankan Wine di atas Qemu , di atas arsitektur CPU apa pun.
Jadi Mono membuat aplikasi .exe CLR berjalan, dan Wine membuat aplikasi Win32 .exe berjalan. Satu-satunya kesamaan adalah bahwa nama file berakhir dengan ".exe"; isinya sangat berbeda dan tidak kompatibel, jadi Anda perlu yang benar .
Sama seperti interpreter Python akan kesalahan ketika disajikan dengan Perl (dan visa versa), seorang interpreter CLR akan kesalahan ketika disajikan dengan x86 + Win32, atau bytecode JVM + Java. Jika Anda dapat memposting tautan ke program tertentu yang ingin Anda jalankan, saya atau orang lain harus dapat memberi tahu Anda set instruksi yang tepat, format file dan API yang dirancang untuknya, dan untuk apa Anda perlu menginstal di Linux untuk menjalankannya. Semoga itu bisa membantu!
(Kadang-kadang Anda bahkan mungkin membutuhkan keduanya. Misalnya, simulator kereta Openbve adalah C # dan dikompilasi ke PE / COFF + CLI + CLR, tetapi secara opsional dapat menggunakan plugin biner C yang dikompilasi untuk PE / COFF + Win32 + x86. Dalam kasus ini, Anda perlu versi Win32 dari Mono di bawah Wine. Jika arsitektur CPU juga, berbeda yang perlu ditiru; jadi Mono di bawah Wine di bawah Qemu).