ABI अनुप्रयोग बाइनरी इंटरफ़ेस है, (API, एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस के साथ भ्रमित नहीं होना चाहिए)। एबीआई उन आकारों, संकेतों और संख्याओं को परिभाषित करता है जो अनुप्रयोग का उपयोग कर रहे हैं।
स्पष्ट होने के लिए, यहां एक उदाहरण है: मैं एक इमारत की उम्र को सांकेतिक शब्दों में बदलना चाहता हूं, जिसे वर्षों में व्यक्त किया गया है। ऐसा करने के लिए, मैं एक C का उपयोग कर सकता हूं unsigned char
, जो कि एक प्रकार है जिसका आकार 1 बाइट है, और जो 0 से 255 तक मानों को एनकोड कर सकता है। अब मान लीजिए कि मुझे पता चलता है कि 255 एक बहुत कम सीमा है क्योंकि ऐसी इमारतें हैं जिन्हें और अधिक बनाया गया था 255 साल पहले की तुलना में। फिर मैं एक सी का उपयोग कर सकता हूं unsigned int
, जो 4-बाइट लंबा है और 0 से 65535 तक मानों को एन्कोड कर सकता है।
से प्रकार बदलने char
के लिए int
, मैं मैदान के अर्थ अर्थ नहीं बदली हैं (यह एक उम्र के वर्षों में व्यक्त किया गया है और यह अभी भी है), हालांकि मैं इसके आकार बदल दिया है। मेरे अनुप्रयोग के साथ इंटरैक्ट करने वाले प्रत्येक सॉफ़्टवेयर को बदलने की आवश्यकता नहीं होगी, हालाँकि यह एक अलग "भाषा" बोलेगा।
इसलिए, जब कोई कर्नेल अपने ABI को बदलता है, तो इसका मतलब है कि उसने उस भाषा को बदल दिया है जिसे वह बोलता है, लेकिन कोई भी कार्यक्षमताओं को जोड़ा, हटाया या संशोधित नहीं किया गया है। इस नए भाषा को बोलने के लिए कर्नेल के साथ बातचीत करने वाले सभी तीसरे पक्ष के मॉड्यूलों को फिर से जोड़ने की आवश्यकता है, लेकिन उन्हें सही तरीके से काम करने के लिए किसी भी तरह से बदलने की आवश्यकता नहीं है।
aptitude changelog linux-image-2.6.35-28-generic
परिवर्तनों की सूची प्रदर्शित करता है। मुझे यकीन नहीं है कि मेटा-पैकेज में पैकेज के अपडेट क्यों नहीं हैंlinux-{image,headers}-*-generic
; शायद इसलिए किlinux-{image,headers}-*-server
पैकेज भी हैं?