web-dev-qa-db-fra.com

Différence entre Vin et Mono

Autant que je sache, Wine et Mono sont utilisés pour exécuter des applications Windows sous Ubuntu.

Alors je me demandais

  1. quelles sont leurs différences? Sont-ils deux machines virtuelles? Ou est-ce que chacun appartient à une autre catégorie?
  2. C’est mieux Quand utiliser lequel pour quels types d’applications Windows? Par exemple, les applications nécessitant ou non le .net Framework.
  3. Est-ce qu'ils dépendent les uns des autres? Sont-ils tenus d'installer ensemble? Ou chacun travaille-t-il indépendamment sans l'existence de l'autre?

Merci et salutations!

30
Tim

Pour exécuter un programme avec succès, trois éléments sont nécessaires:

  • Jeu d'instructions de la CP (Par exemple x86 sur votre PC, ARM sur votre téléphone portable, PowerPC dans certains Apple Macs, bytecode Java pour Java Applets, CLI pour les applications ".Net"/Mono)
  • Format de fichier binaire (Par exemple, PE/COFF ".exe" pour Microsoft Windows, . Jar pour Java Applets, PE32 ".exe", ELF sous Unix/Linux)
  • interface de programmation d'application; (Par exemple, POSIX sous Linux/Unix, Cocoa sous Mac OSX, Win32 sous Microsoft Windows, bibliothèque de classes de base pour les applications ".Net"/Mono).

