Deuxième édition de patchs pour le noyau Linux avec support du langage Rust

Miguel Ojeda, auteur du projet Rust-for-Linux, a proposé une version mise à jour des composants permettant de 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. La nouvelle version élimine les commentaires formulés lors de la discussion sur la première version des correctifs. Linus Torvalds a déjà rejoint la discussion et a proposé de modifier la logique de traitement de certaines opérations sur les bits.

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.

Les changements les plus notables dans la nouvelle version des correctifs :

  • Le code d'allocation de mémoire est libéré de la génération potentielle d'un état de « panique » lorsque des erreurs telles qu'un manque de mémoire se produisent. Une variante de la bibliothèque Rust alloc est incluse, qui retravaille le code pour gérer les échecs, mais le but ultime est de transférer toutes les fonctionnalités nécessaires au noyau vers l'édition principale d'alloc (les modifications ont déjà été préparées et transférées vers l'édition standard Bibliothèque Rust).
  • Au lieu de versions nocturnes, vous pouvez désormais utiliser les versions bêta et les versions stables du compilateur rustc pour compiler un noyau avec le support Rust. Actuellement, rustc 1.54-beta1 est utilisé comme compilateur de référence, mais après la sortie de la version 1.54 à la fin du mois, il sera pris en charge comme compilateur de référence.
  • Ajout de la prise en charge de l'écriture de tests à l'aide de l'attribut standard « #[test] » pour Rust et de la possibilité d'utiliser des doctests pour documenter les tests.
  • Ajout de la prise en charge des architectures ARM32 et RISCV en plus des architectures x86_64 et ARM64 précédemment prises en charge.
  • Implémentations améliorées de GCC Rust (interface GCC pour Rust) et rustc_codegen_gcc (backend rustc pour GCC), qui réussissent désormais tous les tests de base.
  • Un nouveau niveau d'abstraction est proposé pour une utilisation dans les programmes Rust de mécanismes de noyau écrits en C, tels que les arbres rouge-noir, les objets comptés par références, la création de descripteurs de fichiers, les tâches, les fichiers et les vecteurs d'E/S.
  • Les composants de développement de pilotes ont amélioré la prise en charge du module file_operations, de la macro module!, de l'enregistrement des macros et des pilotes rudimentaires (sonde et suppression).
  • Binder prend désormais en charge la transmission de descripteurs de fichiers et de hooks LSM.
  • Un exemple plus fonctionnel de pilote Rust est proposé - bcm2835-rng pour le générateur matériel de nombres aléatoires des cartes Raspberry Pi.

De plus, les projets de certaines entreprises liés à l'utilisation de Rust dans le noyau sont mentionnés :

  • Microsoft a exprimé son intérêt à participer aux travaux visant à intégrer le support de Rust dans le noyau Linux et est prêt à fournir des implémentations de pilotes pour Hyper-V sur Rust dans les mois à venir.
  • ARM travaille à améliorer la prise en charge de Rust pour les systèmes basés sur ARM. Le projet Rust a déjà proposé des modifications qui feraient des systèmes ARM 64 bits une plate-forme de niveau 1.
  • Google fournit directement un support au projet Rust pour Linux, développe une nouvelle implémentation du mécanisme de communication interprocessus Binder dans Rust et envisage la possibilité de retravailler divers pilotes dans Rust. Par l'intermédiaire de l'ISRG (Internet Security Research Group), Google a financé des travaux visant à intégrer le support de Rust dans le noyau Linux.
  • IBM a implémenté la prise en charge du noyau pour Rust pour les systèmes PowerPC.
  • Le laboratoire LSE (Systems Research Laboratory) a développé un driver SPI dans Rust.

Source: opennet.ru

Ajouter un commentaire