בדף הזה מתוארים הפרויקט Generic Kernel Image (GKI) והאופן שבו הוא משפר את היציבות ואת האבטחה של Android.
היסטוריה
לכל מכשיר עם Android נדרש ליבה לייצור. לפני GKI, הליבות היו בהתאמה אישית והתבססו על Android Common Kernel (ACK), עם שינויים ספציפיים למכשיר שבוצעו על ידי ספקי מערכת על שבב (SoC) ויצרני ציוד מקורי (OEM).
ההתאמה האישית הזו עשויה לגרום לכך שעד 50% מקוד הליבה יהיה קוד מחוץ לעץ, ולא מקוד ליבה של Linux או מ-ACKs במקור. לכן, האופי המותאם אישית של הליבות מהתקופה שלפני GKI הוביל לפיצול משמעותי של הליבה.
עלויות הפרגמנטציה
לפיצול הליבה יש כמה השפעות שליליות על קהילת Android.
עדכוני אבטחה דורשים הרבה עבודה
תיקוני האבטחה שצוינו בעדכון האבטחה ל-Android (ASB) צריכים לעבור תהליך backport לכל ליבות המכשיר. עם זאת, בגלל הפיצול של הליבה, העברת תיקוני אבטחה למכשירי Android בשטח היא יקרה מאוד.
קשה למזג עדכונים עם תמיכה לטווח ארוך
הגרסאות עם תמיכה לטווח ארוך (LTS) כוללות תיקוני אבטחה ותיקוני באגים קריטיים אחרים. הוכח שהדרך היעילה ביותר לקבל תיקוני אבטחה היא להישאר מעודכנים לגבי גרסאות LTS. במכשירי Pixel, התגלה ש-90% מבעיות האבטחה בליבה שדווחו ב-ASB כבר תוקנו במכשירים שמעודכנים.
עם זאת, בגלל כל השינויים בהתאמה אישית בליבות של המכשירים, קשה למזג את התיקונים של LTS בליבות של המכשירים.
מניעת שדרוגים של גרסאות פלטפורמה של Android
הפיצול מקשה להוסיף למכשירים בשטח תכונות חדשות של Android שדורשות שינויים בליבה. קוד Android Framework היה צריך להביא בחשבון את הווריאציות השונות של הליבה, ולא היה יכול להסתמך על תכונות Android חדשות שיוטמעו בליבה. כתוצאה מכך, החדשנות התעכבה והקוד גדל והפך למורכב יותר.
קשה לתרום שינויים בליבה חזרה ל-Linux במקור
הדרך המקוטעת של משיכת התיקונים לליבת הייצור גרמה לעיכוב של עד 18 חודשים מהרגע שבו גרסת LTS הייתה זמינה ב-upstream, עד שהיא הייתה במכשיר. עיכוב ארוך כזה בין פרסום הליבה למעלה לבין המוצרים מקשה על קהילת Android להוסיף את התכונות והדרייברים הנדרשים לליבות למעלה. עד שהמשתמש שלח הצעות לשיפורים, בסיס הקוד השתנה, ולכן קשה להראות את הרלוונטיות של התיקון.
תיקון הפיצול: Generic Kernel Image
הפרויקט Generic Kernel Image (GKI) מטפל בפיצול הליבה על ידי איחוד הליבה של הליבה והעברת התמיכה ב-SoC ובלוח מהליבה של הליבה למודול ספקים שניתן לטעינה. GKI מציג גם ממשק יציב של מודול הליבה (KMI) למודולים של ספקים, כך שאפשר לעדכן את המודולים ואת הליבה בנפרד. אלה כמה מהמאפיינים של הליבה של GKI:
- הליבה של GKI נוצרת ממקורות ה-ACK.
- הליבה של GKI היא קובץ בינארי של ליבה יחידה, יחד עם מודולים נטענים משויכים לכל ארכיטקטורה לכל גרסה של LTS.
- הליבה של GKI נבדקת עם כל המהדורות של פלטפורמת Android שנתמכות ב-ACK המשויך. אין הוצאה משימוש של תכונות במהלך חיי גרסת הליבה של GKI.
- הליבה של GKI חושפת לנהגי LTS נתוני KMI יציבים.
- הליבה של GKI לא מכילה קוד ספציפי ל-SoC או ללוח.
תמונה של ארכיטקטורת GKI מופיעה במאמר סקירה כללית על הליבה.
תמונה נפוצה
החל מגרסה Android 12, מכשירי GKI חייבים להימכר עם ליבה בגרסה 5.10 ואילך. גרסאות build של גרסאות Generic Kernel Image (GKI) מתעדכנות באופן קבוע, וגם מתעדכנות באופן קבוע בתיקוני באגים קריטיים ותיקוני LTS. מכיוון שיציבות הבינארי נשמרת ב-KMI, אפשר להתקין את קובצי האימג' להפעלה בלי לבצע שינויים בקובצי האימג' של הספק. היעדים של פרויקט GKI הם:
- אל תגרמו לנסיגה משמעותית בביצועים או בצריכת האנרגיה כשמחליפים את הליבה של המוצר בליבה של GKI.
- לאפשר לשותפים לספק תיקוני אבטחה ותיקוני באגים בליבה בלי מעורבות של הספק.
- הפחתת העלות של שדרוג גרסת הליבה הראשית במכשירים.
- מנהלים גרעין GKI בינארי יחיד לכל ארכיטקטורה על ידי עדכון גרסאות הליבה באמצעות תהליך ברור לשדרוג.