Πρόταση για συζήτηση του θέματος της προσθήκης εργαλείων ανάπτυξης Rust στον πυρήνα του Linux

Nick Desagnier (Νικ Ντεσάλνιερς), ο οποίος εργάζεται στην Google για να παρέχει Υποστήριξη κατασκευή του πυρήνα Linux χρησιμοποιώντας τον μεταγλωττιστή Clang και επίσης βοήθεια διόρθωση σφαλμάτων στον μεταγλωττιστή Rust, πρότεινε πραγματοποιηθεί σε συνέδριο Συνέδριο Linux Plumbers 2020 συνεδρία για να συζητηθεί η δυνατότητα ανάπτυξης στοιχείων πυρήνα στο Rust. Ο Nick διοργανώνει ένα μικροσυνέδριο αφιερωμένο στο LLVM και πιστεύει ότι θα ήταν ωραίο να συζητήσουμε τις τεχνικές πτυχές της πιθανής ενσωμάτωσης της υποστήριξης Rust στον πυρήνα (έχει ήδη ετοιμάσει ένα λειτουργικό πρωτότυπο για το KBuild) και να κατανοήσουμε εάν μια τέτοια υποστήριξη θα έπρεπε να προστεθούν καθόλου και ποιοι περιορισμοί στη χρήση του Rust θα πρέπει να γίνονται δεκτοί.

Ας θυμηθούμε ότι σε μια πρόσφατη συζήτηση στο συνέδριο Open Source Summit and Embedded Linux, ο Linus Torvalds δεν απέκλεισε την εμφάνιση δεσμών για την ανάπτυξη υποσυστημάτων μη πυρήνα (για παράδειγμα, προγράμματα οδήγησης) σε γλώσσες όπως το Rust. Η δυνατότητα ανάπτυξης προγραμμάτων οδήγησης στο Rust θα μας επέτρεπε να δημιουργήσουμε ασφαλέστερα και καλύτερα προγράμματα οδήγησης με ελάχιστη προσπάθεια, χωρίς προβλήματα όπως πρόσβαση στη μνήμη μετά την απελευθέρωση, μηδενικές παραπομπές δείκτη και υπερβάσεις buffer. Υπάρχουν ήδη αρκετά έργα τρίτων για την υλοποίηση αυτής της δυνατότητας:

  • Προγραμματιστές από την εταιρεία "Fish in a Barrel" έτοιμος μια εργαλειοθήκη για τη σύνταξη ενοτήτων με δυνατότητα φόρτωσης για τον πυρήνα του Linux στη γλώσσα Rust, χρησιμοποιώντας ένα σύνολο αφηρημένων επιπέδων πάνω από τις διεπαφές και τις δομές του πυρήνα για την αύξηση της ασφάλειας. Τα επίπεδα δημιουργούνται αυτόματα με βάση τα υπάρχοντα αρχεία κεφαλίδας του πυρήνα χρησιμοποιώντας το βοηθητικό πρόγραμμα bindingen. Το Clang χρησιμοποιείται για την κατασκευή στρώσεων. Εκτός από τα ενδιάμεσα στρώματα, οι συναρμολογημένες μονάδες χρησιμοποιούν το πακέτο staticlib.
  • Ερευνητές από το Κινεζικό Πανεπιστήμιο του Χονγκ Κονγκ αναπτύσσω ένα έργο για την ανάπτυξη προγραμμάτων οδήγησης για ενσωματωμένα συστήματα και συσκευές Internet of Things στο Rust, το οποίο χρησιμοποιεί επίσης το bindgen για τη δημιουργία επιπέδων που βασίζονται σε αρχεία κεφαλίδας πυρήνα. Το πλαίσιο σάς επιτρέπει να βελτιώσετε την ασφάλεια του προγράμματος οδήγησης χωρίς να κάνετε αλλαγές στον πυρήνα - αντί να δημιουργήσετε πρόσθετα επίπεδα απομόνωσης για προγράμματα οδήγησης στον πυρήνα, προτείνεται να αποκλείσετε προβλήματα στο στάδιο της μεταγλώττισης, χρησιμοποιώντας την πιο ασφαλή γλώσσα Rust. Υποτίθεται ότι μια τέτοια προσέγγιση μπορεί να είναι ζητούμενη από κατασκευαστές εξοπλισμού που αναπτύσσουν ιδιόκτητα προγράμματα οδήγησης βιαστικά χωρίς να διενεργούν κατάλληλο έλεγχο.
  • Προγραμματιστές πλαισίου C2Rust για μετάδοση κωδικού C στο Rust, συμπεριφορά πειράματα μετατροπής μονάδων πυρήνα με ελάχιστες χειροκίνητες επεξεργασίες. Ένα από τα προβλήματα που σημειώθηκαν είναι η χρήση σε πολλά μέρη του πυρήνα κώδικα που χρησιμοποιεί επεκτάσεις GCC που δεν υποστηρίζονται ακόμη στο C2Rust. Για την επίλυση αυτού του προβλήματος, η C2Rust σχεδιάζει να προσθέσει υποστήριξη για τα χαρακτηριστικά GCC inline, cold, alias, used και section, καθώς και να επεκτείνει τις δυνατότητες του inline assembler και να λύσει προβλήματα με δομές που είναι και ευθυγραμμισμένες και συσκευασμένες (για παράδειγμα, xregs_state) . Στα σημαντικά προβλήματα που απαιτούν χειρωνακτική εργασία περιλαμβάνονται η αδυναμία μετάφρασης μη τετριμμένων μακροεντολών C σε μακροεντολές Rust και η ανάγκη επαναπροσδιορισμού τύπων, καθώς το C2Rust μεταφράζει τους τύπους C σε ορισμούς στο πακέτο libc, αλλά αυτό το πακέτο δεν μπορεί να χρησιμοποιηθεί σε λειτουργικές μονάδες πυρήνα.

Πηγή: opennet.ru

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