Proposition de discussion sur la question de l'ajout des outils de développement Rust au noyau Linux

Nick Desagnier (Nicolas Desaulniers), qui travaille chez Google pour fournir soutien construire le noyau Linux à l'aide du compilateur Clang et également portion corriger des bugs dans le compilateur Rust, proposé tenir à une conférence Conférence des plombiers Linux 2020 session pour discuter de la possibilité de développer des composants du noyau dans Rust. Nick organise une micro-conférence dédiée à LLVM, et estime qu'il serait bien de discuter des aspects techniques de l'éventuelle intégration du support Rust dans le noyau (il a déjà préparé un prototype fonctionnel pour KBuild) et de comprendre si un tel support devrait être ajouté et quelles restrictions sur l'utilisation de Rust devraient être acceptées.

Rappelons que lors d'une récente discussion lors de la conférence Open Source Summit and Embedded Linux, Linus Torvalds n'a pas exclu l'émergence de liaisons pour le développement de sous-systèmes non essentiels au noyau (par exemple, des pilotes) dans des langages tels que Rust. La possibilité de développer des pilotes dans Rust nous permettrait 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. Il existe déjà plusieurs projets tiers pour implémenter cette fonctionnalité :

  • Développeurs de la société « Fish in a Barrel » подготовили une boîte à outils pour écrire des modules chargeables pour le noyau Linux dans le langage Rust, en utilisant un ensemble de couches abstraites sur les interfaces et les structures du noyau pour augmenter la sécurité. Les couches sont automatiquement générées en fonction des fichiers d'en-tête du noyau existants à l'aide de l'utilitaire liaison. Clang est utilisé pour créer des couches. En plus des intercalaires, les modules assemblés utilisent le package staticlib.
  • Chercheurs de l'Université chinoise de Hong Kong développer un projet de développement de pilotes pour les systèmes embarqués et les appareils Internet des objets dans Rust, qui utilise également bindgen pour générer des couches basées sur les fichiers d'en-tête du noyau. Le framework vous permet d'améliorer la sécurité des pilotes sans apporter de modifications au noyau - au lieu de créer des niveaux d'isolement supplémentaires pour les pilotes dans le noyau, il est proposé de bloquer les problèmes au stade de la compilation, en utilisant le langage Rust plus sécurisé. On suppose qu'une telle approche pourrait être demandée par les fabricants d'équipements développant des pilotes propriétaires à la hâte sans procéder à un audit approprié.
  • Développeurs de framework C2Rouille pour diffuser du code C vers Rust, conduite expériences sur la conversion de modules du noyau avec un minimum de modifications manuelles. L'un des problèmes constatés est l'utilisation dans de nombreuses parties du noyau de code utilisant des extensions GCC qui ne sont pas encore supportées dans C2Rust. Pour résoudre ce problème, C2Rust prévoit d'ajouter la prise en charge des attributs GCC inline, cold, alias, used et section, ainsi que d'étendre les capacités de l'assembleur en ligne et de résoudre les problèmes liés aux structures à la fois alignées et compressées (par exemple, xregs_state). . Les problèmes importants qui nécessitent un travail manuel incluent l'incapacité de traduire des macros C non triviales en macros Rust et la nécessité de redéfinir les types, puisque C2Rust traduit les types C en définitions dans le package libc, mais ce package ne peut pas être utilisé dans les modules du noyau.

Source: opennet.ru

Ajouter un commentaire