Πλαίσιο για τη σύνταξη ασφαλών προγραμμάτων οδήγησης για τον πυρήνα Linux στο Rust

Ο Josh Triplett, ο οποίος εργάζεται στην Intel και είναι στην επιτροπή που επιβλέπει την ανάπτυξη του Crates.io, μιλώντας στο Open Source Technology Summit εισήχθη μια ομάδα εργασίας με στόχο την ισοτιμία της γλώσσας Rust με τη γλώσσα C στον τομέα του προγραμματισμού συστημάτων.

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

Ο Josh πιστεύει ότι το μέλλον του προγραμματισμού συστημάτων ανήκει στον Rust και η γλώσσα C στη σύγχρονη πραγματικότητα διεκδικεί τη θέση που τα περασμένα χρόνια κατείχε η Assembly. Σκουριά
όχι μόνο απαλλάσσει τους προγραμματιστές από τα προβλήματα που είναι εγγενή στη γλώσσα C που προκύπτουν λόγω της εργασίας χαμηλού επιπέδου με τη μνήμη, αλλά παρέχει επίσης την ευκαιρία να τη χρησιμοποιήσουν στην ανάπτυξη σύγχρονων παραδειγμάτων προγραμματισμού.

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

Ο Greg Kroah-Hartman, ο οποίος είναι υπεύθυνος για τη διατήρηση του σταθερού κλάδου του πυρήνα Linux, εξέφρασε την ετοιμότητά του να προσθέσει ένα πλαίσιο για την ανάπτυξη προγραμμάτων οδήγησης στη γλώσσα Rust στον πυρήνα, εάν έχει πραγματικά πλεονεκτήματα έναντι του C, για παράδειγμα, θα παρέχει ασφάλεια δεσμεύσεις μέσω του Kernel API. Επιπλέον, ο Greg θεωρεί αυτό το πλαίσιο μόνο ως επιλογή, όχι ενεργό από προεπιλογή, ώστε να μην συμπεριλάβει το Rust ως εξάρτηση κατασκευής στον πυρήνα.

Αποδείχθηκε ότι αρκετές ομάδες εργάζονται ήδη προς αυτή την κατεύθυνση. Για παράδειγμα, προγραμματιστές από την εταιρεία "Fish in a Barrel" έτοιμος μια εργαλειοθήκη για τη σύνταξη ενοτήτων με δυνατότητα φόρτωσης για τον πυρήνα του Linux στη γλώσσα Rust, χρησιμοποιώντας ένα σύνολο αφηρημένων επιπέδων πάνω από τις διεπαφές και τις δομές του πυρήνα για την αύξηση της ασφάλειας. Τα επίπεδα δημιουργούνται αυτόματα με βάση τα υπάρχοντα αρχεία κεφαλίδας του πυρήνα χρησιμοποιώντας το βοηθητικό πρόγραμμα bindingen. Το Clang χρησιμοποιείται για την κατασκευή στρώσεων. Εκτός από τα ενδιάμεσα στρώματα, οι συναρμολογημένες μονάδες χρησιμοποιούν το πακέτο staticlib.

Παράλληλο αναπτύσσεται Ένα άλλο έργο επικεντρώθηκε στην ανάπτυξη προγραμμάτων οδήγησης για ενσωματωμένα συστήματα και συσκευές IoT, το οποίο χρησιμοποιεί επίσης το bindgen για να δημιουργήσει επίπεδα που βασίζονται σε αρχεία κεφαλίδας πυρήνα. Το πλαίσιο σάς επιτρέπει να βελτιώσετε την ασφάλεια του προγράμματος οδήγησης χωρίς να κάνετε αλλαγές στον πυρήνα - αντί να δημιουργήσετε πρόσθετα επίπεδα απομόνωσης για προγράμματα οδήγησης στον πυρήνα, προτείνεται να αποκλείσετε προβλήματα στο στάδιο της μεταγλώττισης, χρησιμοποιώντας την πιο ασφαλή γλώσσα Rust. Υποτίθεται ότι μια τέτοια προσέγγιση μπορεί να είναι ζητούμενη από κατασκευαστές εξοπλισμού που αναπτύσσουν ιδιόκτητα προγράμματα οδήγησης βιαστικά χωρίς να διενεργούν κατάλληλο έλεγχο.

Δεν έχει ακόμη υλοποιηθεί όλη η προβλεπόμενη λειτουργικότητα, αλλά το πλαίσιο είναι ήδη αρκετά κατάλληλο για εργασία και χρησιμοποιήθηκε για τη δημιουργία ενός λειτουργικού προγράμματος οδήγησης για τον ελεγκτή USB Ethernet LAN9512 που παρέχεται στην πλακέτα Raspberry Pi 3. Το υπάρχον πρόγραμμα οδήγησης smsc95xx, γραμμένο από τον Γλώσσα Γ. Σημειώνεται ότι το μέγεθος της μονάδας και η επιβάρυνση από τα στοιχεία χρόνου εκτέλεσης κατά την ανάπτυξη ενός προγράμματος οδήγησης στο Rust είναι ασήμαντα, γεγονός που επιτρέπει τη χρήση του πλαισίου για συσκευές με περιορισμένους πόρους.

Πηγή: opennet.ru

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