Resumo: API e ABI
O que é API?
O termo API, Application Programming Interface, ou algo como interface para programação de aplicativos, é muito conhecido na área de desenvolvimento de software em geral devido ao uso diário pelos programadores do mundo todo.
Tentando ser um pouco mais direto, uma API é responsável pela comunicação entre diferentes níveis de um Software, agindo como um agente de confiança e estabilidade entre as partes participantes. Um exemplo facilmente encontrado são as API HTTP, que estão presente em quase todas as comunicações entre a camada de apresentação, front-end, e a camáda lógica, back-end, de páginas web.
Um outro exemplo com um pouco menos de rigor na explicação pode ser a utilização de constantes, variáveis, funções, objetos, etc., que você ou alguma biblioteca expõe para os utilizadores da sua biblioteca/modulo; essencialmente código fonte.
O que é ABI?
Já uma ABI, aplication binary interface ou interface binária de aplicação em tradução livre, é responsável pela comunicação entre dois módulos binários, já “compilados”, de um programa. A ABI define como as funções serão invocadas, como os parâmetros serão passados, como os valores serão retornados, como as bibliotecas/módulos serão implementadas e carregadas na memória.
Um dos usos para ABI é a comunicação entre uma biblioteca dinâmica compilada é um programa usuário. Como essa biblioteca estaria compilada e só temos acesso ao binário da mesma, para acessar seus elementos, precisamos de um interface de comunicação; e aí entra a ABI, como um “contrato” disponibilizado pela biblioteca e seguido pelo programa usuário.
Claro, há várias outras questões bem mais complexas por trás de uma ABI, o que merece um artigo completo: como é feita essa comunicação, Linker, sistema operacional, CPU e outros, mas acredito que essa diferenciação básica entre API e ABI é suficiente para esse blog.