نواة Android الشائعة

نواة AOSP الشائعة (المعروفة أيضًا باسم نواة Android الشائعة أو ACKs) هي إصدارات سابقة من نواة kernel.org وتتضمّن تصحيحات تهمّ منتدى Android ولم يتم دمجها في النواة الرئيسية أو نواة الإصدارات المتوافقة مع المدى الطويل (LTS). يمكن أن تتضمّن هذه التصحيحات ما يلي:

  • إصدارات قديمة من وظائف المصدر المتاح التي تحتاجها ميزات Android
  • الميزات الجاهزة لأجهزة Android ولكنّها لا تزال قيد التطوير في المصدر
  • ميزات المورّد/المصنّع الأصلي للأجهزة التي تفيد شركاء آخرين في المنظومة المتكاملة

android-mainline هو فرع التطوير الأساسي لميزات Android. يتم دمج الإصدار الرئيسي من Linux في android-mainline كلما نشر Linus Torvalds إصدارًا أو إصدارًا محتملاً. قبل عام 2019، كانت النواة الشائعة لنظام Android تُنشأ من خلال استنساخ نواة LTS التي تم الإعلان عنها مؤخرًا وإضافة تصحيحات خاصة بنظام Android. تم تغيير هذه العملية في عام 2019 لتفريع نواة Android الشائعة الجديدة من android-mainline. يتجنّب هذا النموذج الجديد الجهد الكبير المطلوب لنقل تصحيحات Android إلى إصدارات أقدم واختبارها، وذلك من خلال تحقيق النتيجة نفسها بشكل تدريجي. يخضع نظام التشغيل android-mainline لاختبارات مستمرة مكثفة، ويتضمّن هذا النموذج نواة عالية الجودة منذ يوم نشره.

عند الإعلان عن إصدار جديد من LTS في المصدر، يتم إنشاء فرع لنواة النظام المشتركة المقابلة من android-mainline. يسمح ذلك للشركاء ببدء مشروع قبل الإعلان عن إصدار LTS، وذلك من خلال الدمج من android-mainline. بعد إنشاء فرع جديد لنواة Android المشتركة، يمكن للشركاء تغيير مصدر الدمج إلى الفرع الجديد بسلاسة.

تتلقّى فروع النواة الشائعة الأخرى عمليات دمج منتظمة من نواة LTS المرتبطة بها. ويتم عادةً إجراء عمليات الدمج هذه فور نشر إصدار LTS. على سبيل المثال، عند نشر الإصدار 6.1.75 من Linux، تم دمجه في النواة الشائعة 6.1 (android14-6.1). وننصح الشركاء بشدة بتحديث النواة الخاصة بهم للاطّلاع على آخر إصلاحات الأخطاء المتعلّقة بنظام التشغيل Android والإصدارات المتوافقة مع الصيانة طويلة الأمد.

فرع نواة ACK KMI

تتضمّن نِوى GKI واجهة مستقرة لوحدة النواة. يتم تحديد KMI بشكل فريد من خلال إصدار النواة وإصدار نظام Android الأساسي، لذا يتم تسمية الفروع ANDROID_RELEASE-KERNEL_VERSION. على سبيل المثال، يُطلق على نواة GKI 6.1 لنظام التشغيل Android 14 الاسم android14-6.1. في نظام التشغيل Android 15، تم طرح نواة GKI android15-6.6.

التسلسل الهرمي الشائع للنواة

إنشاء فرع من android-mainline

يظهر المستوى الأعلى من التدرّج الهرمي لنواة النظام المشتركة في الشكل 1.

إنشاء نُوى مشتركة من نواة android-mainline

الشكل 1: إنشاء نُوى مشتركة من نواة android-mainline

يُرجى العِلم أنّه تم إنشاء فرع جديد من نواة Android المشتركة android14-6.1 من android-mainline في عام 2022. في عام 2023، عندما تم الإعلان عن إصدار LTS التالي، تم إنشاء فرع android15-6.6 من android-mainline.

