इस पेज पर, Generic Kernel Image (GKI) प्रोजेक्ट के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि यह Android को कैसे बेहतर बनाता है और उसकी सुरक्षा को कैसे बढ़ाता है.
इतिहास
Android वाले हर डिवाइस में प्रोडक्शन कर्नेल होना ज़रूरी है. GKI से पहले, कर्नेल कस्टम और Android Common Kernel (ACK) पर आधारित होते थे. साथ ही, चिप पर सिस्टम (SoC) वेंडर और OEM, डिवाइस के हिसाब से बदलाव करते थे.
इस कस्टमाइज़ेशन की वजह से, 50% तक कोर कोड, आउट-ऑफ़-ट्री कोड हो सकता है. यह कोड, अपस्ट्रीम Linux कोर या ACK से नहीं आता. इसलिए, GKI से पहले के कर्नल के कस्टम होने की वजह से, कर्नल का फ़्रैगमेंटेशन काफ़ी ज़्यादा हुआ.
फ़्रैगमेंटेशन की लागत
Android कम्यूनिटी पर, कर्नेल के अलग-अलग वर्शन होने से कई बुरे असर पड़ते हैं.
सुरक्षा से जुड़े अपडेट लागू करने में काफ़ी मेहनत लगती है
Android Security Bulletin (ASB) में बताए गए सुरक्षा पैच को, डिवाइस के हर कर्नेल में बैकपोर्ट किया जाना चाहिए. हालांकि, कर्नेल के फ़्रैगमेंटेशन की वजह से, फ़ील्ड में मौजूद Android डिवाइसों पर सुरक्षा से जुड़ी समस्याओं को ठीक करना काफ़ी महंगा है.
लंबे समय तक काम करने वाले अपडेट को मर्ज करना मुश्किल है
लंबे समय तक काम करने वाले (एलटीएस) वर्शन में, सुरक्षा से जुड़ी गड़बड़ियां और अन्य गंभीर गड़बड़ियां ठीक की गई हैं. एलटीएस रिलीज़ के साथ अप-टू-डेट रहना, सुरक्षा से जुड़ी समस्याओं को ठीक करने का सबसे असरदार तरीका साबित हुआ है. Pixel डिवाइसों पर, यह पता चला था कि ASB में बताई गई, कर्नेल की सुरक्षा से जुड़ी 90% समस्याएं, पहले से ही ठीक कर दी गई थीं. ऐसा उन डिवाइसों के लिए किया गया था जो अप-टू-डेट रहते हैं.
हालांकि, डिवाइस के कर्नेल में किए गए सभी कस्टम बदलावों की वजह से, डिवाइस के कर्नेल में LTS के सुधारों को मर्ज करना मुश्किल है.
Android प्लैटफ़ॉर्म रिलीज़ के अपग्रेड को रोकना
फ़्रैगमेंटेशन की वजह से, Android की नई सुविधाओं को फ़ील्ड में मौजूद डिवाइसों में जोड़ना मुश्किल हो जाता है. ऐसा इसलिए, क्योंकि इन सुविधाओं के लिए, कर्नेल में बदलाव करना ज़रूरी होता है. Android फ़्रेमवर्क कोड को अलग-अलग कर्नेल वैरिएशन के हिसाब से काम करना पड़ता था. साथ ही, यह कर्नेल में लागू की जा रही Android की नई सुविधाओं पर निर्भर नहीं रह सकता था. इस वजह से, इनोवेशन की रफ़्तार धीमी हो गई और कोड का साइज़ और जटिलता बढ़ गई.
कर्नेल में किए गए बदलावों को, अपस्ट्रीम Linux में वापस जोड़ना मुश्किल है
प्रोडक्शन कर्नेल में पैच को अलग-अलग तरीके से शामिल करने की वजह से, एलटीएस रिलीज़ के अपस्ट्रीम में उपलब्ध होने से लेकर डिवाइस में उपलब्ध होने तक, 18 महीने तक की देरी हुई. अपस्ट्रीम कर्नेल रिलीज़ और प्रॉडक्ट के बीच का यह लंबा समय, Android कम्यूनिटी के लिए अपस्ट्रीम कर्नेल में ज़रूरी सुविधाओं और ड्राइवर को फ़ीड करना मुश्किल बना देता है. जब तक उपयोगकर्ता ने सुधार के सुझाव सबमिट किए, तब तक कोडबेस बदल चुका था. इस वजह से, पैच के काम के होने की जानकारी देना मुश्किल हो गया था.
फ़्रैगमेंटेशन ठीक करना: जेनरिक कर्नेल इमेज
सामान्य कर्नेल इमेज (जीकेआई) प्रोजेक्ट, कोर कर्नेल को एकीकृत करके और SoC और बोर्ड के लिए सहायता को कोर कर्नेल से हटाकर, लोड किए जा सकने वाले वेंडर मॉड्यूल में ले जाकर, कर्नेल के फ़्रैगमेंटेशन की समस्या को हल करता है. GKI, वेंडर मॉड्यूल के लिए भी एक स्थिर कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) उपलब्ध कराता है, ताकि मॉड्यूल और कर्नेल को अलग-अलग अपडेट किया जा सके. GKI के कुछ खास फ़ीचर:
- GKI कर्नेल, ACK सोर्स से बनाया गया है.
- GKI कर्नेल, हर एलटीएस रिलीज़ के लिए एक आर्किटेक्चर के हिसाब से, एक-कर्नेल बाइनरी और उससे जुड़े लोड किए जा सकने वाले मॉड्यूल होता है.
- GKI कर्नेल की जांच, Android प्लैटफ़ॉर्म के उन सभी रिलीज़ के साथ की जाती है जो इससे जुड़े ACK के साथ काम करते हैं. GKI के किसी भी वर्शन के लिए, सुविधा बंद नहीं की जाती.
- GKI कर्नेल, किसी दिए गए LTS में ड्राइवरों को स्टेबल केएमआई दिखाता है.
- GKI कर्नेल में, SoC या बोर्ड के हिसाब से कोड शामिल नहीं होता.
GKI आर्किटेक्चर की इमेज देखने के लिए, कर्नल की खास जानकारी देखें.
सामान्य इमेज
Android 12 से, कर्नेल वर्शन 5.10 या इसके बाद के वर्शन वाले डिवाइसों में GKI कर्नेल का इस्तेमाल करना ज़रूरी है. सामान्य कर्नेल इमेज (जीकेआई) रिलीज़ के बाइड को नियमित तौर पर अपडेट किया जाता है. साथ ही, इनमें एलटीएस और गड़बड़ियों को ठीक करने के लिए, नियमित तौर पर अपडेट किए जाते हैं. KMI के लिए बाइनरी स्टेबिलिटी को बनाए रखा जाता है. इसलिए, वेंडर इमेज में बदलाव किए बिना, इन बूट इमेज को इंस्टॉल किया जा सकता है. GKI प्रोजेक्ट के ये लक्ष्य हैं:
- प्रॉडक्ट के कर्नेल को GKI कर्नेल से बदलते समय, परफ़ॉर्मेंस या पावर में काफ़ी गिरावट न आने दें.
- पार्टनर को वेंडर के बिना, कर्नेल की सुरक्षा से जुड़ी गड़बड़ियों को ठीक करने और गड़बड़ियों को ठीक करने की सुविधा देना.
- डिवाइसों के लिए, kernel के मेजर वर्शन को अपग्रेड करने की लागत कम हो जाती है.
- हर आर्किटेक्चर के लिए एक GKI कर्नेल बाइनरी बनाए रखें. इसके लिए, कर्नेल के वर्शन को अपडेट करें और अपग्रेड करने की साफ़ तौर पर बताई गई प्रोसेस का इस्तेमाल करें.