ABI - це бінарний інтерфейс програми (не плутати з API, інтерфейсом програмування додатків). ABI визначає розміри, знаки та порядки чисел, якими користується програма.
Щоб було зрозуміло, ось приклад: я хочу кодувати вік будівлі, виражений у роках. Для цього я можу використовувати C unsigned char
, який є типом, розмір якого становить 1 байт, і який може кодувати значення від 0 до 255. Тепер припустимо, що я виявив, що 255 є занадто низькою межею, тому що є будівлі, які були побудовані більше ніж 255 років тому. Тоді я можу використовувати C unsigned int
, що має 4-байтну довжину і може кодувати значення від 0 до 65535.
Змінюючи тип з char
на int
, я не змінив смислового значення поля (це був вік, виражений у роках, і все ще є), проте я змінив його розмір. Кожне програмне забезпечення, яке взаємодіє з моєю програмою, не потрібно змінювати, однак воно буде говорити іншою "мовою".
Тому, коли ядро змінює свій ABI, це означає, що воно змінило мову, якою він розмовляє, але ніяких функцій не додано, не видалено чи змінено. Усі модулі сторонніх розробників, які повинні взаємодіяти з ядром, повинні бути перекомпільовані для того, щоб розмовляти цією новою мовою, але їх не потрібно жодним чином змінювати, щоб правильно працювати.
aptitude changelog linux-image-2.6.35-28-generic
відображає список змін. Я не впевнений, чому метапакет не містить оновленьlinux-{image,headers}-*-generic
пакетів; може тому, що є такожlinux-{image,headers}-*-server
пакети?