Deuxiè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 version mise à jour des 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. Dans cette nouvelle version, les remarques formulées lors de la discussion de la première version des patchs ont été prises en compte. Linus Torvalds a déjà participé à la discussion et a suggéré de modifier la logique du traitement de certaines opérations bit à bit.

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.

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

  • Le code pour la gestion de la mémoire a été débarrassé des éventuelles générations d'état « panic » lors de la survenue d'erreurs telles que le manque de mémoire. Une version de la bibliothèque Rust alloc a été incluse, dans laquelle le code de gestion des pannes a été refondu, mais l'objectif final est de transférer toutes les fonctionnalités nécessaires au noyau dans la version principale d'alloc (des modifications ont déjà été préparées et transmises à la bibliothèque standard de Rust).
  • Au lieu de compilations de nuit pour construire le noyau avec le support de Rust, il est désormais possible d'utiliser les versions bêta et les versions stables du compilateur rustc. Actuellement, le compilateur de référence utilisé est rustc 1.54-beta1, mais après la sortie de la version 1.54 à la fin du mois, il sera maintenu comme référence.
  • Le support de l'écriture de tests utilisant l'attribut standard pour Rust « #[test] » a été ajouté, ainsi que la possibilité d'appliquer des doctests pour la documentation des tests.
  • Le support des architectures ARM32 et RISCV a été ajouté en plus des architectures x86_64 et ARM64 déjà prises en charge.
  • Les implémentations de GCC Rust (la chaîne de compilation de GCC pour Rust) et rustc_codegen_gcc (backend de rustc pour GCC) ont été améliorées et passent désormais tous les tests de base.
  • Un nouveau niveau d'abstraction a été proposé pour l'utilisation dans les programmes en Rust de mécanismes du noyau écrits en C, tels que les arbres rouge-noir, les objets avec comptage de références, la création de descripteurs de fichiers, les tâches, les fichiers et les vecteurs d'entrée/sortie.
  • Dans les composants de développement de pilotes, le support du module « file_operations », du macro « module! », de l'enregistrement de macros et des pilotes rudimentaires (probe et remove) a été amélioré.
  • Dans Binder, le support du transfert de descripteurs de fichiers et des hooks LSM a été implémenté.
  • Un exemple de pilote plus fonctionnel en Rust a été proposé : bcm2835-rng pour un générateur matériel de nombres aléatoires sur les cartes Raspberry Pi.

Des projets de certaines entreprises liés à l'utilisation de Rust dans le noyau sont également mentionnés :

  • Microsoft a exprimé son intérêt à participer au travail d'intégration du support de Rust dans le noyau Linux et est prêt à fournir dans les mois à venir des implémentations de pilotes Hyper-V en Rust.
  • L'entreprise ARM travaille à améliorer le support de Rust pour les systèmes basés sur des processeurs ARM. Des modifications ont déjà été proposées au projet Rust, faisant passer les systèmes ARM 64 bits au rang des plateformes de premier niveau de support (Tier-1).
  • Google soutient directement le projet Rust for Linux, développe une nouvelle implémentation du mécanisme de communication inter-processus Binder en Rust et envisage de réécrire divers pilotes en Rust. Par le biais de l'ISRG (Internet Security Research Group), Google a financé le travail d'intégration du support de Rust dans le noyau Linux.
  • IBM a intégré le support de Rust dans le noyau pour les systèmes PowerPC.
  • Le laboratoire LSE (Systems Research Laboratory) a développé un pilote SPI en Rust.

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