Для успішного запуску програми потрібно відповідати трьом речам:
- Набір інструкцій щодо процесора (наприклад, x86 на вашому ПК, ARM в мобільному телефоні, PowerPC в деяких Apple Macs, байт-код Java для Java-апплетів Java, CLI для додатків ".Net" / Mono)
- Бінарний формат файлу (напр. PE / COFF ".exe" для Microsoft Windows, .jar для Java Applets, PE32 ".exe", ELF на Unix / Linux)
- Інтерфейс програмування програм ; (Наприклад, POSIX для Linux / Unix, какао для Mac OSX, Win32 в Microsoft Windows, бібліотека базових класів для додатків ".Net" / Mono).
Ви можете збільшити шанс узгодження всіх трьох, маючи емулятори / інтерпретатори (для інших наборів інструкцій процесора), маючи додаткові завантажувачі файлів (для іноземних форматів файлів) та додаткові бібліотеки програмування, що надають більше API.
Зауважте також, що деякі процесори можуть спочатку виконувати більше одного набору інструкцій; на ПК досить часто є набори інструкцій x86 та amd64 ; ARM процесор може виконувати чотири: ARM32 / Thumb / Java байткод / ThumbEE . Деякі операційні системи можуть також надавати більше одного API (Microsoft Windows надає Win32 та POSIX ).
Для всього іншого вам потрібно додаткове програмне забезпечення. Для запуску програм Java вам потрібні три перелічені вище частини, щоб вона працювала: програма віртуальної машини Java для запуску байтового коду; спосіб запуску програм Java та Класифікація Java-класів для програм, які можна викликати. "Java" є торговою маркою для декількох окремих технологій, спочатку розроблених Sun, але користувачеві їх часто завантажують як одну.
Те саме стосується ".Net", що є маркетинговою маркою для декількох різних технологій, спочатку розроблених Microsoft: Бібліотека загальної мови / Бібліотека базових класів (CLR) - це API; VES - це завантажувач, а загальний мовний інтерфейс (CLI) - це набір інструкцій.
Не потрібно завантажувати ці технології від Microsoft, від Sun або від Intel лише тому, що вони спочатку щось винайшли. AMD робить процесори сумісними зі стандартами Intel; і Apache ("Гармонія"), і Google ("Android Dalvik") складають набір, схожий на Java; і Mono надає набір CLR / CLI / VES. Важливо те, що всі використовують однакові стандарти, роблячи їх сумісними. DVD-диск буде відтворюватися на будь-якому програвачі DVD, який відповідає стандарту, а HTML-сторінка відображатиметься в будь-якому веб-переглядачі, що відповідає стандартам HTML.
- Mono - це набір CLR / CLI / VES, який може працювати на Mac OSX, MS Windows та Linux.
- Wine - це реалізація API Win32, яка може працювати на Mac OSX, MS Windows та Linux.
- Ви можете запускати Mono поверх Wine , над будь-якою операційною системою.
- Ви можете запускати Wine поверх Qemu , поверх будь-якої архітектури процесора.
Таким чином, Mono змушує запускати програми CLR .exe, а Wine запускає програми Win32 .exe. Єдине спільне - файли закінчуються на ".exe"; вміст зовсім інший і несумісний, тому потрібен правильний .
Так само, як інтерпретатор Python буде помилятися, коли він буде представлений разом з Perl (і навпаки), інтерпретатор CLR помилиться, коли буде представлений з x86 + Win32 або JVM + байт-кодом Java. Якщо ви можете опублікувати посилання на певну програму, яку ви хочете запустити, я або хтось інший повинен мати можливість сказати вам точний набір інструкцій, формат файлу та API, для якого він був розроблений, і що потрібно встановити в Linux запустити його. Сподіваюся, що це допомагає!
(Іноді вам можуть знадобитися і те й інше. Наприклад, тренажер поїзда Openbve - це C # і компілюється в PE / COFF + CLI + CLR, але за бажанням можна використовувати бінарні плагіни C, складені для PE / COFF + Win32 + x86. У цьому випадку ви потрібна версія Win32 Mono під Wine. Якщо також є архітектура процесора, інша, яка потребувала б емуляції; тому Mono під Wine під Qemu).