La Application Binary Interface (ABI) es un contrato de bajo nivel entre componentes de software compilados, como un sistema operativo y sus programas, o entre bibliotecas y aplicaciones. A diferencia de una API (Application Programming Interface) que define la interacción a nivel de código fuente, la ABI especifica los detalles binarios de la interacción: cómo se pasan los argumentos a las funciones, cómo se devuelven los valores, el diseño de la memoria para estructuras de datos, el tamaño y la alineación de los tipos de datos, las convenciones de llamadas a funciones (calling conventions), y el formato de los archivos objeto y ejecutables. Una ABI estable es crucial para la compatibilidad binaria, permitiendo que el software compilado para una versión de un sistema o biblioteca funcione con versiones futuras sin necesidad de recompilación.

La ABI se implementa extensamente en sistemas operativos y compiladores. Por ejemplo, el 'System V ABI' es un estándar ampliamente adoptado en sistemas tipo Unix (Linux, FreeBSD, macOS) que define cómo los programas interactúan con el kernel y las bibliotecas compartidas. Esto permite que los ejecutables compilados en una distribución de Linux funcionen en otra, siempre que ambas adhieran a la misma ABI. Las arquitecturas de CPU como x86-64 tienen sus propias especificaciones ABI que dictan el uso de registros y la pila. Las bibliotecas de C++ a menudo enfrentan desafíos de ABI debido a la 'name mangling' y el diseño de objetos, lo que puede llevar a problemas de compatibilidad entre diferentes versiones de compiladores o bibliotecas.

Para un Arquitecto de Sistemas, comprender la ABI es fundamental para diseñar sistemas robustos y mantenibles. Una ABI estable es un requisito clave para la compatibilidad a largo plazo y la interoperabilidad de componentes binarios, especialmente en sistemas operativos, drivers y bibliotecas compartidas. Las decisiones sobre la ABI impactan directamente la capacidad de actualizar componentes sin romper la funcionalidad existente, lo que es crítico en infraestructuras de misión crítica. Los arquitectos deben considerar los trade-offs entre la flexibilidad de cambiar las implementaciones internas y la necesidad de mantener una ABI estable para evitar la 'DLL Hell' o problemas de compatibilidad. En entornos de microservicios o contenedores, aunque la ABI es menos visible a nivel de servicio, sigue siendo relevante dentro de cada contenedor y para la interacción con el kernel subyacente, influyendo en la portabilidad y el rendimiento.