Для успешного запуска программы необходимо соответствие трех вещей:
- Набор инструкций ЦП (например, x86 на вашем ПК, ARM на вашем мобильном телефоне, PowerPC на некоторых Apple Mac, байт-код Java для апплетов Java, CLI для приложений ".Net" / Mono)
- Двоичный формат файла (например, PE / COFF ".exe" для Microsoft Windows, .jar для Java-апплетов, PE32 ".exe", ELF в Unix / Linux)
- Интерфейс прикладного программирования ; (Например, POSIX в Linux / Unix, Cocoa для 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: Common Language Run-time / Base Class Library (CLR) - это API; VES - это загрузчик, а Common Language Interface (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 - это реализация Win32 API, которая может работать на Mac OSX, MS Windows и Linux.
- Вы можете запустить Mono поверх Wine , поверх любой операционной системы.
- Вы можете запустить Wine поверх Qemu , поверх любой архитектуры процессора.
Таким образом, Mono запускает приложения CLR .exe, а Wine - приложения Win32 .exe. Единственное, что общего в том, что имена файлов заканчиваются на «.exe»; содержимое совершенно другое и несовместимое, поэтому вам нужен правильный .
Так же, как интерпретатор Python выдаст ошибку при представлении с Perl (и наоборот), интерпретатор CLR выдаст ошибку при представлении с x86 + Win32 или JVM + Java bytecode. Если вы можете опубликовать ссылку на конкретную программу, которую вы хотите запустить, я или кто-то еще должны быть в состоянии сообщить вам точный набор инструкций, формат файла и API, для которого он был разработан, и что вам нужно установить в Linux запустить его. Надеюсь, это поможет!
(Иногда вам может даже понадобиться и то и другое. Например, симулятор поезда Openbve - это C # и скомпилирован в PE / COFF + CLI + CLR, но при желании можно использовать двоичные плагины C, скомпилированные для PE / COFF + Win32 + x86. В этом случае вы Нужна версия Mono для Win32 под Wine. Если архитектура процессора также отличается, то потребуется эмуляция, поэтому Mono для Wine под Qemu).