ABI là Giao diện nhị phân ứng dụng, (không bị nhầm lẫn với API, Giao diện lập trình ứng dụng). ABI xác định kích thước, dấu hiệu và thứ tự của các số mà ứng dụng đang sử dụng.
Để rõ ràng, đây là một ví dụ: Tôi muốn mã hóa tuổi của một tòa nhà, được thể hiện bằng năm. Để làm như vậy, tôi có thể sử dụng C unsigned char
, loại có kích thước là 1 byte và có thể mã hóa các giá trị từ 0 đến 255. Bây giờ giả sử rằng tôi phát hiện ra rằng 255 là giới hạn quá thấp vì có những tòa nhà được xây dựng nhiều hơn hơn 255 năm trước. Sau đó tôi có thể sử dụng C unsigned int
, dài 4 byte và có thể mã hóa các giá trị từ 0 đến 65535.
Thay đổi loại từ char
sang int
, tôi đã không thay đổi ý nghĩa ngữ nghĩa của trường (đó là thời đại được biểu thị bằng năm và nó vẫn còn), tuy nhiên tôi đã thay đổi kích thước của nó. Mọi phần mềm tương tác với ứng dụng của tôi sẽ không cần phải thay đổi, tuy nhiên phần mềm sẽ nói một "ngôn ngữ" khác.
Do đó, khi một hạt nhân thay đổi ABI của nó, điều đó có nghĩa là nó đã thay đổi ngôn ngữ mà nó nói, nhưng không có chức năng nào được thêm, xóa hoặc sửa đổi. Tất cả các mô-đun của bên thứ ba phải tương tác với kernel cần phải được biên dịch lại để nói ngôn ngữ mới này, nhưng chúng không cần phải thay đổi theo bất kỳ cách nào để hoạt động chính xác.
aptitude changelog linux-image-2.6.35-28-generic
hiển thị một danh sách các thay đổi. Tôi không chắc tại sao gói meta không chứa các bản cập nhật củalinux-{image,headers}-*-generic
gói; Có lẽ vì cũng cólinux-{image,headers}-*-server
gói?