जेनरिक कर्नेल इमेज (जीकेआई) प्रोजेक्ट

प्रॉडक्ट कर्नेल को डिवाइस कर्नेल या OEM कर्नेल भी कहा जाता है. यह वह कर्नेल होता है जिसे डिवाइस पर शिप किया जाता है. GKI से पहले, प्रॉडक्ट के लिए इस्तेमाल होने वाले कर्नेल को, अपस्ट्रीम कर्नेल में किए गए बदलावों की सीरीज़ से लिया जाता था. इमेज 1 में दिखाया गया है कि कर्नेल के जोड़ से प्रॉडक्ट कर्नेल (OEM/डिवाइस कर्नेल) कैसे मिलता है:

GKI से पहले के प्रॉडक्ट के लिए, कर्नेल का निर्माण

पहला डायग्राम. प्री-जीकेआई प्रॉडक्ट कर्नेल बनाना.

  1. kernel.org के Linux लॉन्ग टर्म सपोर्टेड (LTS) कर्नेल में Android के खास पैच के साथ बदलाव किया गया था, जिसकी वजह से Android Common कर्नेल (ACK) बना.
  2. वेंडर ने ACK में बदलाव किया है, ताकि वे अपने सिस्टम-ऑन-एक-चिप (SoC) के लिए सहायता जोड़ सकें. वेंडर, परफ़ॉर्मेंस या पावर ऑप्टिमाइज़ेशन भी जोड़ सकते हैं. इस तरह से तैयार किए गए कर्नेल को वेंडर कर्नेल कहा जाता है.
  3. आखिर में, OEM ने वेंडर के कर्नेल में बदलाव किया. इसमें वे डिवाइस ड्राइवर और पसंद के मुताबिक बदलाव शामिल किए गए जो उन्हें ज़रूरी लगे. इस प्रोसेस के बाद बने कर्नेल को प्रॉडक्ट कर्नेल कहा जाता है.

इन सभी बदलावों की वजह से हो सकता है कि कर्नेल कोड का 50% हिस्सा, आउट-ऑफ़-ट्री कोड हो, न कि अपस्ट्रीम Linux कर्नेल या ACK का. GKI से पहले, करीब-करीब हर डिवाइस में एक कस्टम कर्नेल होता था, जिससे कर्नेल फ़्रैगमेंटेशन होता था.

फ़्रैगमेंटेशन का खर्च

Android कम्यूनिटी पर, अलग-अलग तरह के कर्नेल का कई तरह से बुरा असर पड़ता है.

सुरक्षा से जुड़े अपडेट में बहुत मेहनत लगती है

Android Security Bulletin (ASB) में बताए गए सुरक्षा पैच को, डिवाइस के हर कर्नेल में बैकपोर्ट करना ज़रूरी है. हालांकि, कर्नेल फ़्रैगमेंटेशन की वजह से, फ़ील्ड में मौजूद Android डिवाइसों पर सुरक्षा से जुड़े सुधारों को लागू करना ज़्यादा खर्चीला है.

लंबे समय तक काम करने वाले अपडेट को मर्ज करना मुश्किल है

लंबे समय तक इस्तेमाल के लिए उपलब्ध (LTS) रिलीज़ में, सुरक्षा से जुड़ी गड़बड़ियों को ठीक करने के साथ-साथ, अन्य अहम गड़बड़ियों को ठीक करने की सुविधाएं शामिल होती हैं. सुरक्षा से जुड़ी समस्याओं को ठीक करने का सबसे असरदार तरीका, एलटीएस रिलीज़ के साथ अप-टू-डेट रहना है. Pixel डिवाइसों पर, यह पता चला कि ASB में रिपोर्ट की गई कर्नेल सुरक्षा से जुड़ी 90% समस्याएं, अप-टू-डेट रहने वाले डिवाइसों पर पहले ही ठीक कर दी गई हैं.

हालांकि, डिवाइस के कर्नेल में किए गए सभी कस्टम बदलावों की वजह से, डिवाइस के कर्नेल में LTS के सुधारों को मर्ज करना मुश्किल है.

