Pour exécuter un programme avec succès, trois éléments doivent correspondre:
- Jeu d'instructions du processeur (par exemple x86 sur votre PC, ARM sur votre téléphone mobile, PowerPC sur certains Apple Mac, Java bytecode pour les applets Java, CLI pour les applications ".Net" / Mono)
- Format de fichier binaire (par exemple, PE / COFF ".exe" pour Microsoft Windows, .jar pour les applets Java, PE32 ".exe", ELF sur Unix / Linux)
- Interface de programmation d'application ; (Par exemple. POSIX sur Linux / Unix, Cocoa pour Mac OSX, Win32 sur Microsoft Windows, bibliothèque de classes de base pour les applications ".Net" / Mono).
Vous pouvez augmenter les chances de faire correspondre les trois en ayant des émulateurs / interprètes (pour les autres jeux d'instructions CPU), en ayant des chargeurs de fichiers supplémentaires (pour les formats de fichiers étrangers) et en ayant des bibliothèques de programmation supplémentaires fournissant plus d'API.
Notez également que certains processeurs peuvent exécuter nativement plusieurs jeux d'instructions; un PC a assez souvent des jeux d'instructions x86 et amd64 ; un processeur ARM peut en exécuter quatre: ARM32 / Thumb / Java bytecode / ThumbEE . Certains systèmes d'exploitation peuvent également fournir plusieurs API nativement (Microsoft Windows fournit Win32 et POSIX ).
Pour tout le reste, vous avez besoin d'un logiciel supplémentaire. Pour exécuter des programmes Java, vous avez besoin des trois parties énumérées ci-dessus pour le faire fonctionner: un programme Java Virtual Machine pour exécuter le bytecode; une façon de lancer des programmes Java et une bibliothèque de classes Java pour les programmes à appeler. "Java" est un nom de marque ici pour plusieurs technologies distinctes développées à l'origine par Sun, mais pour un utilisateur, elles sont souvent téléchargées comme une seule.
Il en va de même pour «.Net», qui est une marque commerciale pour plusieurs technologies différentes développées à l'origine par Microsoft: la bibliothèque Common Language Run-time / Base Class Library (CLR) est l'API; VES est le chargeur et Common Language Interface (CLI) est le jeu d'instructions.
Vous n'avez pas besoin de télécharger ces technologies de Microsoft, de Sun ou d'Intel simplement parce qu'ils ont à l'origine inventé quelque chose. AMD rend les processeurs compatibles avec les normes Intel; Apache ("Harmony") et Google ("Android Dalvik") font 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 n'importe quel lecteur DVD conforme à la norme, et une page Web HTML sera rendue dans n'importe quel navigateur Web répondant aux normes HTML.
- Mono est une suite CLR / CLI / VES qui peut fonctionner sur Mac OSX, MS Windows et Linux.
- Wine est une implémentation de l'API Win32 qui peut s'exécuter sur Mac OSX, MS Windows et Linux.
- Vous pouvez exécuter Mono sur Wine , sur n'importe quel système d'exploitation.
- Vous pouvez exécuter Wine sur Qemu , sur n'importe quelle architecture CPU.
Ainsi , Mono fait des applications de CLR exécuter et vin rend les applications Win32 exécutées. 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 du bon .
Tout comme un interpréteur Python affichera une erreur lorsqu'il sera présenté avec Perl (et vice versa), un interpréteur CLR générera une erreur lorsqu'il sera présenté avec x86 + Win32 ou JVM + Java bytecode. Si vous pouvez publier un lien vers le programme particulier que vous souhaitez exécuter, moi-même ou quelqu'un d'autre devrait être en mesure de vous dire le jeu d'instructions exact, le format de fichier et l'API pour lesquels il a été conçu, et ce que vous devez installer sur Linux pour l'exécuter. J'espère que ça t'as aidé!
(Parfois, vous pourriez même avoir besoin des deux. Par exemple, le simulateur de train Openbve est C # et compilé en PE / COFF + CLI + CLR, mais peut éventuellement utiliser des plugins binaires C compilés pour PE / COFF + Win32 + x86. Dans ce cas, vous besoin d'une version Win32 de Mono sous Wine. Si l'architecture du CPU est également différente, il faudrait l'émuler, donc Mono sous Wine sous Qemu).
file *.exe
affiche des informations sur le jeu d'instructions CPU et le type de fichier. S'il s'agit d'une application CLI / CLR (".Net" / Mono) qui utilise également des appels API Win32 natifs, vous devrez l'exécuter ou rechercher tous lesfile *.dll
fichiers qui apparaissent comme étant natifs x86 + Win32.