نواة 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). وننصح الشركاء بشدة بتحديث النواة الخاصة بهم للاطّلاع على آخر إصدارات LTS وإصلاحات الأخطاء الخاصة بنظام 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 عند الإعلان عن الإصدار المتوافق مع الدعم الطويل الأمد، وتم إنشاء الفرع android13-5.10 من android12-5.10 عند اكتمال ميزات نواة النظام في ربيع 2021 للسماح بتطوير ميزات الإصدار Android 13. بدءًا من 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، ويتم تعديل تعريف واجهة 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 (غير متوافق مع الإصدار 17 من نظام التشغيل Android QPR1 أو الإصدارات الأحدث)
android12-5.10 (غير متوافق مع الإصدار 17 من نظام التشغيل Android 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
‫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 المتوافقة:

ACK branch تاريخ
الإطلاق
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 كاختبار ما قبل الإرسال عند تسجيل رمز 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 واتّبِع إرشادات المساهمة هذه.