A ABI é a Interface Binária da Aplicação, (não deve ser confundida com a API, a Interface de Programação de Aplicativos). A ABI define os tamanhos, os sinais e as ordens dos números que o aplicativo está usando.
Para ser claro, aqui está um exemplo: quero codificar a idade de um edifício, expressa em anos. Para fazer isso, eu posso usar um C unsigned char
, que é um tipo cujo tamanho é 1 byte, e que pode codificar valores de 0 a 255. Agora, suponha que eu descubra que 255 é um limite muito baixo, porque existem edifícios que foram construídos há mais de 255 anos. Eu posso então usar um C unsigned int
, que tem 4 bytes de comprimento e pode codificar valores de 0 a 65535.
Alterando o tipo de char
para int
, eu não mudei o significado semântico do campo (era uma idade expressa em anos e ainda é), porém eu mudei seu tamanho. Todo software que interage com o meu aplicativo não precisará ser alterado, mas falará um "idioma" diferente.
Portanto, quando um kernel muda sua ABI, isso significa que ele alterou a linguagem que fala, mas nenhuma funcionalidade foi adicionada, removida ou modificada. Todos os módulos de terceiros que precisam interagir com o kernel precisam ser recompilados para falar este novo idioma, mas eles não precisam ser alterados de forma alguma para funcionar corretamente.