Vous pouvez augmenter les chances de faire correspondre les trois en utilisant des émulateurs/interpréteurs (pour les autres jeux d'instructions de la CPU), des chargeurs de fichiers supplémentaires (pour les formats de fichier étrangers) et des bibliothèques de programmation supplémentaires fournissant davantage d'API.

Notez également que certains processeurs peuvent exécuter nativement plusieurs jeux d'instructions; un PC a assez souvent x86 et AMD64 jeux d'instructions; un processeur ARM peut en exécuter quatre: code bytecode ARM32/Thumb/Java/ThumbEE. Certains systèmes d'exploitation peuvent également fournir plusieurs API de manière native (Microsoft Windows fournit Win32 et POSIX).

Pour tout le reste, vous avez besoin d'un logiciel supplémentaire. Pour exécuter les programmes Java, vous devez disposer des trois éléments énumérés ci-dessus: un programme Java Machine virtuelle à exécuter le bytecode; une façon de lancer des programmes Java et une bibliothèque de classe Java pour les programmes à appeler. "Java" est un nom de marque pour plusieurs technologies distinctes développées à l'origine par Sun, mais pour un utilisateur, elles sont souvent téléchargées en une.

Il en va de même pour ".Net", qui est un nom de marque marketing pour plusieurs technologies différentes développées à l'origine par Microsoft: CLR) - (CLR (CLR) sont les API; VES est le chargeur et Common Language Interface (CLI) est le jeu d'instructions.

Il n'est pas nécessaire de télécharger ces technologies auprès de Microsoft, Sun ou Intel simplement parce qu'elles ont inventé quelque chose à l'origine. AMD rend les processeurs compatibles avec les normes Intel; Apache ("Harmony") et Google ("Android Dalvik") constituent tous deux une suite de type Java. et Mono fournit une suite CLR/CLI/VES. L'important est que tout le monde utilise les mêmes normes, ce qui les rend compatibles. Un disque DVD sera lu sur tout lecteur de DVD conforme à la norme, et une page Web HTML apparaîtra dans tout navigateur Web conforme aux normes HTML.

  • Mono est une suite CLR/CLI/VES pouvant fonctionner sous Mac OSX, MS Windows et Linux.
  • Wine est une implémentation de l'API Win32 pouvant s'exécuter sur Mac OSX, MS Windows et Linux.
  • Vous pouvez exécuter Mono par dessus Wine, par dessus tout système d'exploitation.
  • Vous pouvez exécuter Wine par dessus Qem, par dessus toute architecture de processeur.

Donc Mono exécute les applications CLR .exe et Wine exécute les applications Win32 .exe. La seule chose en commun est que les noms de fichiers se terminent par ".exe"; le contenu est complètement différent et incompatible, vous avez donc besoin de celui right .

Tout comme un interprète Python générera une erreur lorsqu'il sera présenté à Perl (et inversement), un interpréteur CLR générera une erreur s'il est présenté avec un bytecode x86 + Win32 ou JVM + Java. Si vous pouvez publier un lien vers le programme que vous souhaitez exécuter, vous-même ou une autre personne devrait pouvoir vous dire le jeu d'instructions exact, le format de fichier et l'API pour lesquels il a été conçu, ainsi que ce que vous devez installer sur Linux. pour l'exécuter. J'espère que cela pourra aider!

(Parfois, vous pourriez même avoir besoin des deux. Par exemple, le simulateur de train Openbve est en C # et compilé en PE/COFF + CLI + CLR, mais peut éventuellement utiliser C binaire plugins compilés pour PE/COFF + Win32 + x 86. Dans ce cas, vous avez besoin d’une version Win32 de Mono sous Wine. Si l’architecture de la CPU est également différente, il faudrait émuler; donc Mono sous Wine sous Qemu).

34
sladen

La réponse courte:

.NET est la réponse de Microsoft à Java et Mono est une implémentation open source de celle-ci. Wine est destiné aux utilisateurs natifs et n'a rien à voir avec Mono, sauf que vous pouvez peut-être exécuter le runtime .NET avec, comme n'importe quel autre logiciel Windows natif.


La réponse longue:

Pour comprendre la différence entre Wine et Mono (et .NET), vous devez comprendre la différence entre les exécutables de code machine natif et les exécutables "common language runtime", également appelés "machine virtuelle":

Les exécutables de code machine natifs utilisent des codes d’instruction spécifiques à votre processeur et sont directement exécutés par celui-ci. Cela signifie qu'ils doivent être recompilés pour différents processeurs. Wine peut exécuter des exécutables de code machine natifs pour Windows en exécutant directement ce code exécutable et en interceptant tous les appels de bibliothèque effectués, en les redirigeant vers sa propre implémentation de l'API Win32.

Les exécutables "CLR" ou "VM" ne sont pas spécifiques à un processeur: ils ont besoin d'un logiciel supplémentaire pour permettre au processeur de les exécuter. Mono/.NET est un exemple de ce type de système. Les programmes .NET ont besoin du runtime .NET installé même lorsque vous les exécutez sous Windows. Java fonctionne de la même manière.

Alors:

1) Différence entre Wine et Mono: Wine concerne l’exécution d’exécutables de code machine natifs conçus pour Windows, et Mono s’applique aux exécutables Mono/.NET qui ne sont pas nécessairement conçus pour une plate-forme spécifique. L'installation de Mono sous Linux équivaut à installer le runtime .NET sous Windows.

2) Si le programme que vous souhaitez exécuter n’utilise pas du tout .NET, vous devez utiliser Wine. Mono ne vous aidera pas du tout ici.

Cependant, si le programme utilise .NET, vous avez deux options, l'une ou l'autre pouvant ne pas fonctionner:

  • Vous pouvez essayer de l'exécuter en utilisant Mono. Cela échouera si le programme .NET utilise également les fonctions natives de l'API win32, comme le font de nombreuses applications .NET (mais pas toutes) conçues pour Windows.

  • Vous pouvez également installer le runtime Microsoft .NET pour Windows à l'intérieur de Wine, puis exécuter l'application .NET par ce biais. Vous n'utiliserez pas du tout Mono dans ce cas.

3) Wine et Mono ne dépendent pas l'un de l'autre, mais comme indiqué ci-dessus, vous pouvez utiliser le runtime Microsoft .NET dans Wine pour exécuter des applications Mono/.NET.

21
Alistair Buxton