Quatrième édition de correctifs pour le noyau Linux avec prise en charge du langage Rust

Miguel Ojeda, auteur du projet Rust-for-Linux, a proposé une quatrième version de composants pour développer des pilotes de périphériques dans le langage Rust pour examen par les développeurs du noyau Linux. La prise en charge de Rust est considérée comme expérimentale, mais a déjà été convenue pour être incluse dans la branche Linux-next et est suffisamment mature pour commencer à travailler sur la création de couches d'abstraction sur les sous-systèmes du noyau, ainsi que sur l'écriture de pilotes et de modules. Le développement est financé par Google et l'ISRG (Internet Security Research Group), fondateur du projet Let's Encrypt et qui promeut HTTPS et le développement de technologies pour améliorer la sécurité sur Internet.

Rappelons que les changements proposés permettent d'utiliser Rust comme deuxième langage pour développer des pilotes et des modules du noyau. La prise en charge de Rust est présentée comme une option qui n'est pas activée par défaut et n'entraîne pas l'inclusion de Rust en tant que dépendance de construction requise pour le noyau. L'utilisation de Rust pour le développement de pilotes vous permettra de créer des pilotes plus sûrs et de meilleure qualité avec un minimum d'effort, sans problèmes tels que l'accès à la mémoire après la libération, les déréférences de pointeurs nuls et les dépassements de tampon.

Une gestion sécurisée de la mémoire est assurée dans Rust au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets et de leur durée de vie (portée), ainsi qu'à l'évaluation de l'exactitude de l'accès à la mémoire pendant l'exécution du code. Rust offre également une protection contre les débordements d'entiers, nécessite l'initialisation obligatoire des valeurs des variables avant utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept de références et de variables immuables par défaut, propose un typage statique fort pour minimiser les erreurs logiques.

La nouvelle version des correctifs continue d'éliminer les commentaires formulés lors de la discussion des première, deuxième et troisième éditions des correctifs. Dans la nouvelle version :

  • La transition vers l'utilisation de la version stable de Rust 1.58.0 comme compilateur de référence a été effectuée. Parmi les changements nécessaires au projet, qui ne sont pas encore inclus dans la boîte à outils principale de Rust, le drapeau « -Zsymbol-mangling-version=v0 » (attendu dans Rust 1.59.0) et le mode « maybe_uninit_extra » (attendu dans Rust 1.60.0 .XNUMX) sont notés. .
  • Ajout de vérifications automatiques de la disponibilité des outils Rust appropriés et extension de la possibilité de tester la prise en charge de Rust dans le système.
  • De nouvelles abstractions ont été proposées pour accéder aux tables d'identifiants de périphériques (« IdArray » et « IdTable ») à partir du code Rust.
  • Ajout de couches pour accéder aux fonctions liées à la minuterie (cadre d'horloge).
  • Les pilotes de plate-forme sont désormais définis via des implémentations de traits.
  • Une nouvelle macro a été ajoutée pour simplifier l'enregistrement des pilotes de plateforme, et un nouveau modèle de pilote générique a été proposé.
  • Ajout de macros pour les structures "dev_*".
  • Ajout des méthodes "{read,write}*_relaxed" pour le type IoMem .
  • Suppression de la propriété FileOpener pour simplifier les opérations sur les fichiers.
  • Le paramètre « ThisModule » a été ajouté aux arguments passés lors de l'enregistrement d'un pilote.
  • Un modèle standard pour créer des modules de noyau dans le langage Rust est proposé.

Source: opennet.ru

Ajouter un commentaire