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 C
unsigned int, which is 4-bytes long and can encode values from 0 to 65535.
Changing the type from
int, 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.