كما هو موضّح في الشكل 1، يمكن أن يكون كل إصدار من إصدارات النواة أساسًا لنواة GKI. على سبيل المثال، نواة الإصدارين 5.15 هما android13-5.15 وandroid14-5.15، وكلاهما نواة إصدارات مخصّصة لمنصتيهما. كان هذا هو الحال أيضًا مع الإصدار 5.10، إذ تم إنشاء android12-5.10 عند الإعلان عن الدعم الطويل الأمد (LTS)، وتم إنشاء فرع android13-5.10 من android12-5.10 عند اكتمال ميزات النواة في ربيع 2021 للسماح بتطوير ميزات الإصدار 13 من Android. بدءًا من Android 15 (2024)، لن يكون هناك سوى نواة GKI واحدة جديدة لكل إصدار من النواة (لن تكون هناك نواة android15-6.1).

مراحل نشاط فرع ACK KMI

يتم عرض مراحل نشاط فرع ACK KMI في الشكل 2.

‫6.6 مراحل نشاط فرع ACK KMI

الشكل 2: ‫6.6 مراحل نشاط فرع ACK KMI

لتوضيح عملية التطوير ودورة حياة الفروع، يركّز الشكل 2 على فروع ACK KMI للإصدار 6.6.

تتضمّن كلّ فرع من فروع ACK KMI ثلاث مراحل موضّحة في الشكل 2 بألوان مختلفة في كلّ فرع. وكما هو موضّح، يتم دمج LTS بانتظام بغض النظر عن المرحلة.

مرحلة التطوير

عند إنشاء فرع ACK KMI، ينتقل إلى مرحلة التطوير (المصنّف على أنّه dev في الشكل 2)، ويكون متاحًا للمساهمة في الميزات لإصدار منصة Android التالي. في الشكل 2، تم إنشاء android15-6.6 عندما تم الإعلان عن الإصدار 6.6 كإصدار جديد من LTS kernel.

مرحلة الاستقرار

عندما يتم الإعلان عن اكتمال ميزات فرع ACK KMI، يبدأ مرحلة الاستقرار (المصنّفة على أنّها مستقرة في الشكل 2). سيظل بإمكانك إرسال ميزات الشركاء وإصلاحات الأخطاء، ولكن سيتم تفعيل تتبُّع مقاييس تجربة المستخدم الرئيسية لرصد أي تغييرات تؤثر في الواجهة. في هذه المرحلة، يتم قبول التغييرات التي تؤدي إلى أعطال في واجهة KMI، ويتم تعديل تعريف واجهة KMI وفقًا لوتيرة محددة مسبقًا (عادةً كل أسبوعين). راجِع نظرة عامة على GKI للاطّلاع على تفاصيل حول مراقبة KMI.

مرحلة التجميد في مؤشر KMI

قبل طرح إصدار جديد من النظام الأساسي على AOSP، يتم تجميد فرع ACK KMI ويظل مجمّدًا طوال مدة صلاحية الفرع. وهذا يعني أنّه لن يتم قبول أي تغييرات تؤدي إلى عدم توافق KMI إلا إذا تم رصد مشكلة أمان خطيرة لا يمكن حلّها بدون التأثير في KMI الثابت. لتجنُّب حدوث أعطال في KMI، قد يتم تعديل بعض حِزم التصحيح المدمجة من LTS أو إسقاطها إذا لم يكن الإصلاح مطلوبًا لأجهزة Android.

عند تجميد فرع ACK KMI، يمكن قبول إصلاحات الأخطاء وميزات الشريك طالما أنّ نواة KMI الشائعة الحالية لم يتم إتلافها. يمكن توسيع KMI باستخدام رموز جديدة تم تصديرها طالما أنّ الواجهات التي تتضمّن 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 مع الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android والإصدارات الأحدث. بما أنّ إصدار نظام Android الأساسي متوافق أيضًا مع الإصدارات السابقة، يمكن استخدام نواة android14-6.1 مع أجهزة Android 15 عند إطلاقها أو ترقيتها.

