La compatibilidad de código binario (compatible con código binario o compatible con código objeto ) es una propiedad de un sistema informático , lo que significa que puede ejecutar el mismo código ejecutable , normalmente código de máquina para una unidad central de procesamiento (CPU) de un ordenador de uso general , que otro sistema informático puede ejecutar. La compatibilidad de código fuente , por otro lado, significa que es necesaria una recompilación o interpretación antes de que el programa pueda ejecutarse en el sistema compatible.
Para un programa compilado en un sistema operativo general, la compatibilidad binaria a menudo implica que no sólo las CPU ( conjuntos de instrucciones ) de las dos computadoras son compatibles binariamente, sino también que las interfaces y los comportamientos del sistema operativo (OS) y las interfaces de programación de aplicaciones (API), y las interfaces binarias de aplicaciones (ABI) correspondientes a esas API, son suficientemente iguales, es decir, "compatibles".
Un término como "compatible con versiones anteriores" suele implicar compatibilidad con el código objeto. Esto significa que el hardware y/o software de ordenador más nuevo tiene (prácticamente) todas las características del anterior, además de capacidades o rendimiento adicionales. Por tanto, el código ejecutable más antiguo se ejecutará sin cambios en el producto más nuevo. Para un programa compilado que se ejecuta directamente en una CPU bajo un SO, un "sistema operativo compatible con binarios" significa principalmente compatibilidad de la interfaz binaria de la aplicación (ABI) con otro sistema. Sin embargo, también suele implicar que las API de las que depende la aplicación, directa o indirectamente (como la API de Windows , por ejemplo), son suficientemente similares. El hardware (además de la CPU, como para gráficos) y los periféricos a los que accede una aplicación también pueden ser un factor para la compatibilidad total, aunque muchas diferencias de hardware están ocultas por las API modernas (a menudo proporcionadas en parte por el propio SO y en parte por controladores de dispositivos específicos ).
En otros casos, se debe recurrir a una portabilidad general del software para que funcionen programas no compatibles con el sistema binario.
La compatibilidad binaria es una ventaja importante a la hora de desarrollar programas informáticos que se ejecutarán en varios sistemas operativos. Varios sistemas operativos basados en Unix , como FreeBSD o NetBSD , ofrecen compatibilidad binaria con sistemas operativos más populares, como los derivados de Linux , ya que la mayoría de los ejecutables binarios no se distribuyen comúnmente para dichos sistemas operativos.
La mayoría de los sistemas operativos ofrecen compatibilidad binaria, en cada versión del sistema operativo, para la mayoría de los binarios creados para ejecutarse en versiones anteriores del sistema operativo. Por ejemplo, muchos ejecutables compilados para Windows 3.1 , Windows 95 o Windows 2000 también se pueden ejecutar en Windows XP o Windows 7 , y muchas aplicaciones para DOS se ejecutaron en versiones mucho más nuevas de Windows hasta Windows 10 mientras se admitió NTVDM .
Para un procesador digital implementado en hardware, la compatibilidad binaria significa que (un gran subconjunto de) código de máquina producido para otro procesador puede ejecutarse correctamente y tiene (en gran medida) el mismo efecto que en el otro procesador. Esto es bastante común entre muchas familias de procesadores, aunque es bastante poco común entre los omnipresentes sistemas embebidos pequeños construidos alrededor de tales procesadores. La compatibilidad total del código de máquina implicaría aquí exactamente el mismo diseño de rutinas de servicio de interrupción , puertos de E/S, registros de hardware , contadores/temporizadores, interfaces externas, etc. Para un sistema embebido más complejo que utilice más capas de abstracción (a veces en el límite con una computadora general, como un teléfono móvil), esto puede ser diferente.
Los sistemas operativos compatibles con binarios son sistemas operativos que tienen como objetivo implementar la compatibilidad binaria con otro sistema operativo o con otra variante de la misma marca. Esto significa que son compatibles con ABI ( interfaz binaria de aplicación ). Como el trabajo de un sistema operativo es ejecutar programas, las arquitecturas de conjuntos de instrucciones que ejecutan los sistemas operativos deben ser las mismas o compatibles. De lo contrario, los programas se pueden emplear dentro de un emulador de CPU o un mecanismo de traducción dinámica más rápido para hacerlos compatibles.
Por ejemplo, el núcleo de Linux no es compatible con Windows. Esto no significa que Linux no pueda ser compatible binariamente con las aplicaciones de Windows. Existe un software adicional, Wine , que lo hace hasta cierto punto. El esfuerzo de desarrollo de ReactOS busca crear un sistema operativo de software libre y de código abierto que sea compatible binariamente con la familia de sistemas operativos Windows NT de Microsoft utilizando Wine para la compatibilidad de aplicaciones y reimplementando el núcleo de Windows para una compatibilidad adicional, como por ejemplo para los controladores, mientras que Linux usaría controladores de Linux, no controladores de Windows. FreeBSD y otros miembros de la familia BSD tienen compatibilidad binaria con el núcleo de Linux en modo de usuario al traducir las llamadas del sistema Linux a las de BSD. Esto permite que el código de la aplicación y las bibliotecas que se ejecutan en sistemas operativos basados en Linux también se ejecuten en BSD.
Tenga en cuenta que un sistema operativo compatible con binarios es diferente de ejecutar un sistema operativo alternativo a través de la virtualización o emulación , que se realiza para ejecutar software dentro del sistema operativo alternativo en el caso de que el sistema operativo host no sea compatible. A veces, la virtualización se proporciona con el sistema operativo host (o se puede obtener dicho software), lo que efectivamente hace que el sistema operativo host sea compatible con los programas. Por ejemplo, Windows XP Mode para Windows 7 permite a los usuarios ejecutar una versión de 64 bits de Windows 7 y permitir que el software antiguo aún funcione en una máquina virtual de 32 bits que ejecuta Windows XP ; VMware Workstation / VMware Fusion , Parallels Workstation y Windows Virtual PC permiten ejecutar otros sistemas operativos en Windows, Linux y macOS.
Otro ejemplo: Mac OS X en PowerPC tenía la capacidad de ejecutar Mac OS 9 y aplicaciones anteriores a través de Classic , pero esto no hizo que Mac OS X fuera un sistema operativo binario compatible con Mac OS 9. En cambio, el entorno Classic estaba ejecutando Mac OS 9.1 en una máquina virtual , ejecutándose como un proceso normal dentro de Mac OS X. [1] [2]
Classic Startup es una aplicación Mach-O que ejecuta Mac OS 9 dentro de su espacio de direcciones. Proporciona una capa de abstracción de hardware entre Mac OS 9 y Mac OS X mediante la virtualización de trampas, llamadas del sistema e interrupciones. Se ejecuta en un entorno de memoria protegida, con múltiples procesos de Mac OS 9 en su interior superpuestos a un único proceso BSD de Mac OS X.