Η Generic Kernel Image της Google είναι το επόμενο βήμα προς την επίλυση του προβλήματος κατακερματισμού του Android

Το Generic Kernel Image της Google στοχεύει να λύσει το πρόβλημα του κατακερματισμού στο Android, αν και είναι ένα περίπλοκο θέμα. Ετσι δουλευει.

Η Google εργάζεται για τη μείωση του κατακερματισμού στο Android εδώ και χρόνια, αν και μέρος αυτής της αιτίας είναι η εγγενής φύση του Android και το δίκοπο ξίφος επιλογής και ελευθερίας. Υπάρχουν αμέτρητοι OEM που δραστηριοποιούνται στον χώρο και όλοι θέλουν να κάνουν τις δικές τους τροποποιήσεις για τις δικές τους συσκευές. Το πρόβλημα λοιπόν είναι ότι φαίνεται ότι οι ενημερώσεις του λειτουργικού συστήματος Android αργούν να κυκλοφορήσουν σε όλους τους τομείς, αλλά δεν υπάρχουν πολλά που μπορεί να κάνει η Google για να αναγκάσει τους OEM να ενημερώσουν τις συσκευές τους. Ως εκ τούτου, το επόμενο καλύτερο πράγμα που μπορεί να κάνει η Google είναι να κάνει τη διαδικασία ενημέρωσης όσο το δυνατόν πιο εύκολη και χωρίς τριβές.

Απαλύνει τον πόνο της ενημέρωσης Android

Η πρώτη σημαντική πρωτοβουλία στο μακροπρόθεσμο έργο της Google για τη μείωση του φόρτου ανάπτυξης ήταν

Project Treble. Ανακοινώθηκε παράλληλα με το Android 8.0 Oreo το 2017, το Project Treble προσάρμοσε το Android διαχωρίζοντας το πλαίσιο του λειτουργικού συστήματος από την υλοποίηση του προμηθευτή (HALs και το fork του πυρήνα Linux για τη συγκεκριμένη συσκευή). Αυτό διευκόλυνε τους OEM Android να επανατοποθετήσουν τα λειτουργικά τους συστήματα πάνω από το πιο πρόσφατο πλαίσιο AOSP, καθώς μπορούσαν να εκκινήσουν την πιο πρόσφατη έκδοση χωρίς να χρειάζονται ενημερωμένο κώδικα από προμηθευτές. Ως αποτέλεσμα, οι OEM θα μπορούσαν να προετοιμάσουν τα προσαρμοσμένα πιρούνια Android τους γρηγορότερα από πριν, και κατ' επέκταση, να διαθέσουν πιο γρήγορα σημαντικές ενημερώσεις λειτουργικού συστήματος.

Το επόμενο βήμα στα σχέδια της Google ήταν ο εξορθολογισμός της παράδοσης ενημερώσεων σε βασικά στοιχεία Android. Η Google κάλεσε αυτήν την πρωτοβουλία Project Mainline όταν το παρουσίασε μαζί με το Android 10 το 2019. Η Google ουσιαστικά ανέλαβε τον έλεγχο των βασικών στοιχείων του λειτουργικού συστήματος και απαγόρευσε στους OEM να τα τροποποιήσουν. Στη συνέχεια, δημιούργησαν έναν μηχανισμό παράδοσης μέσω του Google Play, ώστε να μπορούν να κάνουν απομακρυσμένα τη διάθεση ενημερώσεων σε αυτά τα βασικά στοιχεία χωρίς να χρειάζεται να περιμένουν από τους OEM να εφαρμόσουν οι ίδιοι τις ενημερώσεις κώδικα. Το Mainline βελτίωσε σημαντικά το πόσο γρήγορα οι συσκευές λαμβάνουν ενημερωμένες εκδόσεις σημαντικών στοιχείων του λειτουργικού συστήματος, βελτιώνοντας με τη σειρά του την ασφάλεια του οικοσυστήματος Android στο σύνολό του.