رقم إنشاء KMI

في حال حدوث عملية دمج LTS أثناء مرحلة الاستقرار أو حدوث مشكلة أمان أو حدث آخر بعد ذلك يتطلّب قبول تصحيح لتغيير KMI، يتم زيادة رقم إنشاء KMI المسجَّل في build.config.common. يمكنك العثور على إصدار KMI الحالي باستخدام الأمر uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

الرقم الذي يلي إصدار النظام الأساسي هو جيل KMI (6 في هذه الحالة).

إذا تغيّر إصدار KMI، لن يكون النواة متوافقًا مع وحدات المورّد التي تتوافق مع إصدار KMI السابق، لذا يجب إعادة إنشاء الوحدات وتعديلها بشكل متزامن مع النواة. بعد تجميد KMI، من المتوقّع أن تكون التغييرات في عملية إنشاء KMI نادرة جدًا.

التوافق بين النواة

ستتغيّر متطلبات التوافق بين النواة في سلسلة LTS نفسها بدءًا من نواة GKI الجديدة.

نواة GKI

تحافظ نواة GKI على التوافق مع الأنظمة القديمة مع جميع إصدارات نظام Android الأساسي التي كانت متوافقة مع إصدار النواة. بالإضافة إلى ذلك، تتوافق إصدارات نظام Android الأساسي مع الإصدارات القديمة من نواة GKI من الإصدارات السابقة. وبالتالي، يمكنك استخدام نواة android14-6.1 التي تم تطويرها لنظام التشغيل Android 14 (2023) بأمان على الأجهزة التي تعمل بنظام التشغيل Android 15 (2024). يتم التحقّق من التوافق من خلال إجراء اختبارات مستمرة باستخدام VTS وCTS لنواة GKI مع جميع الإصدارات المتوافقة.

تكون واجهة KMI ثابتة حتى يمكن تعديل النواة بدون الحاجة إلى إعادة إنشاء وحدات النواة في صورة المورّد.

لا يتم الحفاظ على توافق واجهة KMI بين نُوى GKI المختلفة. لذا، على سبيل المثال، لا يمكن استبدال نواة android14-6.1 بنواة android15-6.6 بدون إعادة إنشاء جميع الوحدات.

تتوفّر نواة GKI للإصدارات الأولية واللاحقة فقط. ولا تتوفّر هذه الميزة في الإصدارات القديمة. وبالتالي، لا يتوافق إصدار النواة android15-6.6 مع الأجهزة التي تعمل بنظام التشغيل Android 14 (2023).

مصفوفة التوافق

