Diferença entre Vinho e Mono

23

Até onde eu sei, tanto o Wine quanto o Mono são usados para rodar aplicativos do Windows no Ubuntu.

Então eu queria saber

  1. quais são suas diferenças? Ambas são máquinas virtuais? Ou cada um pertence a alguma outra categoria?
  2. É melhor Quando usar quais tipos de aplicativos do Windows? Por exemplo, aqueles aplicativos que podem ou não exigir o .NET Framework.
  3. Eles dependem um do outro? Estamos eles precisavam instalar juntos? Ou cada um trabalha independentemente sem a existência do outro?

Obrigado e cumprimentos!

    
por Tim 21.03.2011 / 02:43

2 respostas

28

Executar com sucesso um programa exige que três coisas correspondam:

  • Conjunto de instruções de CPU (Por exemplo, x86 no seu PC, ARM no seu telemóvel, PowerPC em alguns Macs da Apple , Java bytecode para applets Java, CLI para aplicativos ".Net" / Mono)
  • Formato de arquivo binário (por exemplo, PE / COFF ".exe" para Microsoft Windows, .jar para Java Applets, PE32 ".exe", ELF no Unix / Linux)
  • Interface de programação de aplicativos ; (Por exemplo, POSIX no Linux / Unix, Cocoa para Mac OSX, Win32 no Microsoft Windows, Biblioteca de Classes Base para aplicativos ".Net" / Mono).

Você pode aumentar a chance de combinar todos os três tendo emuladores / intérpretes (para outros conjuntos de instruções de CPU), tendo carregadores de arquivos extras (para formatos de arquivos estrangeiros) e tendo bibliotecas de programação adicionais fornecendo mais APIs.

Note também que alguns processadores podem executar nativamente mais de um conjunto de instruções; um PC geralmente tem conjuntos de instruções x86 e amd64 ; um processador ARM pode executar quatro: ARM32 / Thumb / Java bytecode / ThumbEE . Alguns sistemas operacionais podem fornecer mais de uma API nativamente também (o Microsoft Windows fornece Win32 e POSIX ).

Para tudo o mais, você precisa de um software extra. Para executar programas Java, você precisa das três partes listadas acima para fazê-lo funcionar: um programa Java Virtual Machine para executar o bytecode; uma maneira de lançar programas Java e uma biblioteca de classes Java para os programas a serem chamados. "Java" é uma marca aqui para várias tecnologias separadas originalmente desenvolvidas pela Sun, mas para um usuário elas geralmente são baixadas como uma.

O mesmo se aplica a ".Net", que é uma marca de marketing para várias tecnologias diferentes originalmente desenvolvidas pela Microsoft: A Biblioteca de Classes de Tempo Comum / Base (CLR) é a API; VES é o loader e Common Language Interface (CLI) é o conjunto de instruções.

Você não precisa baixar essas tecnologias da Microsoft, da Sun ou da Intel apenas porque elas inventaram algo originalmente. A AMD torna os processadores compatíveis com os padrões da Intel; Tanto o Apache ("Harmony") quanto o Google ("Android Dalvik") fazem ambos uma suíte semelhante a Java; e Mono fornece um conjunto CLR / CLI / VES. O importante é que todos usem os mesmos padrões, tornando-os compatíveis. Um DVD será reproduzido em qualquer reprodutor de DVD que atenda ao padrão, e uma página HTML será renderizada em qualquer navegador que atenda aos padrões HTML.

  • Mono é uma suíte CLR / CLI / VES que pode ser executada no Mac OSX, MS Windows e Linux.
  • O Wine é uma implementação da API do Win32 que pode ser executada no Mac OSX, MS Windows e Linux.
  • Você pode executar Mono em cima do Wine , além de qualquer sistema operacional.
  • Você pode executar o Wine em cima do Qemu , sobre qualquer arquitetura de CPU.

Então Mono faz com que os aplicativos CLR .exe sejam executados e Wine faz com que os aplicativos Win32 .exe sejam executados. A única coisa em comum é que os nomes dos arquivos terminam em ".exe"; o conteúdo é completamente diferente e incompatível, então você precisa do certo .

Da mesma forma que um interpretador Python apresentará um erro quando apresentado com Perl (e vice-versa), um interpretador CLR apresentará um erro quando apresentado com bytecode x86 + Win32 ou JVM + Java. Se você puder postar um link para o programa específico que deseja executar, eu ou outra pessoa poderemos lhe dizer o conjunto exato de instruções, o formato de arquivo e a API para os quais foi criado e o que você precisa instalar no Linux para executá-lo. Espero que ajude!

(Às vezes você pode até precisar dos dois. Por exemplo, o simulador de trem Openbve é C # e compilado para PE / COFF + CLI + CLR, mas pode opcionalmente usar plug-ins binários C compilados para PE / COFF + Win32 + x86. Neste caso, você precisa de uma versão Win32 do Mono no Wine. Se a arquitetura da CPU também for diferente, seria necessário emular; portanto, Mono sob Wine no Qemu).

    
por sladen 21.03.2011 / 03:34
18

A resposta curta:

O .NET é a resposta da Microsoft para o Java, e o Mono é uma implementação de código aberto do mesmo. Wine é para exes nativos e não tem nada a ver com o Mono, exceto que você pode, talvez, executar o runtime .NET com ele, como qualquer outro software nativo do Windows.

A resposta longa:

Para entender a diferença entre Wine e Mono (e .NET) você deve entender a diferença entre executáveis de código de máquina nativa e executáveis de "common language runtime" ou "máquina virtual":

Os executáveis de código de máquina nativos usam códigos de instruções específicos para o seu processador e são executados diretamente por ele. Isso significa que eles precisam ser recompilados para diferentes processadores. O Wine é capaz de executar executáveis de código de máquina nativos para o Windows, executando diretamente este código executável e capturando qualquer chamada de biblioteca que fizer, redirecionando-os para sua própria implementação da API do Win32.

Os executáveis "CLR" ou "VM" não são específicos de um processador: eles precisam de um software extra para permitir que o processador os execute. O Mono / .NET é um exemplo desse tipo de sistema. Os programas .NET precisam do tempo de execução do .NET instalado, mesmo quando você os executa no Windows. Java funciona da mesma maneira.

Então:

1) a diferença entre Wine e Mono: Wine é para executar executáveis de código de máquina nativa feitos para Windows, e Mono é para executar executáveis Mono / .NET que não são necessariamente feitos para qualquer plataforma específica. Instalar o Mono no Linux é equivalente a instalar o tempo de execução do .NET no Windows.

2) Se o programa que você deseja executar não usa o .NET, você deve usar o Wine. Mono não vai te ajudar nada aqui.

No entanto, se o programa usa o .NET, você tem duas opções, uma das quais podem ou não funcionar:

  • Você pode tentar executá-lo usando o Mono. Isso falhará se o programa .NET também usar funções nativas da API do win32, que muitos (mas não todos) aplicativos .NET feitos para o Windows fazem.

  • Como alternativa, você pode instalar o runtime do Microsoft .NET para Windows dentro do Wine e, em seguida, executar o aplicativo .NET através dele. Você não usará o Mono nesse caso.

3) Wine e Mono não dependem um do outro, mas como dito acima, você pode usar o tempo de execução do Microsoft .NET no Wine para executar aplicações Mono / .NET.

    
por Alistair Buxton 21.03.2011 / 03:22

Tags