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

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

Στη νέα έκδοση:

  • Η εργαλειοθήκη και μια παραλλαγή της βιβλιοθήκης κατανομής, χωρίς πιθανή δημιουργία κατάστασης "πανικού" όταν συμβαίνουν σφάλματα, έχουν ενημερωθεί για την κυκλοφορία του Rust 1.62. Σε σύγκριση με την προηγούμενη έκδοση, το κιτ εργαλείων Rust έχει σταθεροποιήσει την υποστήριξη για τη λειτουργικότητα const_fn_trait_bound που χρησιμοποιείται στις ενημερώσεις κώδικα του πυρήνα.
  • Ο κωδικός δέσμευσης διαχωρίζεται σε ένα ξεχωριστό πακέτο κλουβιών "bindings", το οποίο απλοποιεί την αναδόμηση εάν πραγματοποιηθούν αλλαγές μόνο στον "πυρήνα" του κύριου πακέτου.
  • Υλοποίηση της μακροεντολής "concat_idents!" ξαναγράφεται με τη μορφή διαδικαστικής μακροεντολής που δεν συνδέεται με τη λειτουργία concat_idents και επιτρέπει τη χρήση αναφορών σε τοπικές μεταβλητές.
  • Η μακροεντολή "static_assert!" έχει ξαναγραφτεί, επιτρέποντας τη χρήση του "core::assert!()" σε οποιοδήποτε περιβάλλον αντί για σταθερές.
  • Μακροεντολή "build_error!" προσαρμοσμένο για να λειτουργεί όταν έχει ρυθμιστεί η λειτουργία "RUST_BUILD_ASSERT_{WARN,ALLOW}" για λειτουργικές μονάδες.
  • Προστέθηκε ένα ξεχωριστό αρχείο με ρυθμίσεις "kernel/configs/rust.config".
  • Τα αρχεία "*.i" που επεξεργάζονται σε αντικαταστάσεις μακροεντολών έχουν μετονομαστεί σε "*.rsi".
  • Η υποστήριξη για την κατασκευή στοιχείων Rust με επίπεδα βελτιστοποίησης διαφορετικά από αυτά που χρησιμοποιούνται για τον κώδικα C έχει διακοπεί.
  • Προστέθηκε μονάδα fs, η οποία παρέχει συνδέσεις για εργασία με συστήματα αρχείων. Παρέχεται ένα παράδειγμα απλού συστήματος αρχείων γραμμένου σε Rust.
  • Προστέθηκε μονάδα ουράς εργασίας για εργασία με ουρές συστήματος (παρέχει συνδέσεις στις δομές του πυρήνα work_struct και workqueue_struct).
  • Η ανάπτυξη της ενότητας kasync συνεχίστηκε με την εφαρμογή μεθόδων ασύγχρονου προγραμματισμού (async). Προστέθηκε ένα παράδειγμα διακομιστή TCP βασικού επιπέδου γραμμένου σε Rust.
  • Προστέθηκε η δυνατότητα χειρισμού διακοπών στη γλώσσα Rust χρησιμοποιώντας τους τύπους [Threaded]Handler και [Threaded]Registration`.
  • Προστέθηκε διαδικαστική μακροεντολή "#[vtable]" για να διευκολύνεται η εργασία με πίνακες δεικτών συναρτήσεων, όπως η δομή file_operations.
  • Προστέθηκε υλοποίηση αμφίδρομων συνδεδεμένων λιστών "unsafe_list::List".
  • Προστέθηκε αρχική υποστήριξη για RCU (Ανάγνωση-αντιγραφή-ενημέρωση) και τύπος προστασίας για να ελέγξετε εάν ένα κλείδωμα ανάγνωσης είναι συνδεδεμένο στο τρέχον νήμα.
  • Προστέθηκε η λειτουργία Task::spawn() για τη δημιουργία και την αυτόματη εκκίνηση των νημάτων του πυρήνα. Προστέθηκε επίσης η μέθοδος Task::wake_up().
  • Προστέθηκε μια μονάδα καθυστέρησης που σας επιτρέπει να χρησιμοποιείτε καθυστερήσεις (ένα περιτύλιγμα πάνω από το msleep()).

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

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

Πηγή: opennet.ru

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