Troisième édition des patches pour le noyau Linux avec support du langage Rust

Miguel Ojeda, auteur du projet Rust-for-Linux, a proposé aux développeurs du noyau Linux une troisième option de composants pour le développement de pilotes de périphériques en Rust. Le support de Rust est considéré comme expérimental, mais a déjà été approuvé pour inclusion dans la branche linux-next. Le développement est financé par Google et l'organisation ISRG (Internet Security Research Group), fondatrice du projet Let's Encrypt, qui promeut HTTPS et développe des technologies pour renforcer la sécurité d'Internet.

Rappelons que les modifications proposées permettent d'utiliser Rust comme deuxième langage pour le développement de pilotes et de modules du noyau. Le support de Rust est présenté comme une option, non activée par défaut et ne conduisant pas à l'inclusion de Rust parmi les dépendances de construction obligatoires du noyau. L'utilisation de Rust pour le développement de pilotes permettra de créer des pilotes sûrs et de meilleure qualité avec un minimum d'efforts, en évitant des problèmes tels que l'accès à une zone mémoire après sa libération, la déréférenciation de pointeurs nuls et le dépassement de tampon.

La sécurité de la mémoire est assurée dans Rust au moment de la compilation par la vérification des références, le suivi de la propriété des objets et la prise en compte de la durée de vie des objets (portée), ainsi que par l'évaluation de l'accès à la mémoire lors de l'exécution du code. Rust fournit également des moyens de protection contre les débordements d'entiers, exige l'initialisation obligatoire des variables avant leur 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, et propose une forte typage statique pour minimiser les erreurs logiques.

La nouvelle version des patchs continue de corriger les remarques formulées lors des discussions sur les premières et deuxièmes versions des patchs. Les changements les plus notables sont :

  • La transition vers l'utilisation du compilateur standard stable Rust 1.57 a été effectuée, assurant l'attachement à l'édition stabilisée du langage Rust 2021. Auparavant, les correctifs étaient liés à la branche bêta de Rust et utilisaient certaines fonctionnalités du langage qui relevaient des options instables. La migration vers la spécification Rust 2021 a permis d'initier le travail visant à éliminer l'utilisation dans les correctifs de ces fonctionnalités instables comme const_fn_transmute, const_panic, const_unreachable_unchecked, core_panic et try_reserve.
  • Le développement de la variante de la bibliothèque Rust alloc incluse dans les correctifs se poursuit, modifiée pour éliminer les fonctions de distribution de mémoire susceptibles de générer des états de « panic » lors d'erreurs telles que le manque de mémoire. La nouvelle version implémente les options « no_rc » et « no_sync » pour désactiver les fonctionnalités inutilisées dans le code Rust pour le noyau, rendant la bibliothèque plus modulaire. Le travail avec les développeurs principaux d'alloc continue, visant à transférer les modifications nécessaires pour le noyau dans la base de la bibliothèque. L'option « no_fp_fmt_parse », nécessaire au fonctionnement de la bibliothèque au niveau du noyau, a été transférée dans la bibliothèque de base Rust (core).
  • Un nettoyage du code a été effectué pour éliminer les éventuels avertissements du compilateur lors de la construction du noyau en mode CONFIG_WERROR. Des modes diagnostiques supplémentaires du compilateur et des avertissements du linter Clippy ont été inclus lors de la compilation du code Rust.
  • Des abstractions ont été proposées pour une utilisation dans le code Rust, notamment des verrous de séquence (seqlock), des appels de rappel pour la gestion de l'alimentation, la mémoire I/O (readX/writeX), des gestionnaires d'interruptions, des threads, GPIO, et l'accès aux dispositifs, pilotes et données d'identification.
  • Les outils pour le développement de pilotes ont été étendus en intégrant des mutex transférables, des itérateurs de bits, des enveloppes simplifiées autour des pointeurs, un diagnostic amélioré des pannes et une infrastructure indépendante du bus de données.
  • Le travail avec les références a été amélioré grâce à un type simplifié Ref, basé sur le backend refcount_t, utilisant l'API du noyau du même nom pour le comptage des références. Le support des types Arc et Rc, fournis dans la bibliothèque standard alloc, a été supprimé et n'est pas disponible dans le code exécuté au niveau du noyau (des options ont été préparées pour désactiver ces types dans la bibliothèque elle-même).
  • La nouvelle version des patchs comprend une variante du pilote PL061 GPIO, réécrite en Rust. La particularité de ce pilote est que son implémentation répète presque ligne par ligne le pilote GPIO existant en C. Pour les développeurs souhaitant découvrir la création de pilotes en Rust, une comparaison ligne par ligne a été préparée, permettant de comprendre comment le code en C a été transformé en constructions en Rust.
  • Le backend rustc_codegen_gcc, une implémentation de rustc pour GCC, a été intégré à la base de code principale de Rust, permettant la compilation anticipée (AOT) à l'aide de la bibliothèque libgccjit. Avec un développement approprié du backend, il permettra de compiler le code Rust utilisé dans le noyau via GCC.
  • En plus des entreprises ARM, Google et Microsoft, la société Red Hat a également exprimé son intérêt pour l'utilisation du langage Rust dans le noyau Linux. Rappelons que Google soutient directement le projet Rust for Linux, développe une nouvelle mise en œuvre du mécanisme de communication interprocessus Binder en Rust et envisage de réécrire divers pilotes en Rust. Microsoft a commencé à développer des pilotes pour Hyper-V en Rust. ARM travaille à l'amélioration du support de Rust pour les systèmes basés sur des processeurs ARM. IBM a mis en œuvre la prise en charge de Rust dans le noyau pour les systèmes PowerPC.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster