# Compatibilidad con código binario

La compatibilidad de código binario (compatible binario o compatible con código objeto) es una propiedad de los sistemas informáticos, que significa que pueden ejecutar el mismo código ejecutable, por lo general código de máquina, para una CPU de computadora de propósito general. Por otro lado, la compatibilidad con el código fuente significa que se necesita recompilación o interpretación antes de que se pueda ejecutar el programa.
Para un programa compilado en un sistema operativo general, por lo general la compatibilidad binaria implica que no solo las CPU (conjunto de instrucciones) de las dos computadoras sean compatibles con los binarios, sino que también las interfaces y comportamientos del sistema operativo y las API, y las ABI correspondientes a estas API sean lo suficientemente iguales, es decir, "compatibles".
El término como compatible con versiones anteriores, también llamado retrocompatibilidad) implica, por lo general, compatibilidad con código de objeto. Esto significa que el hardware y/o software de la computadora más reciente tiene (prácticamente) todas las características de la antigua, más las capacidades o el rendimiento adicionales. El código ejecutable anterior se ejecutará sin cambios en el producto más nuevo. Para un programa compilado que se ejecuta directamente en una CPU bajo un sistema operativo, un "sistema operativo compatible binario" significa principalmente la Interfaz binaria de aplicaciones (ABI, en español IBA) de la aplicación con otro sistema. Sin embargo, también implica muchas veces que las API de las que depende la aplicación, directa o indirectamente (como la API de Windows, por ejemplo), sean lo suficientemente similares. El hardware (además de la CPU, como para los gráficos) y los periféricos a los que accede una aplicación también pueden ser un factor de compatibilidad total, aunque muchas diferencias de hardware están ocultas por las API modernas (a veces suministradas por el propio sistema operativo y en parte por controladores de dispositivos específicos).
En otros casos, se debe utilizar una versión general y portable del software para hacer que funcionen los programas binarios no compatibles.
La compatibilidad binaria es un beneficio importante cuando se desarrollan programas de computadora que se ejecutan en múltiples 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 tales sistemas operativos.
La mayoría de los sistemas operativos proporcionan compatibilidad binaria, en cada versión del sistema operativo, para la mayoría de los archivos 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 pueden ejecutarse en Windows XP o Windows 7, y muchas aplicaciones para DOS funcionan también en versiones modernas de Windows.

## Hardware binario compatible

Para un procesador digital implementado en hardware, la compatibilidad binaria significa que (un gran subconjunto de) código máquina producido para otro procesador puede ejecutarse correctamente y tiene (mucho) 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 sistemas embebidos pequeños ubicuos construidos alrededor de tales procesadores. La compatibilidad total del código de máquina implicaría en este contexto 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 integrado más complejo que use más capas de abstracción (a veces en el borde de una computadora general, como un teléfono móvil), esto puede ser diferente.

## Sistemas operativos compatibles binarios

Los sistemas operativos compatibles binarios son sistemas operativos que tienen como objetivo implementar la compatibilidad binaria con otro sistema operativo u otra variante de la misma marca. Esto significa que son compatibles con ABI (para la interfaz binaria de aplicaciones). Como el trabajo de un sistema operativo es ejecutar programas, las arquitecturas de conjuntos de instrucciones que ejecutan los sistemas operativos deben ser iguales o compatibles. De lo contrario, los programas pueden emplearse dentro de un emulador de CPU o un mecanismo dinámico de traducción más rápido para hacerlos compatibles.
Por ejemplo, el núcleo Linux no es compatible con Windows. Esto no significa que Linux no pueda ser compatible binario con aplicaciones de Windows. Está disponible un software adicional, Wine, que hasta cierto punto hace eso. El esfuerzo de desarrollo del sistema operativo ReactOS busca crear un software de sistema operativo de código abierto que sea compatible con los sistemas binarios de la familia de sistemas operativos Windows NT de Microsoft utilizando Wine para la compatibilidad de aplicaciones y reimplementando del kernel de Windows para obtener compatibilidad adicional, para los controladores, al igual que Linux usa los controladores de Linux y no los controladores de Windows. FreeBSD y otros miembros de la familia BSD tienen compatibilidad binaria con el núcleo Linux en modo de usuario al traducir las llamadas del sistema Linux a las de BSD. Esto permite que la aplicación y el código de las bibliotecas que se ejecutan en sistemas operativos basados en Linux se ejecuten también en BSD.
Tener en cuenta que un sistema operativo compatible binario es diferente de ejecutar un sistema operativo alternativo a través de la virtualización o emulación, lo que se hace 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 SO host (o se puede obtener dicho software), lo que efectivamente hace que el SO host sea compatible con los programas. Por ejemplo, el modo Windows XP 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 que otros sistemas operativos se ejecuten en Windows, Linux y macOS.
Para dar otro ejemplo, Mac OS X en el PowerPC tenían la capacidad de ejecutar Mac OS 9 y software de aplicación primitivo a través de Classic, pero esto no hizo Mac OS X un sistema operativo compatible binario con Mac OS 9. En su lugar, el entorno Classic se ejecuta realmente Mac OS 9.1 en una máquina virtual, que se ejecuta como un proceso normal dentro de Mac OS X.