Ωστόσο, όταν πρόκειται για το Treble, ο πυρήνας του Linux ρεαλιστικά δεν θα πρέπει να συγκεντρώνεται με κώδικα προμηθευτή κλειστού κώδικα. Todd Kjos στο το φετινό συνέδριο Linux Plumbers έχει εξηγήσει στο παρελθόν τις δυσκολίες που αντιμετωπίζουν όταν πρόκειται για κατακερματισμό στο Android, και πολλά από αυτά πλέον επικεντρώνονται γύρω από τον πυρήνα του Linux που αποστέλλουν οι OEM με τις συσκευές τους. Για το πλαίσιο, η Google διαχωρίζει κάθε βασικό πυρήνα Linux σε ένα "Android Common KernelΥποκατάστημα ” (ACK), το οποίο παρακολουθεί στενά την κύρια έκδοση, αλλά προσθέτει μερικές ενημερώσεις κώδικα ειδικά για Android. Οι προμηθευτές SoC όπως η Qualcomm, η MediaTek και η Samsung στη συνέχεια διαχωρίζουν ότι πυρήνα για κάθε SoC που φτιάχνουν. Στη συνέχεια, οι OEM λαμβάνουν αυτόν τον πυρήνα του συγκεκριμένου SoC και προσθέτουν πρόσθετες ενημερώσεις κώδικα για να υλοποιήσουν υποστήριξη για το συγκεκριμένο υλικό που θέλουν να στείλουν.

Το παραπάνω διάγραμμα δείχνει πώς ο πυρήνας μιας συσκευής περνά από πολλά επίπεδα αλλαγής που την αφαιρούν μακριά από τον πυρήνα του Linux LTS. Για να το απλοποιήσουμε, ξεκινάμε με τον πυρήνα Linux και συγχωνεύεται στον κοινό πυρήνα Android με μερικές αλλαγές. Από εκεί, ο κοινός πυρήνας Android συγχωνεύεται σε έναν πυρήνα προμηθευτή (Qualcomm, MediaTek, κ.λπ.) με τις δικές του τροποποιήσεις και αλλαγές. Τέλος, ο πυρήνας του προμηθευτή συγχωνεύεται στον πυρήνα ενός OEM για συγκεκριμένη συσκευή. Σε αυτό το στάδιο, ο πυρήνας οποιασδήποτε συσκευής απέχει πολύ από τον πυρήνα Linux LTS με τον οποίο ξεκίνησε.

Ως αποτέλεσμα όλων αυτών των πιρουνιών, έως και το 50% του κώδικα που εκτελείται σε μια συσκευή Android είναι κώδικας εκτός δέντρου, πράγμα που σημαίνει ότι δεν προέρχεται από κοινούς πυρήνες Linux ή AOSP. Αυτό καθιστά απίστευτα δύσκολο (για να μην αναφέρουμε χρονοβόρο και δαπανηρό) τη συγχώνευση αλλαγών ανάντη. Για τους OEM, δεν υπάρχει κίνητρο να το κάνουν, αλλά αυτή η πρακτική μπορεί να είναι επιβλαβής για την ασφάλεια της συσκευής. Αυτός είναι επίσης ο λόγος για τον οποίο πολλές συσκευές Android παραμένουν σε παλαιότερες εκδόσεις πυρήνα LTS, γεγονός που έχει την παρενέργεια των συσκευών να χάνουν την πρόσβαση σε νέες δυνατότητες πυρήνα Linux.

Το Android είναι κατακερματισμένο και η Google το γνωρίζει

Η Google γνωρίζει πολύ καλά ότι αυτό είναι ένα πρόβλημα, και μάλιστα έχει μια ενότητα που ονομάζεται "Το κόστος του κατακερματισμού" στην τεκμηρίωση προγραμματιστών Android. Το λέει η Google "Οι περισσότερες συσκευές ναυαρχίδα αποστέλλονται με μια έκδοση πυρήνα που είναι ήδη τουλάχιστον 18 μηνών". Ακόμα χειρότερα, το λέει και η Google "Το Android 10 υποστηρίζει πυρήνες 3.18, 4.4, 4.9, 4.14 και 4.19, οι οποίοι σε ορισμένες περιπτώσεις δεν έχουν βελτιωθεί με νέες δυνατότητες από το Android 8 το 2017." Αυτό καθιστά δύσκολη την προσθήκη λειτουργιών που απαιτούν νέες εκδόσεις πυρήνα Linux. Ο πυρήνας Linux 3.18 κυκλοφόρησε τον Δεκέμβριο του 2014, όταν το Android 5.0 Lollipop ήταν η πιο πρόσφατη έκδοση του Android. Αυτό είναι ξεκάθαρα ένα πρόβλημα και μπορεί να κρατήσει πίσω την πλατφόρμα.