يعرض هذا الجدول إصدارات النواة المتوافقة والتي تم اختبارها مع كل إصدار من إصدارات منصة 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 (غير متوافق مع الإصدار 1 من Android 17 QPR أو الإصدارات الأحدث)
android12-5.10 (غير متوافق مع الإصدار 1 من Android 17 QPR أو الإصدارات الأحدث)
‫Android 16 (‫2025) android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
‫Android 15 (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
‫Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
‫Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
‫Android 12 (2021) android12-5.10

فترات الدعم ورموز تصحيح الأمان

تتلقّى حزم ACK عمليات دمج LTS من المصدر الرئيسي وإصلاحات للأخطاء في الرمز البرمجي الخاص بنظام Android. وتشمل هذه الإصلاحات جميع رموز تصحيح الأمان لنواة النظام الواردة في نشرات أمان Android الشهرية ذات الصلة ببرنامج ACK.

قد تتوفّر حزم ACK لفترة أطول من نواة الإصدار الثابت المقابل قبل بيع المنتج في kernel.org. في هذه الحالة، تقدّم Google دعمًا موسّعًا حتى تاريخ انتهاء الخدمة (EOL) الموضّح في هذا القسم. عند إيقاف إصدارات النواة نهائيًا، لن تعود Google توفّر الدعم لها، وسيتم اعتبار الأجهزة التي تستخدمها عرضة للخطر.

واعتبارًا من الإصدار 6.6 من النواة، ستكون مدة الدعم المتاحة لنواة الإصدار الثابت 4 سنوات.

يعرض هذا الجدول مدة صلاحية إشعارات الإقرار المتوافقة:

فرع ACK تاريخ
الإطلاق
Support
lifetime
(years)
EOL
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
android17-6.18 2025-11-30 4 2030-07-01

اختبار النواة الشائعة

يتم اختبار النواة الشائعة باستخدام العديد من أنظمة التكامل المستمر، بالإضافة إلى اختبارات المورّدين التي تتم بعد ذلك.

اختبار KernelCI

يتم بدء اختبارات KernelCI للإنشاء والتشغيل كلما تم إرسال تصحيح جديد إلى فرع kernel شائع. يتم اختبار عدة مئات من إعدادات الإصدار وتشغيلها على لوحات مختلفة. يمكنك الاطّلاع على النتائج الحديثة لنواة Android على موقع KernelCL الإلكتروني.

اختبارات ما قبل الإرسال وما بعد الإرسال على Android

تُستخدَم اختبارات ما قبل الإرسال لمنع حدوث حالات فشل في نوى Android الشائعة. يمكنك الاطّلاع على ملخّص نتائج الاختبار في علامة التبويب "عمليات التحقّق" ضمن تغيير الرمز في Gerrit الخاص بنواة Android الشائعة.

يتم إجراء اختبارات ما بعد الإرسال على Android على الإصدارات الجديدة المنشورة في فروع النواة الشائعة في Android عند إرسال رموز تصحيح جديدة إلى أحد فروع النواة الشائعة في Android على ci.android.com. من خلال إدخال aosp_kernel كاسم فرع جزئي في ci.android.com، يمكنك الاطّلاع على قائمة بفروع النواة التي تتوفّر نتائجها. على سبيل المثال، يمكن العثور على نتائج android-mainline في لوحة بيانات الدمج المستمر لإنشاء Android (CI). انقر على إصدار معيّن للعثور على حالة الاختبار في علامة التبويب Test Results.

يتم إجراء الاختبارات المحدّدة بواسطة test-mapping مع مجموعة الاختبار kernel-presubmit في شجرة مصدر نظام Android الأساسي كاختبارات قبل الإرسال لفروع نواة Android. على سبيل المثال، يتيح الإعداد التالي في test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING تشغيل vts_kernel_proc_file_api_test كاختبار ما قبل الإرسال عند تسجيل رمز kernel الشائع في Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

اختبار ثغرة أول يوم

يُجري اختبار اليوم الصفري اختبارًا لكل حزمة على حدة على جميع فروع نواة Android الشائعة عند إرسال حِزم جديدة. يتم إجراء اختبارات مختلفة للتشغيل والوظائف والأداء. انضم إلى المجموعة العامة cros-kernel-buildreports.

مصفوفة الاختبار

نواة Android المشتركة إصدارات نظام Android الأساسي حِزم الاختبار
قائمة التنقُّل الرئيسية 17 16 15 14 13 KernelCI ما قبل الإرسال ما بعد الإرسال 0-day
android-mainline
android17-6.18
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10

المساهمة في نواة Android الشائعة

بشكل عام، يجب تطوير الميزات على إصدار Linux الرئيسي وليس على نواة Android الشائعة. ننصح بشدة بتطويرها في المصدر، وبعد قبولها، يمكن نقلها إلى فرع ACK المحدّد حسب الحاجة. يسرّ فريق Android Kernel تقديم الدعم لجهود نقل الرمز البرمجي إلى الإصدارات الأحدث من أجل الاستفادة من منظومة Android المتكاملة.

أرسِل حِزم التعديل إلى Gerrit واتّبِع إرشادات المساهمة هذه.