Різниця між Вином і Моно


31

Наскільки мені відомо, і Wine, і Mono використовуються для запуску програм Windows під Ubuntu.

Тож мені було цікаво

  1. в чому їх відмінності? Вони обидва віртуальні машини? Або кожен належить до якоїсь іншої категорії?
  2. Краще Коли використовувати який для будь-яких видів програм Windows? Наприклад, ті програми, які можуть або не потребують .net Framework.
  3. Вони залежать один від одного? Чи потрібно їх встановлювати разом? Або кожен працює самостійно без існування іншого?

Дякую та з повагою!

Відповіді:


34

Для успішного запуску програми потрібно відповідати трьом речам:

  • Набір інструкцій щодо процесора (наприклад, 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).


22

Коротка відповідь:

.NET - це відповідь Microsoft на Java, а Mono - це реалізація з відкритим кодом. Вино призначене для рідних exes і не має нічого спільного з Mono, за винятком того, що ви, можливо, можете запустити .NET з ним, як і будь-яке інше програмне забезпечення для Windows.


Довга відповідь:

Щоб зрозуміти різницю між Wine та Mono (і .NET), ви повинні зрозуміти різницю між вихідними машинними кодовими кодами та виконуваними файлами "загальної мови", а також виконуваними файлами "віртуальної машини":

Виконані вбудовані машинні коди використовують коди інструкцій, характерні для вашого процесора, і безпосередньо виконуються ним. Це означає, що їх потрібно перекомпілювати для різних процесорів. Wine може запускати вбудовані виконавчі машинні коди для Windows, безпосередньо запускаючи цей виконуваний код і вловлюючи всі виклики бібліотеки, які він робить, перенаправляючи їх на власну реалізацію API Win32.

Виконавчі файли "CLR" або "VM" не характерні для одного процесора: їм потрібен додатковий фрагмент програмного забезпечення для того, щоб процесор запускав їх. Mono / .NET - один із таких прикладів такої системи. Програмам .NET потрібна .NET час роботи, встановлена ​​навіть під час їх запуску в Windows. Java працює так само.

Так:

1) відмінність Wine від Mono: Wine - це запуск виконавчих машинних кодів, створених для Windows, а Mono - для запуску Mono / .NET виконуваних файлів, які не обов'язково створені для будь-якої конкретної платформи. Установка Mono в Linux еквівалентна встановленню .NET виконання в Windows.

2) Якщо програма, яку ви хочете запустити, взагалі не використовує .NET, ви повинні використовувати Wine. Моно тут вам зовсім не допоможе.

Однак якщо програма використовує .NET, у вас є два варіанти, жоден з яких може працювати або не працювати:

  • Ви можете спробувати запустити його за допомогою Mono. Це не вдасться, якщо програма .NET також використовує нативні функції API Win32, які роблять багато (але не всі) .NET-програми, створені для Windows.

  • Крім того, ви можете встановити Microsoft .NET час виконання для Windows всередині Wine, а потім запустити через нього додаток .NET. У цьому випадку ви взагалі не будете використовувати Mono.

3) Wine і Mono взагалі не залежать один від одного, але як зазначено вище, для запуску Mono / .NET додатків ви можете використовувати Microsoft .NET виконання в Wine.


Спасибі! (1) Отже, якщо програма залежить від .NET і win32, єдиний спосіб - встановити .NET на Wine, а потім встановити додаток на Wine? (2) Як дізнатися, чи програма покладається на .NET та / або win32?
Тім

1
Введення тексту file *.exeвідображатиме інформацію про набір інструкцій CPU та тип файлу. Якщо це програма CLI / CLR (".Net" / Mono), яка також використовує вбудовані виклики Win32 API, вам потрібно буде запустити його або шукати будь-які file *.dllфайли, які показують як рідний x86 + Win32.
солод

Ви також можете встановити Mono для Windows у Wine, але відповідно до Wine FAQ, це менш ймовірно, ніж час роботи .NET. Немає простого способу дізнатися, чи програма .NET використовує вбудовані дзвінки win32, оскільки існує маса різних способів, як це можна зробити. Найкраще спробувати спершу Mono, якщо це не працює, спробуйте Wine + .NET.
Алістер Бакстон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.