Για παράδειγμα, το Code Aurora Forum, ή CAF για συντομία, φιλοξενεί τον πηγαίο κώδικα για διάφορα Qualcomm Snapdragon SoC. Qualcomm, ως SoC ο προμηθευτής, διανέμει μια διχαλωμένη έκδοση του πυρήνα Linux σε OEM/ODM και στη συνέχεια αυτές οι εταιρείες προσθέτουν αλλαγές για τη συσκευή κατά την αποστολή συσκευές. Αυτό είναι που προσθέτει πολλά στρώματα κατακερματισμού. Επιπλέον, η Qualcomm κάνει αλλαγές στο πλαίσιο AOSP για να βελτιστοποιήσει το Android για κάθε μία από τις κινητές πλατφόρμες Snapdragon της εταιρείας. Η Qualcomm διανέμει ιδιωτικά τον τροποποιημένο πυρήνα Linux, το πλαίσιο AOSP και άλλα εργαλεία λογισμικού στους συνεργάτες της ως μέρος ενός πακέτου υποστήριξης πίνακα ή BSP. Το CAF είναι όπου η Qualcomm δημοσιεύει δημόσια αυτές τις αλλαγές στον πυρήνα του Linux και τις αλλαγές πλαισίου AOSP.

Αυτή η έκδοση CAF μπορεί να είναι χρήσιμη για προγραμματιστές προσαρμοσμένης ROM που επιθυμούν να τη χρησιμοποιήσουν ως σημείο εκκίνησης και όχι ως καθαρό AOSP, γι' αυτό μερικές φορές βλέπετε ROM "βασισμένες σε CAF" στα φόρουμ μας. Θυμάστε τον Snapdragon 625 που φαινόταν να τροφοδοτεί τόσα πολλά smartphone μεσαίας κατηγορίας για χρόνια; Αυτό ξεκίνησε με το Linux Kernel 3.18 και μόνο προς το τέλος του 2018 (δύο χρόνια μετά την κυκλοφορία του chipset) η Qualcomm ενημέρωσε τις πηγές του πυρήνα και τις δημοσίευσε στο CAF για το msm8953 (το όνομα του chipset του Snapdragon 625) που προσφέρει υποστήριξη για Linux Kernel 4.9. Το πρόβλημα είναι ότι οι περισσότεροι OEM δεν θα ενημερώσει τηλέφωνα σε αυτήν τη νέα έκδοση πυρήνα Linux, ειδικά όχι τηλέφωνα μεσαίας κατηγορίας δύο χρόνια μετά την έκδοση του τσιπ απελευθερώθηκε. Ομολογουμένως, είναι πολύ σπάνιο να συμβεί εξαρχής μια σημαντική ενημέρωση πυρήνα, αλλά το θέμα είναι ότι έχει συνέβη, επομένως δεν είναι απλώς ένα αδύνατο σενάριο.

Συνολικά, ο τρέχων κατακερματισμός στο Android είναι ένα χάος, για να το θέσω ελαφρά. Οι τελευταίες προσπάθειες της Google να διορθώσει αυτόν τον κατακερματισμό έχουν τη μορφή της Γενικής Εικόνας Πυρήνα ή του GKI.

Παρουσιάζοντας τη γενική εικόνα πυρήνα

Για να αντιμετωπίσει αυτόν τον κατακερματισμό, η Google εργάστηκε στη Γενική Εικόνα πυρήνα Android (GKI). Αυτός είναι ουσιαστικά ένας πυρήνας που έχει μεταγλωττιστεί απευθείας από έναν κλάδο ACK. Το GKI απομονώνει τις προσαρμογές του προμηθευτή SoC και του OEM σε λειτουργικές μονάδες προσθηκών, εξαλείφοντας τον εκτός δέντρου κώδικα και επιτρέποντας στην Google να προωθήσει ενημερώσεις πυρήνα απευθείας στον τελικό χρήστη. Για περισσότερο από ένα χρόνο, η Google εργάζεται σε έναν τρόπο παροχής ενημερώσεων GKI μέσω του Play Store, μέσω της χρήσης μιας ενότητας Mainline.

Ως αποτέλεσμα, οι συσκευές που ξεκινούν με Android 12 που εκτελούν πυρήνα Linux 5.10.43 ή νεότερη έκδοση πρέπει να κάνουν ένα από τα ακόλουθα: σύμφωνα με τον Mishaal Rahman.

  • Αναπτύξτε μια εικόνα εκκίνησης υπογεγραμμένη από την Google

Ή

  • Αναπτύξτε μια εικόνα εκκίνησης με έναν πυρήνα που εξάγει ένα KMI (Διασύνδεση μονάδας πυρήνα) που είναι ένα υποσύνολο του KMI που εξάγεται από το GKI, εξάγει ένα API χώρου χρηστών που είναι ένα υπερσύνολο του UAPI που εκτίθεται από το GKI και υποστηρίζει όλες τις δυνατότητες του αντίστοιχου GKI εκδοχή