Android प्लैटफ़ॉर्म रिलीज़ के अपग्रेड को रोकना

फ़्रैगमेंटेशन की वजह से, Android की नई सुविधाओं को फ़ील्ड में मौजूद डिवाइसों में जोड़ना मुश्किल हो जाता है. ऐसा इसलिए, क्योंकि इन सुविधाओं के लिए, कर्नेल में बदलाव करना ज़रूरी होता है. Android कोड में यह माना जाना चाहिए कि नए प्लैटफ़ॉर्म के रिलीज़ में कर्नेल के ज़्यादा से ज़्यादा पांच वर्शन काम करते हैं और कर्नेल में कोई बदलाव नहीं किया गया है Android 10 पर 3.18, 4.4, 4.9, 4.14, और 4.19 कर्नेल काम करते हैं. इनमें से कुछ मामलों में 2017 फ़्रेमवर्क के बाद से नई सुविधाओं का इस्तेमाल नहीं किया जा सका है.

अपस्ट्रीम Linux में, कर्नेल में किए गए बदलावों को वापस जोड़ना मुश्किल है

कर्नेल में सभी बदलाव किए जा रहे हैं. इसलिए, ज़्यादातर फ़्लैगशिप डिवाइस, कर्नेल वर्शन के साथ भेज दिए जाते हैं जो पहले से कम से कम 18 महीने पुराना है. उदाहरण के लिए, kernel.org ने 4.14 कर्नेल को नवंबर 2017 में रिलीज़ किया था. साथ ही, 4.14 कर्नेल का इस्तेमाल करने वाले पहले Android फ़ोन, 2019 की शुरुआत में लॉन्च किए गए थे.

अपस्ट्रीम कर्नेल के रिलीज़ होने और प्रॉडक्ट के बीच ज़्यादा समय लगने की वजह से, Android समुदाय के लिए ज़रूरी सुविधाओं और ड्राइवरों को अपस्ट्रीम कर्नेल में फ़ीड करना मुश्किल हो जाता है.

फ़्रैगमेंटेशन ठीक करना: जेनरिक कर्नेल इमेज

Generic Kernel Image (GKI) प्रोजेक्ट, कोर कर्नेल को एक करके और SoC और बोर्ड के लिए सहायता को कोर कर्नेल से हटाकर, लोड किए जा सकने वाले वेंडर मॉड्यूल में ले जाकर, कर्नेल के फ़्रैगमेंटेशन की समस्या को हल करता है. GKI, वेंडर मॉड्यूल के लिए एक स्थिर कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) भी उपलब्ध कराता है, ताकि मॉड्यूल और कर्नेल को अलग-अलग अपडेट किया जा सके. GKI के कुछ मुख्य फ़ीचर:

  • GKI कर्नेल को ACK स्रोतों से बनाया गया है.
  • GKI कर्नेल, हर आर्किटेक्चर के लिए एक कर्नेल बाइनरी और उससे जुड़े लोड किए जा सकने वाले मॉड्यूल होता है. यह हर LTS रिलीज़ के लिए होता है. फ़िलहाल, android11-5.4 और android12-5.4 के लिए सिर्फ़ arm64 होता है.
  • GKI कर्नेल की जांच, Android प्लैटफ़ॉर्म के उन सभी रिलीज़ के साथ की जाती है जिन पर इससे जुड़े ACK काम करते हैं. GKI के किसी भी वर्शन के लिए, सुविधाएं बंद नहीं की जातीं.
  • GKI कर्नेल, ड्राइवरों को किसी दिए गए LTS में एक स्थिर KMI दिखाता है.
  • GKI कर्नेल में, SoC या बोर्ड के हिसाब से कोड शामिल नहीं होता.

GKI आर्किटेक्चर की इमेज के लिए, कर्नल की खास जानकारी देखें.

GKI एक जटिल बदलाव है, जिसे कई चरणों में रोल आउट किया गया है. यह बदलाव, Android 11 प्लैटफ़ॉर्म रिलीज़ में v5.4 कर्नेल से शुरू हुआ था.

