Interfaz binaria de aplicaciones

Compilando los sistemas operativos y software comercial conforme a Linux Standard Base, resultará en una Interfaz Binaria de Aplicación (ABI) y por ello en portabilidad binaria.
Linux kernel y GNU C Library definen el Linux API. Tras la compilación, los binarios ofrecen una ABI; manteniendo esta ABI estable a lo largo del tiempo es importante para el vendedor independiente de software.

En software de ordenador, una interfaz binaria de aplicación (ABI) es la interfaz entre dos módulos de programa, uno de los cuales es, a menudo, una librería o sistema operativo, a nivel de lenguaje de máquina. Una ABI determina detalles como la forma de llamar a las funciones, en qué formato binario se debería pasar la información de un componente de programa al siguiente, o al sistema operativo en el caso de una llamada al sistema.

La adhesión a las ABIs (las cuales pueden o no estar oficialmente estandarizadas) es normalmente trabajo del compilador, sistema operativo o de la librería, pero los programadores de aplicaciones pueden tratar con las ABIs directamente cuando escriben las aplicaciones en una mezcla de lenguajes de programación, utilizando interfaces de funciones foráneas entre ellas.

Las ABIs difieren de las interfaces de programación de aplicaciones (APIs) en que ambas definen interfaces entre componentes de programa pero las API a nivel de código fuente.

Descripción

Las ABIs cubren aspectos como:

  • tamaños, disposición y alineamiento de los tipos de datos
  • la convención de llamada, que controla cómo se pasan los argumentos de las funciones y se recuperan los valores devueltos; por ejemplo, si todos los parámetros se pasan a la pila o si algunos parámetros pasan a los registros, qué registros se utilizan para qué parámetros de una función, y qué parámetro pasa primero a la pila, si pasa el primero o el último
  • cómo una aplicación debería realizar llamadas al sistema del sistema operativo y, si la ABI especifica llamadas directas al sistema en vez de llamadas de procedimiento, las direcciones de llamada
  • y en el caso de un ABI de sistema operativo completo, el formato binario de los archivos objeto de las librerías de programa, etc.

Un ABI completo, como el Estándar de Compatibilidad Binaria de Intel (iBCS),[1]​ permite a un programa de un sistema operativo soportar dicho ABI para ejecutarse sin modificaciones en cualquier otro sistema al que se le provean de las librerías compartidas necesarias y tenga los mismos prerrequisitos.

Otras ABIs estandarizan detalles como la convención de nombres de funciones en C++,[3]​ y convención sobre llamadas entre compiladores de la misma plataforma que no requieren compatibilidad con otras plataformas.