As you can see in the changelog for the Linux kernel, there are update messages like "Bump ABI - Maverick ABI 28".
According to the Ubuntu Wiki, ABI is something like a bridge between the kernel space and the other modules (my interpretation).
Does such an update adds extra features and / or bugfixes? Should I upgrade my kernel to the next version?
First off, you are not looking at the changelog for the linux kernel. You are looking at the meta package, which is a package that depends on the latest kernel. You probably want something like: 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
The purpose of this meta-package is to transition the user through these ABI bumps.
I hold the same view as you on the ABI and the kernel. Practically speaking, an ABI bump means that all the modules need to be rebuilt against the updated kernel.
My understanding is also in line with Roland, in that an ABI bump does not mean new features, just critical fixes and security updates.
NB: I'm no kernel expert - so this is based on collected knowledge and experience.
An ABI "bump" should not bring new features, even though it may "fix" bugs in some modules/applications that are looking for a higher version of the ABI. You should still install these updates, since generally keeping all components in sync will ensure stability and security.
The ABI is the Application Binary Interface, (not to be confused with the API, the Application Programming Interface). The ABI defines the sizes, the signs and the orders of the numbers that the application is using.
To be clear, here is an example: I want to encode the age of a building, expressed in years. To do so, I can use a C
unsigned char
, which is a type which size is 1 byte, and that can encode values from 0 to 255. Now suppose that I discover that 255 is a too low limit because there are buildings which were built more than 255 years ago. I can then use a Cunsigned int
, which is 4-bytes long and can encode values from 0 to 65535.Changing the type from
char
toint
, I haven't changed the semantic meaning of the field (it was an age expressed in years and it still is), however I have changed its size. Every software that interacts with my application won't need to be changed, however it will speak a different "language".Therefore, when a kernel changes its ABI, it means that it has changed the language it speaks, but no functionalities have been added, removed or modified. All third party modules that have to interact with the kernel need to be recompiled in order to speak this new language, but they do not need to be changed in any way in order to work correctly.