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
пакеты?