El ABI es la interfaz binaria de la aplicación (no debe confundirse con la API, la interfaz de programación de la aplicación). El ABI define los tamaños, los signos y el orden de los números que usa la aplicación.
Para ser claros, aquí hay un ejemplo: quiero codificar la edad de un edificio, expresada en años. Para hacerlo, puedo usar una C unsigned char
, que es un tipo cuyo tamaño es de 1 byte, y que puede codificar valores de 0 a 255. Ahora supongamos que descubro que 255 es un límite demasiado bajo porque hay edificios que se construyeron más que hace 255 años. Entonces puedo usar una C unsigned int
, que tiene 4 bytes de longitud y puede codificar valores de 0 a 65535.
Cambiando el tipo de char
a int
, no he cambiado el significado semántico del campo (era una edad expresada en años y todavía lo es), sin embargo, he cambiado su tamaño. No será necesario cambiar cada software que interactúe con mi aplicación, sin embargo, hablará un "idioma" diferente.
Por lo tanto, cuando un kernel cambia su ABI, significa que ha cambiado el idioma que habla, pero no se han agregado, eliminado o modificado funcionalidades. Todos los módulos de terceros que tienen que interactuar con el kernel deben volver a compilarse para hablar este nuevo idioma, pero no necesitan modificarse de ninguna manera para que funcionen correctamente.
aptitude changelog linux-image-2.6.35-28-generic
Muestra una lista de cambios. No estoy seguro de por qué el metapaquete no contiene las actualizaciones de loslinux-{image,headers}-*-generic
paquetes; tal vez porque también haylinux-{image,headers}-*-server
paquetes?