Η τρίτη έκδοση ενημερώσεων κώδικα για τον πυρήνα του Linux με υποστήριξη για τη γλώσσα Rust

Ο Miguel Ojeda, συγγραφέας του έργου Rust-for-Linux, έχει προτείνει μια τρίτη επιλογή για τα στοιχεία ανάπτυξης προγραμμάτων οδήγησης συσκευών Rust για προγραμματιστές πυρήνα Linux που πρέπει να εξετάσουν. Η υποστήριξη Rust θεωρείται πειραματική, αλλά έχει ήδη συμφωνηθεί να συμπεριληφθεί στον κλάδο του Linux-next. Η ανάπτυξη χρηματοδοτείται από την Google και την ISRG (Internet Security Research Group), η οποία είναι ο ιδρυτής του έργου Let's Encrypt και προωθεί το HTTPS και την ανάπτυξη τεχνολογιών για την αύξηση της ασφάλειας του Διαδικτύου.

Θυμηθείτε ότι οι προτεινόμενες αλλαγές καθιστούν δυνατή τη χρήση της Rust ως δεύτερης γλώσσας για την ανάπτυξη προγραμμάτων οδήγησης και λειτουργικών μονάδων πυρήνα. Η υποστήριξη Rust παρουσιάζεται ως μια επιλογή που δεν είναι ενεργοποιημένη από προεπιλογή και δεν έχει ως αποτέλεσμα τη συμπερίληψη του Rust στις απαιτούμενες εξαρτήσεις κατασκευής για τον πυρήνα. Η χρήση του Rust για την ανάπτυξη προγραμμάτων οδήγησης θα σας επιτρέψει να δημιουργήσετε ασφαλέστερα και καλύτερα προγράμματα οδήγησης με ελάχιστη προσπάθεια, χωρίς προβλήματα όπως η πρόσβαση σε μια περιοχή μνήμης μετά την απελευθέρωσή της, η κατάργηση αναφοράς μηδενικών δεικτών και οι υπερβάσεις buffer.

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

