A ABI é a Interface Binária do Aplicativo (não deve ser confundida com a API, a Interface de Programação de Aplicativo). A ABI define os tamanhos, os sinais e as ordens dos números que o aplicativo está usando.
Para deixar claro, aqui está um exemplo: eu quero codificar a idade de um edifício, expressa em anos. Para fazer isso, eu posso usar um C unsigned char
, que é um tipo de tamanho de 1 byte, e que pode codificar valores de 0 a 255. Agora, suponha que eu descubra que 255 é um limite muito baixo porque há edifícios que foram construídos mais de 255 anos atrás. 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
, não mudei o significado semântico do campo (era uma idade expressa em anos e ainda é), no entanto, mudei seu tamanho. Todo software que interage com meu aplicativo não precisará ser alterado, no entanto, ele falará um "idioma" diferente.
Portanto, quando um kernel altera sua ABI, significa que ele mudou o idioma 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 esse novo idioma, mas eles não precisam ser alterados de forma alguma para funcionar corretamente.
aptitude changelog linux-image-2.6.35-28-generic
exibe uma lista de alterações. Não sei por que o meta-pacote não contém as atualizações doslinux-{image,headers}-*-generic
pacotes; talvez porque também existemlinux-{image,headers}-*-server
pacotes?