La ejecución exitosa de un programa requiere que coincidan tres cosas:
- Conjunto de instrucciones de CPU (por ejemplo, x86 en su PC, ARM en su teléfono móvil, PowerPC en algunos Apple Macs, código de bytes Java para Applets Java, CLI para aplicaciones ".Net" / Mono)
- Formato de archivo binario (por ejemplo, PE / COFF ".exe" para Microsoft Windows, .jar para Applets Java, PE32 ".exe", ELF en Unix / Linux)
- Interfaz de programación de aplicaciones ; (Por ejemplo, POSIX en Linux / Unix, Cocoa para Mac OSX, Win32 en Microsoft Windows, Biblioteca de clase base para aplicaciones ".Net" / Mono).
Puede aumentar la posibilidad de hacer coincidir los tres al tener emuladores / intérpretes (para otros conjuntos de instrucciones de CPU), al tener cargadores de archivos adicionales (para formatos de archivo extranjeros) y al tener bibliotecas de programación adicionales que proporcionan más API.
Tenga en cuenta también que algunos procesadores pueden ejecutar de forma nativa más de un conjunto de instrucciones; una PC a menudo tiene conjuntos de instrucciones x86 y amd64 ; un procesador ARM puede ejecutar cuatro: ARM32 / Thumb / Java bytecode / ThumbEE . Algunos sistemas operativos también pueden proporcionar más de una API de forma nativa (Microsoft Windows proporciona Win32 y POSIX ).
Para todo lo demás, necesita software adicional. Para ejecutar programas Java, necesita las tres partes enumeradas anteriormente para que funcione: un programa Java Virtual Machine para ejecutar el código de bytes; una forma de iniciar programas Java y una biblioteca de clases Java para que los programas llamen. "Java" es una marca aquí para varias tecnologías separadas desarrolladas originalmente por Sun, pero para un usuario a menudo se descargan como una sola.
Lo mismo se aplica para ".Net", que es una marca comercial de varias tecnologías diferentes desarrolladas originalmente por Microsoft: La Biblioteca de clase de lenguaje común / CLR ( Common Language Run-time / Base Class Library ) son las API; VES es el cargador y Common Language Interface (CLI) es el conjunto de instrucciones.
No tiene que descargar esas tecnologías de Microsoft, de Sun o de Intel solo porque originalmente inventaron algo. AMD hace que los procesadores sean compatibles con los estándares de Intel; tanto Apache ("Harmony") como Google ("Android Dalvik") hacen una suite similar a Java; y Mono proporciona una suite CLR / CLI / VES. Lo importante es que todos usen los mismos estándares, haciéndolos compatibles. Se reproducirá un disco DVD en cualquier reproductor de DVD que cumpla con el estándar, y una página web HTML se reproducirá en cualquier navegador web que cumpla con los estándares HTML.
- Mono es una suite CLR / CLI / VES que puede ejecutarse en Mac OSX, MS Windows y Linux.
- Wine es una implementación de la API Win32 que puede ejecutarse en Mac OSX, MS Windows y Linux.
- Puede ejecutar Mono sobre Wine , sobre cualquier sistema operativo.
- Puede ejecutar Wine sobre Qemu , sobre cualquier arquitectura de CPU.
Entonces Mono hace que se ejecuten las aplicaciones .exe de CLR, y Wine hace que se ejecuten las aplicaciones .exe de Win32. Lo único en común es que los nombres de los archivos terminan en ".exe"; los contenidos son completamente diferentes e incompatibles, por lo que necesita el correcto .
Al igual que un intérprete de Python producirá un error cuando se presente con Perl (y viceversa), un intérprete de CLR producirá un error cuando se presente con x86 + Win32 o JVM + código de bytes Java. Si puede publicar un enlace al programa en particular que desea ejecutar, yo o alguien más debería poder decirle el conjunto de instrucciones, el formato de archivo y la API exactos para los que fue diseñado, y lo que necesita instalar en Linux para ejecutarlo ¡Espero que ayude!
(A veces puede que necesite ambos. Por ejemplo, el simulador de tren Openbve es C # y está compilado para PE / COFF + CLI + CLR, pero opcionalmente puede usar complementos binarios C compilados para PE / COFF + Win32 + x86. En este caso, usted necesita una versión Win32 de Mono en Wine. Si la arquitectura de la CPU también es diferente, sería necesario emularla, entonces Mono en Wine en Qemu).
file *.exe
mostrará información sobre el conjunto de instrucciones de la CPU y el tipo de archivo. Si se trata de una aplicación CLI / CLR (".Net" / Mono) que también utiliza llamadas nativas de API Win32, deberá ejecutarla o buscar cualquierfile *.dll
archivo que se muestre como nativo x86 + Win32.