La troisiè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 troisième option de composant pour développer des pilotes de périphériques dans le langage Rust à considérer 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. 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 sur les première et deuxième versions des correctifs. Les changements les plus notables :

  • Une transition a été effectuée vers l'utilisation de la version stable de Rust 1.57 comme compilateur de référence et un lien vers l'édition stabilisée du langage Rust 2021 a été fourni. Auparavant, les correctifs étaient liés à la branche bêta de Rust et utilisaient certaines fonctionnalités du langage qui ont été classés comme instables. La transition vers la spécification Rust 2021 nous a permis de commencer à travailler pour éviter l'utilisation de fonctionnalités instables dans les correctifs telles que const_fn_transmute, const_panic, const_unavailable_unchecked et core_panic et try_reserve.
  • Le développement de la version alloc de la bibliothèque Rust incluse dans les correctifs s'est poursuivi, modifié pour débarrasser les fonctions d'allocation de mémoire de la génération possible de l'état « panique » lorsque des erreurs se produisent, comme un manque de mémoire. La nouvelle version implémente les options « no_rc » et « no_sync » pour désactiver les fonctionnalités non utilisées dans le code Rust du noyau, rendant la bibliothèque plus modulaire. Le travail se poursuit avec les principaux développeurs d'allocations, visant à transférer les modifications nécessaires au noyau vers la bibliothèque principale. L'option « no_fp_fmt_parse », requise pour que la bibliothèque fonctionne au niveau du noyau, a été déplacée vers la bibliothèque de base Rust (core).
  • Le code a été nettoyé pour éliminer les éventuels avertissements du compilateur lors de la construction du noyau en mode CONFIG_WERROR. Lors de la création de code dans Rust, des modes de diagnostic supplémentaires du compilateur et des avertissements Clippy linter sont activés.
  • Des abstractions sont proposées pour une utilisation dans le code Rust pour les seqlocks (verrouillages de séquence), les appels de rappel pour la gestion de l'alimentation, la mémoire d'E/S (readX/writeX), les gestionnaires d'interruptions et de threads, le GPIO, l'accès aux périphériques, les pilotes et les informations d'identification.
  • Les outils de développement de pilotes ont été étendus pour inclure des mutex déplaçables, des itérateurs de bits, des liaisons de pointeurs simplifiées, des diagnostics de pannes améliorés et une infrastructure indépendante du bus de données.
  • Travail amélioré avec les liens utilisant un type Ref simplifié, basé sur le backend refcount_t, qui utilise l'API du noyau du même nom pour compter les références. La prise en charge des types Arc et Rc fournis dans la bibliothèque d'allocation standard a été supprimée et n'est pas disponible dans le code exécuté au niveau du noyau (des options ont été préparées pour la bibliothèque elle-même qui désactivent ces types).
  • Les correctifs incluent une version du pilote GPIO PL061, réécrite en Rust. Une particularité du pilote est que sa mise en œuvre reprend presque ligne par ligne le pilote GPIO existant en langage C. Pour les développeurs qui souhaitent se familiariser avec la création de pilotes dans Rust, une comparaison ligne par ligne a été préparée qui leur permet de comprendre dans quelles constructions dans Rust le code C est converti.
  • La base de code principale de Rust a adopté rustc_codegen_gcc, un backend rustc pour GCC qui implémente la compilation anticipée (AOT) à l'aide de la bibliothèque libgccjit. Avec un développement approprié du backend, cela vous permettra de collecter le code Rust impliqué dans le noyau à l'aide de GCC.
  • Outre ARM, Google et Microsoft, Red Hat a exprimé son intérêt pour l'utilisation du langage Rust dans le noyau Linux. Rappelons que Google assure directement le support du 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. Microsoft a commencé à implémenter des pilotes pour Hyper-V dans Rust. ARM travaille à améliorer la prise en charge de Rust pour les systèmes basés sur ARM. IBM a implémenté la prise en charge de Rust dans le noyau pour les systèmes PowerPC.

Source: opennet.ru

Ajouter un commentaire