Разница между вином и моно

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

Итак, мне было интересно

  1. в чем их различия? Они обе виртуальные машины? Или каждый из них относится к какой-то другой категории?
  2. Лучше, когда использовать, для каких приложений Windows? Например, те приложения, которые могут требовать или не требовать .net Framework.
  3. Они зависят друг от друга? Они должны установить вместе? Или каждый работает независимо без существования другого?

Спасибо и всего наилучшего!

31
задан 21 March 2011 в 05:04

2 ответа

Краткий ответ:

.NET - это ответ Microsoft на Java, а Mono - это реализация с открытым исходным кодом. Wine предназначен для нативных exe и не имеет ничего общего с Mono, за исключением того, что вы можете запустить с ним среду выполнения .NET, как и любое другое родное программное обеспечение Windows.


Длинный ответ:

Чтобы понять разницу между Wine и Mono (и .NET), вы должны понимать разницу между исполняемыми файлами машинного кода и «общеязыковой средой исполнения» или «виртуальной машиной». Исполняемые файлы:

Исполняемые файлы машинного кода используют коды команд, специфичные для вашего процессора, и выполняются им напрямую. Это означает, что они должны быть перекомпилированы для разных процессоров. Wine может запускать исполняемые файлы машинного кода для Windows, непосредственно выполняя этот исполняемый код и перехватывая любые вызовы библиотеки, которые он делает, перенаправляя их в собственную реализацию Win32 API.

Исполняемые файлы «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 также использует встроенные функции из win32 API, что делают многие (но не все) приложения .NET, созданные для Windows.

  • Кроме того, вы можете установить среду выполнения Microsoft .NET для windows внутри Wine, а затем запустить приложение .NET через нее. В этом случае вы вообще не будете использовать Mono.

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

0
ответ дан 21 March 2011 в 05:04

Для успешного запуска программы требуется соответствие трех вещей:

  • Набор инструкций ЦП (Например, x86 на вашем ПК, ARM [ 1121] в вашем мобильном телефоне, PowerPC в некоторых Apple Mac, байт-код Java для Java-апплетов, CLI для приложений «.Net» / Mono)
  • Двоичный формат файла (Например, PE / COFF ".exe" для Microsoft Windows, .jar для Java-апплетов, PE32 ] ".exe", ELF в Unix / Linux)
  • Интерфейс прикладного программирования ; (Например, POSIX в Linux / Unix, Какао для Mac OSX, Win32 в Microsoft Windows, Библиотека базовых классов для ".Net "/ Моно приложения).

Вы можете увеличить вероятность совпадения всех трех, имея эмуляторы / интерпретаторы (для других наборов команд ЦП), имея дополнительные загрузчики файлов (для внешних форматов файлов) и имея дополнительные библиотеки программирования, предоставляющие больше API.

Отметим также, что некоторые процессоры могут изначально выполнять более одного набора команд; ПК довольно часто имеет наборы команд x86 и amd64 ; процессор ARM может выполнять четыре: ARM32 / Thumb / Java bytecode / ThumbEE . Некоторые операционные системы также могут иметь более одного API (Microsoft Windows предоставляет Win32 и POSIX ).

Для всего остального вам нужно дополнительное программное обеспечение. Для запуска программ Java вам понадобятся три перечисленные выше части, чтобы заставить его работать: программа виртуальной машины Java, чтобы запустить байт-код; способ запуска программ на Java и библиотека классов Java для вызываемых программ. «Java» - это торговая марка для нескольких отдельных технологий, первоначально разработанных Sun, но для пользователя они часто загружаются как одна.

То же самое относится и к «.Net», который является торговой маркой маркетинга для нескольких различных технологий, первоначально разработанных Microsoft: Common Language Runtime / 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. Если вы можете опубликовать ссылку на конкретную программу, которую вы хотите запустить, я или кто-то еще должны быть в состоянии сообщить вам точный набор инструкций, формат файла и API, для которого он был разработан, и что вам нужно установить в Linux запустить его. Надеюсь, это поможет!

(Иногда вам может даже понадобиться и то и другое. Например, симулятор поезда Openbve - это C # и скомпилирован в PE / COFF + CLI + CLR, но может быть опционально используйте бинарные плагины C, скомпилированные для PE / COFF + Win32 + x86. В этом случае вам потребуется версия Mono для Win32 под Wine. Если архитектура ЦП также отличается, то потребуется эмуляция, поэтому Mono для Wine под Qemu). [ 112]

0
ответ дан 21 March 2011 в 05:04