Как вы можете видеть из журнала изменений для ядра Linux , есть сообщения об обновлении, например «Bump ABI - Maverick ABI 28».
Согласно Ubuntu Wiki , ABI - это нечто вроде моста между пространством ядра и другими модулями (моя интерпретация).
Добавляет ли такое обновление дополнительные функции и / или исправления? Должен ли я обновить свое ядро до следующей версии?
NB: Я не эксперт по ядру - так что это основано на собранных знаниях и опыте.
«Удар» ABI не должен приносить новые функции, даже если он может «исправлять» ошибки в некоторых модулях / приложениях, которые ищут более высокую версию ABI. Вам все равно следует установить эти обновления, поскольку в целом синхронизация всех компонентов обеспечивает стабильность и безопасность.
Во-первых, вы не смотрите журнал изменений для ядра Linux. Вы смотрите на метапакет, который зависит от новейшего ядра. Вы, вероятно, хотите что-то вроде: http://changelogs.ubuntu.com/changelogs/pool/main/l/linux-image-2.6.35-28-generic/linux-image-2.6.35-28-generic_2 .6.35-28.50 / changelog
Целью этого метапакета является переход пользователя через эти неровности ABI.
Я придерживаюсь той же точки зрения, что и вы, в отношении ABI и ядра. Практически говоря, удар ABI означает, что все модули должны быть перестроены под обновленное ядро.
Мое понимание также соответствует Роланду в том смысле, что удар по ABI означает не новые функции, а только критические исправления и обновления безопасности.
ABI - это двоичный интерфейс приложения (не путать с API, интерфейсом прикладного программирования). ABI определяет размеры, знаки и порядки номеров, которые использует приложение.
Для ясности, вот пример: я хочу закодировать возраст здания, выраженный в годах. Для этого я могу использовать C unsigned char
, который является типом, размер которого составляет 1 байт, и который может кодировать значения от 0 до 255. Теперь предположим, что я обнаружил, что 255 - это слишком низкий предел, поскольку есть здания, были построены более 255 лет назад. Затем я могу использовать C unsigned int
, который имеет длину 4 байта и может кодировать значения от 0 до 65535.
Изменив тип с char
на int
, я не изменил смысловой смысл поля (это был возраст, выраженный в годах, и он до сих пор есть), однако я изменил его размер. Каждое программное обеспечение, взаимодействующее с моим приложением, менять не нужно, однако оно будет говорить на другом «языке».
Поэтому, когда ядро меняет свой ABI, это означает, что оно изменило язык, на котором оно говорит, но никакие функциональные возможности не были добавлены, удалены или изменены. Все сторонние модули, которые должны взаимодействовать с ядром, должны быть перекомпилированы для того, чтобы говорить на этом новом языке, но их не нужно менять каким-либо образом для правильной работы.