जीकेआई के दो चरण होते हैं:

  • GKI 1.0 को Android 11 में, 5.4 कर्नेल वाले डिवाइसों के लिए लॉन्च किया गया था. GKI 1.0, 5.4 कर्नेल के साथ शिप किए गए सभी डिवाइसों पर लागू होता है. भले ही, वे Android 12 या Android 13 के साथ लॉन्च किए गए हों.
  • GKI 2.0 को Android 12 में, 5.10 कर्नेल वाले डिवाइसों के लिए लॉन्च किया गया था. यह 5.10 या उसके बाद के कर्नेल वाले सभी डिवाइसों के लिए नया स्टैंडर्ड है.

GKI 1.0

GKI 1.0 में, कर्नेल वर्शन 5.4 के साथ लॉन्च होने वाले डिवाइसों को GKI टेस्टिंग के साथ पास होना ज़रूरी है (Android 11 और उसके बाद के वर्शन वाले प्लैटफ़ॉर्म रिलीज़). GKI 1.0 के लक्ष्यों में ये शामिल हैं:

  • प्रॉडक्ट के कर्नेल को GKI कर्नेल से बदलते समय, वेंडर टेस्ट सुइट (VTS) या कंपैटिबिलिटी टेस्ट सुइट (CTS) में, परफ़ॉर्मेंस में गिरावट आने से बचें.
  • पार्टनर को AOSP के सामान्य कर्नेल के साथ अपने कर्नेल को अप-टू-डेट रखने का बोझ कम करना.
  • Android के नए वर्शन के साथ डिवाइसों को अपग्रेड करने और लॉन्च करने के लिए, Android के मुख्य बदलावों को कर्नेल में शामिल करें.
  • Android के यूज़रस्पेस को न तोड़ें.
  • लोड किए जा सकने वाले मॉड्यूल के तौर पर, हार्डवेयर के हिसाब से बने कॉम्पोनेंट को कोर कर्नेल से अलग करें.

GKI 1.0 दस्तावेज़ के लिए, GKI 1.0 सेक्शन देखें.

GKI 2.0

GKI 2.0 में, कर्नेल के 5.10 या इसके बाद के वर्शन के साथ लॉन्च होने वाले डिवाइसों में GKI कर्नेल (Android 12 से शुरू) होना चाहिए. हस्ताक्षर वाली बूट इमेज उपलब्ध हैं और इन्हें नियमित तौर पर अपडेट किया जाता है. इनमें एलटीएस और गड़बड़ियों को ठीक करने वाले अहम अपडेट शामिल होते हैं. KMI के लिए बाइनरी स्टेबिलिटी को बनाए रखा जाता है. इसलिए, वेंडर इमेज में बदलाव किए बिना, इन बूट इमेज को इंस्टॉल किया जा सकता है. GKI 2.0 के लक्ष्यों में ये शामिल हैं:

  • प्रॉडक्ट के कर्नेल को GKI कर्नेल से बदलते समय, परफ़ॉर्मेंस या पावर में काफ़ी गिरावट न आने दें.
  • पार्टनर को वेंडर के बिना, कर्नेल की सुरक्षा से जुड़ी गड़बड़ियों को ठीक करने और गड़बड़ियों को ठीक करने की सुविधा देना.
  • डिवाइसों के लिए, मुख्य कर्नेल वर्शन को अपडेट करने की लागत कम करें. उदाहरण के लिए, v5.10 से 2021 LTS कर्नेल पर.
  • हर आर्किटेक्चर के लिए, GKI के एक ही कर्नेल बाइनरी को बनाए रखें. इसके लिए, कर्नेल के वर्शन को अपडेट करें और अपग्रेड करने की साफ़ तौर पर बताई गई प्रोसेस का पालन करें.

GKI 2.0, Android के कर्नेल की सबसे नई स्थिति दिखाता है. GKI 1.0 और पिछले कर्नेल (4.19 से पहले के) सब-सेक्शन के बाहर मौजूद कर्नेल दस्तावेज़, GKI 2.0 आर्किटेक्चर को दिखाते हैं.