Οι προμηθευτές μπορούν να δημιουργήσουν λειτουργικές μονάδες που συνδέονται στο GKI, αλλά η ιδέα του GKI είναι ότι η Google αναλαμβάνει το βάρος της ευθύνης για το χειρισμό των αλλαγών στον πυρήνα. Η διεπαφή μονάδας πυρήνα (ή KMI, περισσότερα για αυτό στα επόμενα μέρη του άρθρου) είναι ουσιαστικά εκεί που αναμένεται να πάει ο κώδικας εκτός δέντρου.

Η σειρά Google Pixel 6 κυκλοφόρησε με Android 12 από το κουτί και διατίθεται με τον πυρήνα Linux 5.10 και είναι το πρώτο τηλέφωνο που διατίθεται με GKI. Επειδή η Google θα μπορούσε ενδεχομένως να ενημερώσει τον πυρήνα μέσω του Play Store, ενδέχεται να βλέπουμε συχνές ενημερώσεις πυρήνα, καθώς οι ενημερώσεις πυρήνα LTS συνήθως κυκλοφορούν εβδομαδιαία. Είτε έτσι είτε αλλιώς, είναι ένα πολύ καλύτερο σύστημα από την επί του παρόντος δυσκίνητη μέθοδο ενημέρωσης μέσω OTA, αν και αυτό σημαίνει ότι είναι εγγενώς συνδεδεμένο με το πλαίσιο GMS.

Η Google ορίζει απλώς το GKI ως εξής:

  • Είναι κατασκευασμένο από πηγές ACK.
  • Είναι ένα δυαδικό σύστημα ενός πυρήνα και συσχετισμένες μονάδες με δυνατότητα φόρτωσης ανά αρχιτεκτονική, ανά έκδοση LTS (προς το παρόν μόνο το arm64 για android11-5.4 και android12-5.4).
  • Είναι δοκιμασμένο με όλες τις εκδόσεις πλατφόρμας Android που υποστηρίζονται για το σχετικό ACK. Δεν υπάρχει κατάργηση χαρακτηριστικών για τη διάρκεια ζωής μιας έκδοσης πυρήνα GKI
  • Εκθέτει ένα σταθερό KMI στους οδηγούς μέσα σε ένα δεδομένο LTS.
  • Δεν περιέχει SoC ή κώδικα συγκεκριμένου πίνακα.

Η Google θέλει ακόμη και να είναι σε μια θέση μέχρι το 2023 όπου θα μπορεί να υιοθετήσει ένα μοντέλο ανάπτυξης "πρώτα στο upstream". Αυτό θα βοηθήσει την Google να διασφαλίσει ότι ο νέος κώδικας προσγειώνεται πρώτος στον κύριο πυρήνα Linux, μειώνοντας το "τεχνικό χρέος" που συσσωρεύεται εκτός δέντρου κώδικα σε συσκευές Android.

Η διεπαφή μονάδας πυρήνα (KMI)

Η διεπαφή μονάδας πυρήνα, ή KMI, αποτελεί μέρος της λύσης της Google για τον συνεχιζόμενο κατακερματισμό στο Android. Ουσιαστικά, το SoC και η υποστήριξη πλακέτας δεν βρίσκονται πλέον στον πυρήνα του πυρήνα και αντ' αυτού μεταφέρονται σε μονάδες με δυνατότητα φόρτωσης. Τόσο ο πυρήνας όσο και οι λειτουργικές μονάδες μπορούν να ενημερωθούν ανεξάρτητα στη συνέχεια, καθώς οι ενότητες ενημερώνονται μέσα /lib/modules. Το ίδιο το GKI υποτίθεται ότι είναι όσο το δυνατόν πιο καθαρό και γενικό, κάτι που γίνεται εφικτό με τη μεταφόρτωση αυτού που είναι πλέον εκτός δέντρου κώδικα σε ξεχωριστές ενότητες.

Ως Ted Kjos εξηγείται στο Το φετινό Συνέδριο Υδραυλικών Linux, «η μεγάλη πολυετής ώθηση είναι να βγει όλος ο κώδικας που αφορά το υλικό από τον γενικό πυρήνα και σε λειτουργικές μονάδες προμηθευτή. Πρέπει να έχουμε μια σταθερή διεπαφή μεταξύ αυτών των λειτουργικών μονάδων προμηθευτή και του γενικού πυρήνα, ώστε να μπορούν να αποστέλλονται ασύγχρονα." Το GKI 1.0 είναι ουσιαστικά μια "δοκιμή συμμόρφωσης".

