Cinquième édition de correctifs pour le noyau Linux avec support du langage Rust

Miguel Ojeda, auteur du projet Rust-for-Linux, a proposé une cinquième version de composants pour développer des pilotes de périphériques dans le langage Rust à l'intention des développeurs du noyau Linux. La prise en charge de Rust est considérée comme expérimentale, mais elle est déjà incluse dans la branche Linux-next et est suffisamment développée 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, troisième et quatrième éditions des correctifs. Dans la nouvelle version :

  • Les tests de composants pour la prise en charge de Rust ont été ajoutés au système d'intégration continue basé sur le bot 0DAY/LKP pris en charge par Intel et la publication des rapports de tests a commencé. Nous nous préparons à intégrer le support Rust dans le système de test automatisé KernelCI. Les tests basés sur GitHub CI ont été transférés à l'utilisation de conteneurs.
  • Les modules du noyau Rust sont libérés de la nécessité de définir les attributs de caisse « #![no_std] » et « #![feature(…)] ».
  • Ajout de la prise en charge des cibles d'assembly uniques (.o, .s, .ll et .i).
  • Les directives du code définissent des règles pour séparer les commentaires («//») et documenter le code («///»).
  • Le script is_rust_module.sh a été retravaillé.
  • Ajout de la prise en charge des primitives de synchronisation statiques (variable partagée globale) basées sur l'implémentation "CONFIG_CONSTRUCTORS".
  • La gestion des verrous est simplifiée : Guard et GuardMut sont combinés et un seul type paramétré.
  • Il est possible de définir des paramètres supplémentaires lors de l'enregistrement des appareils.
  • Ajout de l'abstraction "RwSemaphore", qui agit comme un wrapper sur la structure C rw_semaphore.
  • Pour utiliser mmap, un nouveau module mm et une abstraction VMA ont été ajoutés (un wrapper sur la structure vm_area_struct).
  • Le pilote GPIO PL061 a été converti pour utiliser la macro « dev_* !
  • Un nettoyage général du code a été effectué.

Source: opennet.ru

Ajouter un commentaire