Στη νέα έκδοση των επιδιορθώσεων συνεχίζεται η εξάλειψη των σχολίων που έγιναν κατά τη συζήτηση της πρώτης και δεύτερης έκδοσης των ενημερώσεων κώδικα. Οι πιο αξιοσημείωτες αλλαγές:

  • Η μετάβαση στη σταθερή έκδοση του Rust 1.57 ως μεταγλωττιστή αναφοράς έχει γίνει και έχει εξασφαλιστεί η σύνδεση με τη σταθερή έκδοση της γλώσσας Rust 2021. Προηγουμένως, οι ενημερώσεις κώδικα είχαν συνδεθεί με τον κλάδο beta του Rust και χρησιμοποιούσαν ορισμένες από τις δυνατότητες του η γλώσσα που περιλαμβάνεται στην ασταθή κατηγορία. Η μετάβαση στην προδιαγραφή Rust 2021 ξεκίνησε εργασίες για να απομακρυνθούμε από τη χρήση ασταθών λειτουργιών όπως const_fn_transmute, const_panic, const_unreachable_unchecked και core_panic και try_reserve σε ενημερώσεις κώδικα.
  • Συνεχίζεται η ανάπτυξη της επιδιορθωμένης παραλλαγής της βιβλιοθήκης alloc Rust, που τροποποιήθηκε για να αποτρέψει τις λειτουργίες εκχώρησης μνήμης από το να δημιουργήσουν μια κατάσταση "πανικού" όταν προκύπτουν σφάλματα, όπως εκτός μνήμης. Η νέα έκδοση εφαρμόζει τις επιλογές "no_rc" και "no_sync" για να απενεργοποιήσει τη λειτουργικότητα που δεν χρησιμοποιείται στον πυρήνα κώδικα Rust, κάνοντας τη βιβλιοθήκη πιο αρθρωτή. Η εργασία συνεχίζεται με τους βασικούς προγραμματιστές του alloc για να μετακινήσουν τις αλλαγές που απαιτούνται για τον πυρήνα στη βιβλιοθήκη πυρήνα. Η επιλογή "no_fp_fmt_parse" έχει μετακινηθεί στη βιβλιοθήκη πυρήνα Rust (πυρήνας), η οποία είναι απαραίτητη για τη λειτουργία της βιβλιοθήκης σε επίπεδο πυρήνα.
  • Ο κώδικας καθαρίστηκε για να απαλλαγούμε από πιθανές προειδοποιήσεις μεταγλωττιστή κατά την κατασκευή του πυρήνα στη λειτουργία CONFIG_WERROR. Κατά τη δημιουργία κώδικα Rust, ενεργοποιούνται πρόσθετες λειτουργίες διάγνωσης μεταγλωττιστή και προειδοποιήσεις Clippy linter.
  • Οι αφαιρέσεις προτείνονται για χρήση στον κώδικα Rust για κλειδώματα seqlock (κλειδώματα ακολουθίας), επανακλήσεις για διαχείριση ενέργειας, μνήμη I/O (readX / writeX), χειριστές διακοπής και νημάτων, GPIO, πρόσβαση σε συσκευές, προγράμματα οδήγησης και διαπιστευτήρια.
  • Βελτιωμένα εργαλεία ανάπτυξης προγραμμάτων οδήγησης που περιλαμβάνουν μετατοπιζόμενα mutexes, επαναλήπτες bit, απλοποιημένες συνδέσεις δείκτη, βελτιωμένα διαγνωστικά σφάλματα και υποδομή ανεξάρτητη από το δίαυλο δεδομένων.
  • Βελτιωμένη εργασία με συνδέσμους χρησιμοποιώντας έναν απλοποιημένο τύπο Ref που βασίζεται στο backend refcount_t, το οποίο χρησιμοποιεί το ομώνυμο βασικό API για την καταμέτρηση συνδέσμων. Η υποστήριξη για τους τύπους Arc και Rc που παρέχονται στην τυπική βιβλιοθήκη κατανομής έχει καταργηθεί και δεν είναι διαθέσιμη σε κώδικα που εκτελείται σε επίπεδο πυρήνα (έχουν προετοιμαστεί επιλογές για την ίδια τη βιβλιοθήκη που απενεργοποιούν αυτούς τους τύπους).
  • Μια παραλλαγή του προγράμματος οδήγησης PL061 GPIO, ξαναγραμμένη σε Rust, έχει προστεθεί στις ενημερώσεις κώδικα. Ένα χαρακτηριστικό του προγράμματος οδήγησης είναι ότι η υλοποίησή του σχεδόν γραμμή προς γραμμή επαναλαμβάνει το υπάρχον πρόγραμμα οδήγησης GPIO στη γλώσσα C. Για προγραμματιστές που θέλουν να εξοικειωθούν με τη δημιουργία προγραμμάτων οδήγησης στο Rust, έχει προετοιμαστεί μια σύγκριση γραμμή προς γραμμή, η οποία σας επιτρέπει να κατανοήσετε σε ποιες δομές στο Rust μετατρέπεται ο κώδικας C.
  • Η κύρια βάση κώδικα του Rust υιοθέτησε το rustc_codegen_gcc, ένα backend rustc για το GCC που υλοποιεί τη συλλογή προληπτικών (AOT) χρησιμοποιώντας τη βιβλιοθήκη libgccjit. Με τη σωστή ανάπτυξη του backend, θα σας επιτρέψει να δημιουργήσετε τον κώδικα Rust που εμπλέκεται στον πυρήνα χρησιμοποιώντας το GCC.
  • Εκτός από την ARM, την Google και τη Microsoft, η Red Hat έχει εκφράσει ενδιαφέρον για τη χρήση της γλώσσας Rust στον πυρήνα του Linux. Θυμηθείτε ότι η Google παρέχει απευθείας υποστήριξη για το έργο Rust for Linux, αναπτύσσει μια νέα υλοποίηση του μηχανισμού επικοινωνίας διαδικασιών Binder στο Rust και εξετάζει το ενδεχόμενο να επεξεργαστεί ξανά διάφορα προγράμματα οδήγησης στο Rust. Η Microsoft έχει αρχίσει να εφαρμόζει προγράμματα οδήγησης για το Hyper-V στο Rust. Η ARM εργάζεται για τη βελτίωση της υποστήριξης Rust για συστήματα που βασίζονται σε ARM. Η IBM έχει εφαρμόσει την υποστήριξη Rust στον πυρήνα για συστήματα PowerPC.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο