Die ABI ist die Application Binary Interface (nicht zu verwechseln mit der API, der Application Programming Interface). Der ABI definiert die Größen, die Zeichen und die Reihenfolge der Zahlen, die die Anwendung verwendet.
Um es klar zu machen, hier ein Beispiel: Ich möchte das Alter eines Gebäudes, ausgedrückt in Jahren, codieren. Dazu kann ich ein C verwenden unsigned char
, einen Typ mit einer Größe von 1 Byte, der Werte von 0 bis 255 codieren kann. Nehmen wir nun an, ich stelle fest, dass 255 eine zu niedrige Grenze ist, weil es Gebäude gibt, die mehr gebaut wurden als vor 255 Jahren. Ich kann dann ein C verwenden unsigned int
, das 4 Byte lang ist und Werte von 0 bis 65535 codieren kann.
Wenn ich den Typ von char
auf int
ändere, habe ich die semantische Bedeutung des Feldes nicht geändert (es war ein in Jahren ausgedrücktes Alter und es ist es immer noch), aber ich habe seine Größe geändert. Jede Software, die mit meiner Anwendung interagiert, muss nicht geändert werden, spricht jedoch eine andere "Sprache".
Wenn ein Kernel sein ABI ändert, bedeutet dies, dass er die Sprache geändert hat, die er spricht, aber keine Funktionen hinzugefügt, entfernt oder geändert wurden. Alle Module von Drittanbietern, die mit dem Kernel interagieren müssen, müssen neu kompiliert werden, um diese neue Sprache zu sprechen. Sie müssen jedoch in keiner Weise geändert werden, damit sie ordnungsgemäß funktionieren.
aptitude changelog linux-image-2.6.35-28-generic
Zeigt eine Liste der Änderungen an. Ich bin nicht sicher, warum das Metapaket nicht die Updates derlinux-{image,headers}-*-generic
Pakete enthält; vielleicht gibt es da auchlinux-{image,headers}-*-server
pakete?