AOSP के सामान्य कर्नेल (इन्हें Android के सामान्य कर्नेल या ACK भी कहा जाता है) kernel.org के कर्नेल के डाउनस्ट्रीम होते हैं. इनमें Android कम्यूनिटी के लिए ज़रूरी पैच शामिल होते हैं. ये पैच, मेनलाइन या लॉन्ग टर्म सपोर्ट (एलटीएस) कर्नेल में मर्ज नहीं किए गए होते हैं. इन पैच में ये शामिल हो सकते हैं:
- Android की सुविधाओं के लिए, अपस्ट्रीम फ़ंक्शनैलिटी के बैकपोर्ट और चेरी-पिक की ज़रूरत होती है
- ऐसी सुविधाएं जो Android डिवाइसों के लिए तैयार हैं, लेकिन अब भी अपस्ट्रीम पर उन पर काम चल रहा है
- वेंडर/ओईएम की ऐसी सुविधाएं जो नेटवर्क के अन्य पार्टनर के लिए काम की हों
android-mainline, Android की सुविधाओं के लिए मुख्य डेवलपमेंट ब्रांच है. जब Linus Torvalds कोई रिलीज़ या रिलीज़ कैंडिडेट पोस्ट करते हैं, तब Linux
mainline को android-mainline में मर्ज कर दिया जाता है. साल 2019 से पहले, Android के सामान्य कर्नल, हाल ही में घोषित किए गए एलटीएस कर्नल को क्लोन करके बनाए जाते थे. साथ ही, इनमें Android के लिए खास तौर पर बनाए गए पैच जोड़े जाते थे. इस प्रोसेस को 2019 में बदल दिया गया था, ताकि नए Android कॉमन कर्नल को android-mainline से अलग किया जा सके. इस नए मॉडल में, Android पैच को फ़ॉरवर्ड पोर्ट करने और उनकी जांच करने के लिए ज़्यादा मेहनत नहीं करनी पड़ती. ऐसा इसलिए, क्योंकि यह मॉडल एक ही नतीजे को धीरे-धीरे हासिल करता है. android-mainline की लगातार टेस्टिंग की जाती है. इसलिए, इस मॉडल में पब्लिश होने के दिन से ही अच्छी क्वालिटी वाला कर्नल शामिल होता है.
जब अपस्ट्रीम में कोई नया एलटीएस घोषित किया जाता है, तो उससे जुड़ा सामान्य कर्नल android-mainline से ब्रांच किया जाता है. इससे पार्टनर, एलटीएस वर्शन के एलान से पहले ही प्रोजेक्ट शुरू कर सकते हैं. इसके लिए, उन्हें android-mainline से मर्ज करना होगा. नई कॉमन कर्नल ब्रांच बनने के बाद, पार्टनर आसानी से मर्ज करने के सोर्स को नई ब्रांच में बदल सकते हैं.
अन्य सामान्य कर्नल ब्रांच को, उनसे जुड़ी एलटीएस कर्नल से नियमित तौर पर मर्ज किया जाता है.
आम तौर पर, एलटीएस रिलीज़ पोस्ट होने के तुरंत बाद इन वर्शन को मर्ज कर दिया जाता है. उदाहरण के लिए, जब Linux 6.1.75 पोस्ट किया गया था, तब इसे 6.1 कॉमन कर्नल (android14-6.1) में मर्ज कर दिया गया था. पार्टनर को अपने कर्नल अपडेट करने के लिए कहा जाता है, ताकि वे एलटीएस और Android से जुड़ी गड़बड़ियों को ठीक करने के अपडेट के साथ अप-टू-डेट रहें.
ACK KMI कर्नेल ब्रांच
जीकेआई कर्नेल में, कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) स्थिर होता है. केएमआई की पहचान, कर्नेल वर्शन और Android प्लैटफ़ॉर्म रिलीज़ के हिसाब से की जाती है. इसलिए, ब्रांच के नाम ANDROID_RELEASE-KERNEL_VERSION होते हैं.
उदाहरण के लिए, Android 14 के लिए 6.1 GKI कर्नेल का नाम android14-6.1 है. Android 15 के लिए, जीकेआई कर्नेल android15-6.6 को लॉन्च किया गया था.
कॉमन कर्नल हैरारकी
android-mainline से ब्रांच
कॉमन कर्नल हैरारकी का टॉप लेवल, इमेज 1 में दिखाया गया है.
पहली इमेज. android-mainline कर्नल से कॉमन कर्नल बनाना
ध्यान दें कि 2022 में, android-mainline से एक नया Android कॉमन कर्नल android14-6.1 बनाया गया था. साल 2023 में, जब अगला एलटीएस वर्शन लॉन्च किया गया, तब android15-6.6 को android-mainline से अलग कर दिया गया.
पहले फ़िगर में दिखाया गया है कि हर कर्नल वर्शन, दो GKI कर्नल के लिए आधार हो सकता है.
उदाहरण के लिए, v5.15 के दो कर्नल android13-5.15 और android14-5.15 हैं. ये दोनों, अपने-अपने प्लैटफ़ॉर्म रिलीज़ के लिए फ़ीचर कर्नल हैं. 5.10 के लिए भी ऐसा ही किया गया था. android12-5.10 को तब बनाया गया था, जब एलटीएस का एलान किया गया था. साथ ही, android13-5.10 को android12-5.10 से स्प्रिंग 2021 में कर्नेल फ़ीचर के पूरे माइलस्टोन पर ब्रांच किया गया था, ताकि Android 13 के लिए सुविधाओं को डेवलप किया जा सके. Android 15 (2024) से, हर कर्नेल वर्शन के लिए सिर्फ़ एक नया जीकेआई कर्नेल होगा. इसमें कोई android15-6.1 कर्नेल नहीं होगा.
ACK KMI ब्रांच का लाइफ़साइकल
दूसरी इमेज में, ACK KMI ब्रांच का लाइफ़साइकल दिखाया गया है.
दूसरी इमेज. 6.6 ACK KMI ब्रांच का लाइफ़साइकल
डेवलपमेंट प्रोसेस और ब्रांच के लाइफ़साइकल के बारे में ज़्यादा जानकारी देने के लिए, इमेज 2 में 6.6 के लिए ACK KMI ब्रांच पर फ़ोकस किया गया है.
हर ACK KMI ब्रांच, तीन चरणों से गुज़रती है. इन्हें इमेज 2 में दिखाया गया है. हर ब्रांच में अलग-अलग रंगों से इन चरणों को दिखाया गया है. जैसा कि दिखाया गया है, एलटीएस को नियमित तौर पर मर्ज किया जाता है. इससे कोई फ़र्क़ नहीं पड़ता कि यह किस फ़ेज़ में है.
डेवलपमेंट फ़ेज़
इसे बनाने के बाद, ACK KMI ब्रांच डेवलपमेंट फ़ेज़ में चली जाती है. इसे इमेज 2 में dev के तौर पर लेबल किया गया है. साथ ही, यह Android के अगले प्लैटफ़ॉर्म रिलीज़ के लिए, सुविधाओं के योगदान के लिए उपलब्ध होती है. दूसरे डायग्राम में, android15-6.6 तब बनाया गया था, जब 6.6 को नया अपस्ट्रीम एलटीएस कर्नल घोषित किया गया था.
स्टेबलाइज़ेशन फ़ेज़
जब ACK KMI ब्रांच को 'सुविधा पूरी तरह से उपलब्ध है' के तौर पर मार्क कर दिया जाता है, तब यह स्टेबलाइज़ेशन फ़ेज़ में चली जाती है. इसे इमेज 2 में स्टेबल के तौर पर लेबल किया गया है. पार्टनर की सुविधाओं और बग ठीक करने से जुड़े अपडेट अब भी स्वीकार किए जाते हैं. हालांकि, इंटरफ़ेस पर असर डालने वाले किसी भी बदलाव का पता लगाने के लिए, केएमआई ट्रैकिंग की सुविधा चालू की जाती है. इस फ़ेज़ में, केएमआई में नुकसान पहुंचाने वाले बदलावों को स्वीकार किया जाता है. साथ ही, केएमआई की परिभाषा को पहले से तय किए गए कैडेंस (आम तौर पर हर दो हफ़्ते) पर अपडेट किया जाता है. केएमआई मॉनिटरिंग के बारे में ज़्यादा जानने के लिए, जीकेआई की खास जानकारी देखें.
केएमआई फ़्रोज़न फ़ेज़
किसी नई रिलीज़ को AOSP पर पुश करने से पहले, ACK KMI ब्रांच को फ़्रीज़ कर दिया जाता है. यह ब्रांच के लाइफ़टाइम तक फ़्रीज़ रहती है. इसका मतलब है कि KMI में कोई भी ऐसा बदलाव स्वीकार नहीं किया जाएगा जिससे KMI पर असर पड़े. हालांकि, अगर सुरक्षा से जुड़ी कोई गंभीर समस्या मिलती है और उसे स्टेबल KMI पर असर डाले बिना ठीक नहीं किया जा सकता, तो बदलाव स्वीकार किया जा सकता है. केएमआई में बदलाव से बचने के लिए, एलटीएस से मर्ज किए गए कुछ पैच में बदलाव किया जा सकता है या उन्हें हटाया जा सकता है. ऐसा तब किया जाता है, जब Android डिवाइसों के लिए फ़िक्स की ज़रूरत नहीं होती.
जब ACK KMI ब्रांच फ़्रीज़ हो जाती है, तब बग ठीक करने और पार्टनर की सुविधाओं को स्वीकार किया जा सकता है. हालांकि, ऐसा तब तक किया जा सकता है, जब तक मौजूदा KMI कॉमन कर्नल काम कर रहा हो. केएमआई को एक्सटेंड किया जा सकता है. इसके लिए, नए एक्सपोर्ट किए गए सिंबल का इस्तेमाल किया जा सकता है. हालांकि, यह तब तक किया जा सकता है, जब तक मौजूदा केएमआई में शामिल इंटरफ़ेस पर कोई असर न पड़े. KMI में नए इंटरफ़ेस जोड़े जाने पर, वे तुरंत स्टेबल हो जाते हैं. साथ ही, आने वाले समय में होने वाले बदलावों से उन पर कोई असर नहीं पड़ता.
उदाहरण के लिए, केएमआई इंटरफ़ेस के ज़रिए इस्तेमाल किए गए स्ट्रक्चर में फ़ील्ड जोड़ने वाले बदलाव की अनुमति नहीं है. ऐसा इसलिए, क्योंकि इससे इंटरफ़ेस की परिभाषा बदल जाती है:
struct foo {
int original_field1;
int original_field2;
int new_field; // Not allowed
};
int do_foo(struct foo &myarg)
{
do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);
हालांकि, नया फ़ंक्शन जोड़ने में कोई समस्या नहीं है:
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
GKI कर्नेल के पूरे जीवनकाल के दौरान, यूज़रस्पेस के साथ पुराने सिस्टम के साथ काम करने की सुविधा को बनाए रखा जाता है. इससे कर्नेल को Android प्लैटफ़ॉर्म के उस वर्शन के लिए सुरक्षित तरीके से इस्तेमाल किया जा सकता है जिसके साथ डिवाइस लॉन्च किया गया था. पिछले वर्शन के साथ लगातार टेस्टिंग करने से, कंपैटिबिलिटी बनी रहती है. इसलिए, इमेज 2 में android15-6.6
कर्नेल का इस्तेमाल, Android 15 और इसके बाद के वर्शन वाले डिवाइसों के लिए किया जा सकता है. Android प्लैटफ़ॉर्म का यह रिलीज़ वर्शन, पिछले वर्शन के साथ भी काम करता है. इसलिए, Android 15 वाले डिवाइसों पर android14-6.1 कर्नल का इस्तेमाल, लॉन्च या अपग्रेड करने के लिए किया जा सकता है.
केएमआई जनरेशन नंबर
अगर स्टेबलाइज़ेशन फ़ेज़ के दौरान एलटीएस मर्ज होता है या इसके बाद कोई सुरक्षा समस्या या अन्य इवेंट होता है जिसके लिए KMI बदलने वाले पैच को स्वीकार करना ज़रूरी है, तो build.config.common में रिकॉर्ड किया गया KMI जनरेशन नंबर बढ़ जाता है. uname कमांड का इस्तेमाल करके, मौजूदा KMI जनरेशन का पता लगाया जा सकता है:
$ uname -r
6.6.30-android15-6-g86d10b30f51f
प्लैटफ़ॉर्म रिलीज़ के बाद वाला नंबर, केएमआई जनरेशन (इस मामले में 6) होता है.
अगर केएमआई जनरेशन में बदलाव होता है, तो कर्नल, वेंडर मॉड्यूल के साथ काम नहीं करता है. ये मॉड्यूल, केएमआई के पिछले जनरेशन के मुताबिक होते हैं. इसलिए, मॉड्यूल को फिर से बनाना होगा और कर्नल के साथ सिंक्रोनस तरीके से अपडेट करना होगा. केएमआई फ़्रीज़ होने के बाद, केएमआई जनरेशन में बदलाव होने की संभावना बहुत कम होती है.
कर्नेल के बीच काम करने की सुविधा
एक ही एलटीएस फ़ैमिली के कर्नलों के बीच काम करने से जुड़ी ज़रूरी शर्तें, नए GKI कर्नलों के साथ बदल रही हैं.
GKI कर्नल
जीकेआई कर्नेल, Android प्लैटफ़ॉर्म की उन सभी रिलीज़ के साथ काम करते हैं जिनमें कर्नेल वर्शन काम करता था. इसके अलावा, Android प्लैटफ़ॉर्म के रिलीज़ किए गए वर्शन, पिछली रिलीज़ के GKI कर्नल के साथ काम करते हैं. इसलिए, Android 15 (2024) पर चलने वाले डिवाइसों पर, Android 14 (2023) के लिए डेवलप किए गए android14-6.1 कर्नल का सुरक्षित तरीके से इस्तेमाल किया जा सकता है. यह पुष्टि की जाती है कि जीकेआई कर्नेल, सभी रिलीज़ के साथ काम करते हैं या नहीं. इसके लिए, जीकेआई कर्नेल की लगातार वीटीएस और सीटीएस टेस्टिंग की जाती है.
केएमआई स्थिर है, ताकि वेंडर इमेज में कर्नेल मॉड्यूल को फिर से बनाए बिना कर्नेल को अपडेट किया जा सके.
अलग-अलग जीकेआई कर्नेल के बीच केएमआई के साथ काम करने की सुविधा नहीं होती. इसलिए, उदाहरण के लिए, सभी मॉड्यूल को फिर से बनाए बिना, android14-6.1 कर्नल को android15-6.6 कर्नल से नहीं बदला जा सकता.
GKI कर्नल, सिर्फ़ शुरुआती और बाद की रिलीज़ के लिए काम करते हैं.
ये सुविधाएं, पुराने वर्शन के साथ काम नहीं करती हैं. इसलिए, Android 14 (2023) पर काम करने वाले डिवाइसों के लिए, android15-6.6 कर्नल काम नहीं करता.
कंपैटबिलिटी मैट्रिक्स
इस टेबल में, Android के हर प्लैटफ़ॉर्म रिलीज़ के साथ काम करने वाले और टेस्ट किए गए कर्नल वर्शन दिखाए गए हैं.
| Android प्लैटफ़ॉर्म रिलीज़ | इस्तेमाल किए जा सकने वाले कर्नल |
|---|---|
| Android 17 (2026) |
android17-6.18
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10 (Android 17 QPR1 या इसके बाद के वर्शन में काम नहीं करता)
android12-5.10 (Android 17 QPR1 या इसके बाद के वर्शन में काम नहीं करता)
|
| Android 16 (2025) |
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4 (Android 16 QPR1 या इसके बाद के वर्शन में काम नहीं करता)
android11-5.4 (Android 16 QPR1 या इसके बाद के वर्शन में काम नहीं करता)
|
| Android 15 (2024) |
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
| Android 14 (2023) |
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
| Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
| Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
|
सॉफ़्टवेयर अपडेट और सुरक्षा पैच
ACK को अपस्ट्रीम से एलटीएस मर्ज मिलते हैं. साथ ही, Android के लिए खास तौर पर बनाए गए कोड से जुड़ी गड़बड़ियां ठीक की जाती हैं. इन फ़िक्स में, कर्नल के वे सभी सुरक्षा पैच शामिल होते हैं जिनका ज़िक्र, हर महीने जारी होने वाले Android सुरक्षा बुलेटिन में किया जाता है और जो ACK के लिए ज़रूरी होते हैं.
ऐसा हो सकता है कि ACKs को kernel.org पर मौजूद अपस्ट्रीम स्टेबल कर्नल की तुलना में ज़्यादा समय तक सहायता मिले. इस मामले में, Google इस सेक्शन में दिखाई गई सेवा बंद होने की तारीख (ईओएल) तक, एक्सटेंडेड सपोर्ट देता है. जब कर्नल का ईओएल हो जाता है, तो Google उन्हें सपोर्ट नहीं करता. साथ ही, उन पर काम करने वाले डिवाइसों को असुरक्षित माना जाता है.
कर्नल 6.6 से, स्टेबल कर्नल के लिए सपोर्ट की अवधि चार साल है.
इस टेबल में, पुष्टि किए गए मैसेज के लिए तय की गई समयसीमाएं दिखाई गई हैं:
| ACK ब्रांच | लॉन्च की तारीख |
Support lifetime (years) |
ईओएल |
|---|---|---|---|
| android11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
| android12-5.4 | 2019-11-24 | 6 | 2026-01-01 |
| android12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
| android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
| android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
| android14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
| android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
| android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
| android16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
सामान्य कर्नल टेस्टिंग
सामान्य कर्नलों की जांच, कई सीआई सिस्टम के साथ-साथ वेंडर की डाउनस्ट्रीम टेस्टिंग से भी की जाती है.
Linux कर्नेल फ़ंक्शनल टेस्ट
Linux Kernel Functional Test (LKFT), arm32 और arm64 डिवाइसों के सेट पर kselftest, LTP, VTS, और CTS जैसे अलग-अलग टेस्ट सुइट शुरू करता है. हाल ही के टेस्ट के नतीजे, android-lkft पेज पर देखे जा सकते हैं.
KernelCI टेस्टिंग
KernelCI के बिल्ड और बूट टेस्ट, तब शुरू किए जाते हैं, जब किसी सामान्य कर्नल ब्रांच में कोई नया पैच जोड़ा जाता है. कई बोर्ड पर, सैकड़ों बिल्ड कॉन्फ़िगरेशन की जांच की जाती है और उन्हें बूट किया जाता है. Android कर्नल के हाल ही के नतीजे, KernelCL साइट पर देखे जा सकते हैं.
Android ऐप्लिकेशन के लिए, सबमिट करने से पहले और सबमिट करने के बाद की जाने वाली टेस्टिंग
प्रीसबमिट टेस्ट का इस्तेमाल, Android के सामान्य कर्नल में गड़बड़ियों को रोकने के लिए किया जाता है. टेस्ट के नतीजों की खास जानकारी, Android के सामान्य कर्नल गेरिट में कोड में किए गए बदलाव के 'Checks' टैब में देखी जा सकती है.
Android की पोस्टसबमिट टेस्टिंग, Android के सामान्य कर्नल ब्रांच में पब्लिश की गई नई बिल्ड पर की जाती है. ऐसा तब होता है, जब ci.android.com में Android के सामान्य कर्नल ब्रांच में नए पैच जोड़े जाते हैं. ci.android.com में ब्रांच के नाम के तौर पर aosp_kernel डालने पर, आपको कर्नल ब्रांच की एक सूची दिखेगी. इसमें नतीजे भी उपलब्ध होंगे. उदाहरण के लिए, android-mainline के नतीजे, Android कंटीन्यूअस बिल्ड इंटिग्रेशन (Android CI) डैशबोर्ड पर देखे जा सकते हैं. Test Results टैब में टेस्ट का स्टेटस देखने के लिए, किसी बिल्ड पर क्लिक करें.
Android प्लैटफ़ॉर्म के सोर्स ट्री में, test-mapping के ज़रिए तय किए गए टेस्ट, Android कर्नल ब्रांच के लिए प्रीसबमिट के तौर पर चलाए जाते हैं. इन टेस्ट को kernel-presubmit टेस्ट ग्रुप के साथ चलाया जाता है. उदाहरण के लिए, test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING में दिया गया यह कॉन्फ़िगरेशन, Android के सामान्य कर्नल कोड चेक-इन के दौरान vts_kernel_proc_file_api_test को प्रीसबमिट टेस्ट के तौर पर चालू करता है.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
ज़ीरो डे टेस्टिंग
0-दिन की टेस्टिंग में, नए पैच लागू होने पर, Android के सभी सामान्य कर्नल ब्रांच पर पैच-बाय-पैच टेस्टिंग की जाती है. बूट, फ़ंक्शनल, और परफ़ॉर्मेंस से जुड़े अलग-अलग टेस्ट किए जाते हैं. cros-kernel-buildreports सार्वजनिक ग्रुप में शामिल हों.
टेस्ट मैट्रिक्स
| Android का कॉमन कर्नल | Android प्लैटफ़ॉर्म के रिलीज़ हुए वर्शन | टेस्ट सुइट | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| मुख्य नेविगेशन | 16 | 15 | 14 | 13 | 12 | LKFT | KernelCI | सबमिट करने से पहले | सबमिट करने के बाद | ज़ीरो डे | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Android के सामान्य कर्नल में योगदान देना
आम तौर पर, सुविधा को mainline Linux पर डेवलप किया जाना चाहिए, न कि Android के सामान्य कर्नेल पर. हमारा सुझाव है कि अपस्ट्रीम डेवलपमेंट का इस्तेमाल करें. अगर अपस्ट्रीम डेवलपमेंट को स्वीकार कर लिया जाता है, तो इसे ज़रूरत के हिसाब से ACK की किसी खास शाखा में वापस लाया जा सकता है. Android Kernel Team, Android नेटवर्क को बेहतर बनाने के लिए, अपस्ट्रीमिंग से जुड़े प्रयासों में आपकी मदद करके खुश है.
Gerrit पर पैच सबमिट करें और योगदान से जुड़े इन दिशा-निर्देशों का पालन करें.