ABI to Application Binary Interface (nie mylić z API, czyli interfejsem programowania aplikacji). ABI definiuje rozmiary, znaki i kolejność liczb, z których korzysta aplikacja.
Dla jasności, oto przykład: chcę zakodować wiek budynku, wyrażony w latach. Aby to zrobić, mogę użyć C unsigned char
, który jest typem o rozmiarze 1 bajt, który może kodować wartości od 0 do 255. Załóżmy teraz, że odkrywam, że 255 to zbyt niski limit, ponieważ istnieją budynki, które zostały zbudowane więcej niż 255 lat temu. Następnie mogę użyć C unsigned int
, który ma 4 bajty i może kodować wartości od 0 do 65535.
Zmieniając typ z char
na int
, nie zmieniłem semantycznego znaczenia pola (był to wiek wyrażony w latach i nadal nim jest), ale zmieniłem jego rozmiar. Każde oprogramowanie, które współdziała z moją aplikacją, nie musi być zmieniane, jednak będzie mówić innym „językiem”.
Dlatego, gdy jądro zmienia swój ABI, oznacza to, że zmieniło język, którym mówi, ale nie dodano, nie usunięto ani nie zmodyfikowano żadnych funkcji. Wszystkie moduły innych firm, które muszą wchodzić w interakcje z jądrem, muszą zostać ponownie skompilowane, aby można było mówić w tym nowym języku, ale nie trzeba ich zmieniać w żaden sposób, aby działały poprawnie.
aptitude changelog linux-image-2.6.35-28-generic
wyświetla listę zmian. Nie jestem pewien, dlaczego meta-pakiet nie zawiera aktualizacjilinux-{image,headers}-*-generic
pakietów; może dlatego, że są teżlinux-{image,headers}-*-server
pakiety?