Στην πραγματικότητα, η συμβατότητα GKI σημαίνει ότι η συσκευή περνά τις δοκιμές VTS και CTS-on-GSI+GKI με τη Γενική Εικόνα συστήματος (GSI) και ο πυρήνας GKI εγκαταστάθηκε αναβοσβήνοντας την εικόνα εκκίνησης GKI στο διαμέρισμα εκκίνησης και την εικόνα του συστήματος GSI στο σύστημα χώρισμα. Το Vendor Test Suite, ή VTS, είναι μια αυτοματοποιημένη δοκιμή που πρέπει να περάσουν όλες οι συσκευές για να θεωρηθούν συμβατές με το Project Treble. Η σουίτα δοκιμής συμβατότητας ή CTS, απαιτείται για την πρόσβαση στη σουίτα εφαρμογών της Google.

Οι συσκευές μπορούν να αποστέλλονται με διαφορετικό πυρήνα προϊόντος και μπορούν να χρησιμοποιούν μονάδες με δυνατότητα φόρτωσης που δεν παρέχει το GKI. Ωστόσο, τόσο το προϊόν όσο και ο πυρήνας GKI πρέπει να φορτώνουν λειτουργικές μονάδες από τα ίδια διαμερίσματα vendor_boot και vendor. Επομένως, όλοι οι πυρήνες προϊόντων απαιτείται να έχουν την ίδια διεπαφή μονάδας δυαδικού πυρήνα (KMI).

Το παραπάνω διάγραμμα δείχνει τι Google θέλει να κάνει και εξηγεί πώς σκοπεύει να φτάσει σε αυτό. Οι μονάδες Generic Kernel και GKI θα αποτελούν μέρος του AOSP και το GKI μπορεί να επικοινωνεί με το πλαίσιο Android και το Hardware Abstraction Layer (HAL) που μπορεί να εφαρμόσει ένας προμηθευτής. Ο συγκεκριμένος αποκλειστικός κώδικας που θέλει ένας προμηθευτής στον πυρήνα (για παράδειγμα, προγράμματα οδήγησης κάμερας) θα προωθηθεί σε μια λειτουργική μονάδα προμηθευτή που γίνεται επέκταση του GKI μέσω του KMI.

Πώς το GKI μπορεί να βοηθήσει στην επίλυση του προβλήματος κατακερματισμού του Android

Η Google έχει καταβάλει πολλή δουλειά στον εξορθολογισμό της διαδικασίας ανάπτυξης των smartphone. Κάθε OEM θέλει τη δική του ταυτότητα επωνυμίας και κάθε OEM θέλει να έχει την κυριότητα των συσκευών του. Σε αντίθεση με το πρόγραμμα Android One, τα smartphone Android μπορούν να είναι σχεδόν ό, τι θέλουν, αρκεί να συμμορφώνονται με το σύνολο κανόνων που ορίζει η Google για να λάβουν άδεια GMS. Ωστόσο, στο παρελθόν, η Google δεν έχει κάνει πολλά για να κυριαρχήσει στην ανάπτυξη συσκευών Android, με αλλαγές όπως το Project Treble, το Mainline και τώρα το GKI είναι πολύ πιο πρόσφατο στο Android ιστορία.

Θα βοηθήσει όμως; Θα έπρεπε, αν και είναι πιθανό να είναι μια πολυετής υπόθεση που θα αποφέρει ορατούς καρπούς αργότερα. Αυτό θα ισχύει μόνο για συσκευές που κυκλοφορούν με Android 12, πράγμα που σημαίνει ότι θα δούμε συσκευές που δεν έχουν GKI για τα επόμενα χρόνια. Αυτό ήταν επίσης μια κριτική για το Project Treble όταν ανακοινώθηκε, αν και προφανώς όλες οι συσκευές που κυκλοφορούν σήμερα το υποστηρίζουν. Αυτά τα πράγματα χρειάζονται χρόνο και καθώς η Google σιγά-σιγά αρχίζει να κυριαρχεί στο Android, η διαδικασία ανάπτυξης διευκολύνεται για όλους τους OEM στο το οικοσύστημα Android, ακόμα κι αν ορισμένοι από αυτούς προτιμούν να διατηρήσουν τον πλήρη έλεγχο του πυρήνα Linux που χρησιμοποιείται στο Android smartphones.