Η Google γράφει και ξαναγράφει μέρη του Android στο Rust για να βελτιώσει την ασφάλεια του λειτουργικού συστήματος στο σύνολό του, έναντι των C και C++. Διαβάστε παρακάτω για να μάθετε περισσότερα!
Το Android ως ολοκληρωμένη λύση λειτουργικού συστήματος περιλαμβάνει πολλά κινούμενα μέρη. Σε πολύ γενικές γραμμές, αυτά τα μέρη είναι το οικοσύστημα της εφαρμογής και μετά το ίδιο το λειτουργικό σύστημα. Ως προγραμματιστής, η γλώσσα προγραμματισμού της επιλογής σας ποικίλλει ανάλογα με το τμήμα του Android στο οποίο εργάζεστε. Για τους προγραμματιστές εφαρμογών, η Java και η Kotlin είναι δημοφιλείς επιλογές. Για τους προγραμματιστές που εργάζονται στο λειτουργικό σύστημα και στα χαμηλότερα επίπεδα σε αυτό, η C και η C++ ήταν δημοφιλείς επιλογές μέχρι στιγμής. Σήμερα, η Google προσθέτει μια τρίτη επιλογή για προγραμματιστές λειτουργικού συστήματος, καθώς το Android Open Source Project υποστηρίζει πλέον τη γλώσσα προγραμματισμού Rust για την ανάπτυξη του ίδιου του λειτουργικού συστήματος.
Περιορισμοί C και C++
Τα χαμηλότερα επίπεδα του λειτουργικού συστήματος Android απαιτούν γλώσσες προγραμματισμού συστημάτων όπως η C και η C++. Αυτές οι γλώσσες παρέχουν στους προγραμματιστές έλεγχο και προβλεψιμότητα, κάτι που είναι σημαντικό κατά την πρόσβαση σε πόρους και υλικό συστήματος χαμηλού επιπέδου.
Δυστυχώς, η C και η C++ αποτυγχάνουν να παρέχουν εγγυήσεις για την ασφάλεια της μνήμης, καθιστώντας τις επιρρεπείς σε σφάλματα και ευπάθειες ασφαλείας. Ο προγραμματιστής είναι υπεύθυνος για τη διαχείριση της διάρκειας ζωής της μνήμης σε αυτές τις γλώσσες, αλλά σε πολύπλοκες και πολλαπλών νημάτων βάσεις κώδικα, αυτό είναι πιο εύκολο να ειπωθεί παρά να γίνει.
Η C και η C++ μαζί αποτελούν δεκάδες εκατομμύρια γραμμές κώδικα στην πλατφόρμα Android. Αυτά τα σφάλματα ασφαλείας της μνήμης γίνονται η πιο δύσκολη στην αντιμετώπιση πηγή ανακρίβειας κώδικα, αντιπροσωπεύοντας το ~ 70% των τρωτών σημείων ασφαλείας υψηλής σοβαρότητας του Android. Η απλή διόρθωση αυτών των σφαλμάτων καθίσταται ανεπαρκής για την αντιμετώπιση του προβλήματος και μια καλύτερη προσέγγιση θα ήταν να τα αποτρέψετε εξαρχής.
Η έλλειψη ασφάλειας μνήμης αναγκάζει τους προγραμματιστές να εκτελούν διαδικασίες Android μέσα σε αυστηρά περιορισμένα και μη προνομιούχα sandboxes. Αλλά τα sandbox είναι ακριβά σε πόρους, καταναλώνουν επιπλέον γενικά έξοδα και εισάγουν λανθάνουσα κατάσταση. Το Sandboxing επίσης δεν εξαλείφει εντελώς τα τρωτά σημεία του κώδικα και η αποτελεσματικότητά του μειώνεται λόγω της υψηλής πυκνότητας σφαλμάτων, επιτρέποντας περαιτέρω στους εισβολείς να αλυσοδύνουν πολλαπλές ευπάθειες.
Ένας άλλος περιορισμός, αν και δεν είναι μοναδικός για τη C και τη C++, αλλά ισχύει για όλα τα ζητήματα ασφάλειας της μνήμης, είναι ότι η λανθασμένη κατάσταση πρέπει πραγματικά να ενεργοποιείται στον κώδικα οργάνων προκειμένου να εντοπιστεί. Έτσι, ακόμα κι αν ο κώδικάς σας έχει εξαιρετική δοκιμή, το πραγματικό σφάλμα μπορεί να παραμείνει απαρατήρητο. Και όταν εντοπίζονται σφάλματα, η επιδιόρθωση τους είναι μια άλλη εργασία, που περιλαμβάνει μια μακρά και δαπανηρή διαδικασία που μπορεί να μην οδηγεί πάντα σε μια σωστή διόρθωση. Έτσι, ο εντοπισμός σφαλμάτων γίνεται αναξιόπιστος και η πρόληψη σφαλμάτων είναι η καλύτερη προσέγγιση που πρέπει να ακολουθηθεί υπό το φως αυτών των περιορισμών.
Εδώ εμφανίζεται η μετάβαση σε μια γλώσσα ασφαλή για μνήμη, όπως η Rust.
Η σκουριά και τα οφέλη της
Το Rust παρέχει εγγυήσεις για την ασφάλεια της μνήμης χρησιμοποιώντας έναν συνδυασμό ελέγχων χρόνου μεταγλώττισης για την επιβολή της διάρκειας ζωής/ιδιοκτησίας αντικειμένων και ελέγχων χρόνου εκτέλεσης για να διασφαλιστεί ότι οι προσβάσεις στη μνήμη είναι έγκυρες. Αυτή η ασφάλεια επιτυγχάνεται ενώ παρέχει ισοδύναμες επιδόσεις σε C και C++. Το Rust μειώνει επίσης την ανάγκη για sandboxing, επιτρέποντας στους προγραμματιστές περισσότερο χώρο για να εισάγουν νέες λειτουργίες που είναι ασφαλέστερες και ελαφρύτερες σε πόρους.
Ενώ το Rust έχει πράγματι τα πλεονεκτήματά του, δεν είναι εφικτό να αλλάξετε ολόκληρο το λειτουργικό σύστημα Android σε Rust από τη μια μέρα στην άλλη. Και αυτό μπορεί να μην είναι καν απαραίτητο, καθώς τα περισσότερα σφάλματα μνήμης του Android εμφανίζονται σε νέο ή πρόσφατα τροποποιημένο κώδικα, με περίπου το 50% να είναι λιγότερο από ένα έτος. Η Google πιστεύει ότι οι γλωσσικές προσπάθειές της που είναι ασφαλείς για τη μνήμη επικεντρώνονται καλύτερα σε νέες εξελίξεις αντί να ξαναγράψουν ώριμους κώδικα C και C++.
Το Rust εστιάζει επίσης στην πρόληψη σφαλμάτων αντί να στηρίζεται σε μεγάλο βαθμό στον εντοπισμό σφαλμάτων, με αποτέλεσμα τη βελτιωμένη ορθότητα του κώδικα. Διαθέτει πολλά βασικά χαρακτηριστικά, όπως ασφάλεια μνήμης, ταυτόχρονη χρήση δεδομένων, συστήματα πιο εκφραστικού τύπου, αμετάβλητο αναφορές και μεταβλητές από προεπιλογή, ασφαλέστερος χειρισμός ακεραίων, καλύτερος χειρισμός σφαλμάτων σε τυπικές βιβλιοθήκες και πολλά περισσότερο.
Τι σημαίνει η μετάβαση στο Rust για Android;
Η Google λέει ότι έχει προσθέσει υποστήριξη Rust στο Android Open Source Project τους τελευταίους 18 μήνες. Αλλά η προσθήκη μιας νέας γλώσσας στην πλατφόρμα Android είναι ένα τεράστιο εγχείρημα. Ορισμένες αλυσίδες εργαλείων και εξαρτήσεις πρέπει να διατηρηθούν, η υποδομή δοκιμών και τα εργαλεία πρέπει να ενημερωθούν και οι προγραμματιστές πρέπει να εκπαιδευτούν.
Η Google έχει μερικά έργα πρώιμης υιοθέτησης τα οποία θα κοινοποιήσει τους επόμενους μήνες. Ωστόσο, ακόμη και έτσι, γίνεται σαφές ότι η κλιμάκωση της υποστήριξης Rust σε περισσότερα λειτουργικά συστήματα είναι ένα πολυετές έργο.
Από ό, τι μπορούμε να δούμε, η Google χρησιμοποιεί ήδη το Rust σε μερικά σημεία. Η νέα στοίβα Bluetooth επανεγγραφής του Android με την κωδική ονομασία "Gabeldorsche" γράφεται στο Rust. Οι εργασίες ξεκίνησαν στο Gabeldorsche περίπου την εποχή του Android 11, αλλά δεν είναι ακόμα σε χρήση. του Android Keystore 2.0 Η ενότητα είναι γραμμένη σε Rust, και το ίδιο είναι και το τμήμα χώρου χρηστών του βιβλιοδέτη, του προγράμματος οδήγησης IPC του Android. Αν και δεν σχετίζεται με το Android, Φουξίαείναι καινούργιο netstack γράφεται και στο Rust.
Για τους προγραμματιστές εφαρμογών, ο διακόπτης δεν αλλάζει τίποτα σχετικά με το πώς εσείς, ως προγραμματιστής εφαρμογών, γράφετε εφαρμογές ή πώς λειτουργούν τα API πλαισίου. Αυτός ο διακόπτης επηρεάζει μόνο τον τρόπο εγγραφής του λειτουργικού συστήματος. Σύμφωνα με ένα μέλος της ομάδας Android Developer Relations, η Google επίσης δεν σχεδιάζει να κυκλοφορήσει ένα Rust NDK αυτή τη στιγμή. Οι υποστηριζόμενες γλώσσες για την ανάπτυξη εφαρμογών θα συνεχίσουν να είναι οι Kotlin, Java, C και C++.