Jak widać w dzienniku zmian jądra systemu Linux , pojawiają się komunikaty o aktualizacji, takie jak „Bump ABI - Maverick ABI 28”.
Według Wiki Ubuntu ABI jest czymś w rodzaju pomostu między przestrzenią jądra a innymi modułami (moja interpretacja).
Czy taka aktualizacja dodaje dodatkowe funkcje i / lub poprawki błędów? Czy powinienem zaktualizować swoje jądro do następnej wersji?
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?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ć Cunsigned int
, który ma 4 bajty i może kodować wartości od 0 do 65535.Zmieniając typ z
char
naint
, 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.
źródło