, το έργο Chromium θα υποστηρίζει τη χρήση τρίτων βιβλιοθηκών C++ Rust στο Chromium
Η Google ανακοίνωσε πρόσφατα ότι η ομάδα πίσω από το έργο Chromium εργάζεται πάνω στην προσθήκη μιας αλυσίδας εργαλείων Rust παραγωγής στο σύστημα κατασκευής της.
Για όσους δεν γνωρίζουν ακόμα το Rust, θα πρέπει να το θυμούνται καλά γιατί αυτή η γλώσσα προγραμματισμού, η οποία αναπτύχθηκε από τη Mozilla ειδικά για χρήση στη σύνταξη ενός προγράμματος περιήγησης, έχει αρχίσει να εισχωρεί και να γίνεται αποδεκτή σε πολλά σημαντικά έργα, ένα από αυτά είναι το Rust Kernel. Linux.
Αυτό θα μας επιτρέψει να συμπεριλάβουμε τον κώδικα Rust στο δυαδικό αρχείο του Chrome τον επόμενο χρόνο. Ο στόχος είναι να ξεκινήσουμε από μικρές και να θέσουμε σαφείς προσδοκίες για το ποιες βιβλιοθήκες θα ληφθούν υπόψη όταν είναι έτοιμες.
Είναι λογικό, λοιπόν, το Chromium να αρχίζει επιτέλους να αναπτύσσει και αυτήν την τεχνολογία. Για την Google, η εισαγωγή του Rust στο Chromium θα εκπληρώσει τον στόχο της παροχής ενός ευκολότερου και ασφαλέστερου τρόπου επίτευξης του "κανόνα των δύο", ο οποίος συνίσταται στην επιτάχυνση της ανάπτυξης και στη βελτίωση της ασφάλειας του Chrome. Επιπλέον, βελτιώνει την ασφάλεια εξαλείφοντας τα σφάλματα μνήμης και μειώνοντας την πυκνότητα σφαλμάτων στον κώδικα.
Γνωρίζουμε ότι το C++ και το Rust μπορούν να συνεργαστούν πολύ καλά, χάρη σε εργαλεία όπως το cxx, το autocxx bindgen, το cbindgen, το diplomat και το (πειραματικό) crubit. Ωστόσο, υπάρχουν και περιορισμοί. Μπορούμε να αναμένουμε ότι η μορφή αυτών των περιορισμών θα αλλάξει με την πάροδο του χρόνου με νέα ή βελτιωμένα εργαλεία, αλλά οι αποφάσεις και οι περιγραφές εδώ βασίζονται στην τρέχουσα κατάσταση της τεχνολογίας.
Η απόφαση ελήφθη στο πλαίσιο μιας πρωτοβουλίας για την αποτροπή εμφάνισης σφαλμάτων μνήμης στη βάση κώδικα του Chrome. Σύμφωνα με στατιστικά στοιχεία που δόθηκαν πριν από δύο χρόνια, το 70% των κρίσιμων και επικίνδυνων προβλημάτων ασφαλείας στο Chromium οφείλονται σε σφάλματα μνήμης.
Η χρήση της γλώσσας Rust, η οποία εστιάζει στην ασφαλή διαχείριση μνήμης και παρέχει αυτόματη διαχείριση μνήμης, θα μειώσει τον κίνδυνο ευπαθειών που προκαλούνται από προβλήματα όπως η πρόσβαση σε μια περιοχή μνήμης μετά την απελευθέρωσή της και η υπερχείλιση buffer.
Ο στόχος της μεταφοράς του Rust στο Chromium είναι να παρέχει έναν ευκολότερο (χωρίς IPC) και ασφαλέστερο (λιγότερο περίπλοκη C++ γενικά, χωρίς σφάλματα ασφαλείας μνήμης sandboxed) για την ικανοποίηση του κανόνα των δύο, προκειμένου να επιταχυνθεί η ανάπτυξη (λιγότερος κώδικας για εγγραφή , λιγότερα έγγραφα σχεδίασης, λιγότερες ενημερώσεις κώδικα ασφαλείας) και για τη βελτίωση της ασφάλειας (περισσότερες γραμμές κώδικα χωρίς σφάλματα ασφαλείας στη μνήμη, χαμηλότερη πυκνότητα σφαλμάτων κώδικα) του Chrome. Επιπλέον, η εταιρεία είναι πεπεισμένη ότι μπορούμε να χρησιμοποιήσουμε τρίτες βιβλιοθήκες Rust για να επιτύχουμε αυτόν τον στόχο.
Στις αρχές του 2022, η ομάδα του Chromium είχε ήδη πειραματιστεί με το Rust και, μετά από μερικούς μήνες, κατέληξε στο συμπέρασμα ότι η γλώσσα προγραμματισμού αρχικά δεν είναι κατάλληλη ως αντικατάσταση της C++ για σύνθετες εργασίες με ασύγχρονο κώδικα που πρέπει να λειτουργεί παράλληλα με τον υπάρχοντα κώδικα.
Επομένως, η σχεδιαζόμενη χρήση του Rust στο Chromium είναι σαφώς περιορισμένη στην αρχή . Αφενός, η διαλειτουργικότητα θα προχωρήσει μόνο προς μία κατεύθυνση: από C++ σε Rust. Αφετέρου, αρχικά επιτρέπεται μόνο η χρήση βιβλιοθηκών τρίτων. Αυτές λειτουργούν ως αυτόνομα στοιχεία και είναι ανεξάρτητες από τα εσωτερικά στοιχεία του Chromium. Οι βιβλιοθήκες πρέπει να έχουν ένα απλό API για την συγκεκριμένη εργασία τους. Η ομάδα του Chromium θα εξετάσει στη συνέχεια τις βιβλιοθήκες.
Τέλος, αξίζει να αναφερθεί ότι η προσθήκη υποστήριξης στο Chromium θα επιτρέψει τη μεταφορά κώδικα Rust σε δυαδικά αρχεία Chrome από το επόμενο έτος. Η απόφαση οφείλεται κυρίως σε ζητήματα ασφάλειας: Το Rust προσφέρει μεγαλύτερη ασφάλεια κατά την εγγραφή στη μνήμη από την C++ και απαγορεύει δυνητικά επιβλαβείς συμπεριφορές όπως η ανάγνωση άγραφων μεταβλητών, η πρόσβαση σε τιμές πέρα από τα όρια που ορίζονται από πίνακες, η κατάργηση αναφοράς σε μη έγκυρους ή μη έγκυρους δείκτες και η χρήση μη έγκυρων επαναληπτών.
Αν ενδιαφέρεστε να μάθετε περισσότερα, μπορείτε να βρείτε τις λεπτομέρειες στον παρακάτω σύνδεσμο.