内核更新中的“Bump ABI”是什么意思?

如您在Linux内核的更新日志中所见,有像“Bump ABI - Maverick ABI 28”这样的更新信息。
根据Ubuntu Wiki的解释,ABI是内核空间和其他模块之间的桥梁(我的理解)。
这样的更新是否增加了额外的功能和/或错误修复?我应该升级到下一个版本的内核吗?
3个回答

首先,你并不是在查看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升级意味着所有模块需要重新编译以适应更新后的内核。
我的理解也与Roland一致,即ABI升级并不意味着新功能,只是关键修复和安全更新。

3感谢您指出这只是一个元包。我忘记了这一点。aptitude changelog linux-image-2.6.35-28-generic 显示了一系列的更改。我不确定为什么元包没有包含 linux-{image,headers}-*-generic 包的更新;也许是因为还有 linux-{image,headers}-*-server 包存在? - Lekensteyn

注意:我不是内核专家,所以这个基于积累的知识和经验。
ABI的“升级”不应该带来新特性,尽管它可能“修复”某些模块/应用程序中需要更高版本ABI的错误。你仍然应该安装这些更新,因为通常保持所有组件同步会确保稳定性和安全性。

ABI 是应用程序二进制接口(不要与 API,即应用程序编程接口混淆)。ABI 定义应用程序所使用的数字的大小、符号和顺序。
为了明确,这里有一个例子:我想编码表达为年数的建筑物的年龄。为此,我可以使用 C 中的 "unsigned char",它是一个大小为 1 字节的类型,可以编码从 0 到 255 的值。现在假设我发现 255 是一个太低的限制,因为有些建筑物建造已超过 255 年。然后,我可以使用 C 中的 "unsigned int",它是 4 字节长的类型,可以编码从 0 到 65535 的值。
将类型从 "char" 更改为 "int",我没有改变字段的语义意义(它仍然是以年表示的年龄),但是我改变了其大小。与我的应用程序交互的每个软件都不需要更改,但是它们会使用不同的 "语言" 进行通信。
因此,当内核改变其ABI时,意味着它改变了它所使用的语言,但没有添加、删除或修改任何功能。所有需要与内核进行交互的第三方模块都需要重新编译以适应这种新语言,但它们不需要做任何改动才能正常工作。