Una Application Binary Interface (ABI) es un conjunto de convenciones y reglas que rigen la interacción entre módulos de software compilados a nivel binario. A diferencia de una API (Application Programming Interface), que define la interacción a nivel de código fuente, una ABI se ocupa de detalles como el formato de los archivos objeto, la disposición de los datos en memoria, las convenciones de llamada a funciones (cómo se pasan los argumentos y se devuelven los valores), el tamaño y alineación de los tipos de datos, y la forma en que el sistema operativo interactúa con el código de usuario. Es esencialmente un contrato de bajo nivel que permite que diferentes partes de un sistema, incluso si están escritas en lenguajes distintos o compiladas con diferentes compiladores, se comuniquen y funcionen juntas.

La implementación de ABIs es fundamental en sistemas operativos y entornos de desarrollo. Por ejemplo, en Linux, la ABI del kernel define cómo las llamadas al sistema (syscalls) se realizan desde el espacio de usuario al kernel, garantizando la compatibilidad binaria entre diferentes versiones del kernel y las aplicaciones. Las ABIs también son cruciales para la interoperabilidad de bibliotecas compartidas (shared libraries) como las de C/C++ (ej. `glibc` en Linux o las DLLs en Windows), permitiendo que una aplicación compilada contra una versión específica de una biblioteca siga funcionando incluso si la biblioteca se actualiza, siempre y cuando la ABI se mantenga estable. Compiladores como GCC o Clang adhieren a ABIs específicas de la plataforma para asegurar que el código generado sea compatible con el sistema operativo y otras herramientas.

Para un Arquitecto de Sistemas, la ABI es un concepto crítico con implicaciones directas en la estabilidad, portabilidad y mantenibilidad. Una ABI estable es la base para la compatibilidad binaria a largo plazo, permitiendo actualizaciones de componentes sin necesidad de recompilar todo el sistema. Sin embargo, cambiar una ABI puede ser necesario para introducir optimizaciones o nuevas funcionalidades, lo que conlleva el trade-off de romper la compatibilidad y requerir recompilaciones o adaptaciones. Los arquitectos deben considerar cuidadosamente la estabilidad de la ABI al diseñar interfaces de bajo nivel, especialmente en sistemas operativos, drivers o bibliotecas críticas. La elección de una ABI específica (o la decisión de crear una nueva) impacta directamente en la capacidad de integrar componentes de terceros, la estrategia de despliegue y la longevidad del software, requiriendo un equilibrio entre rendimiento, flexibilidad y compatibilidad.