Utiliser Rust pour les systèmes de fichiers
Objectifs
- Utiliser le système de types de Rust pour détecter davantage d’erreurs à la compilation
- Automatiser des tâches comme la libération des ressources afin d’améliorer la productivité par rapport au code C
- Réduire les vulnérabilités liées à la mémoire et raccourcir le temps de débogage
Avantages de Rust
- Rust élimine les comportements indéfinis et offre des mécanismes permettant de voir ce qui se passe à l’intérieur du code
- Il est possible de prouver la justesse du code écrit en Rust, ce qui réduit les bugs qui freinent le développement de fonctionnalités
Exemple du système de types de Rust
- La fonction
iget_locked() comporte des exigences complexes
- En Rust, elle peut être remplacée par la fonction
get_or_create_inode(), et le système de types permet d’imposer ces exigences
Discussion sur le changement de nom des API
- Problème de divergence de noms entre l’API C et l’API Rust
- Cela peut ne pas être familier à la communauté de développement existante
- Il peut être nécessaire d’aligner les noms
Problèmes généraux
- Il faut décider si les abstractions Rust seront utilisées de manière générale pour tous les systèmes de fichiers du noyau, ou si elles se concentreront uniquement sur des systèmes de fichiers simples écrits en Rust
- À mesure que le code C évolue, des problèmes de synchronisation avec le code Rust peuvent apparaître
Problèmes de cycle de vie des objets
- Le cycle de vie des objets peut varier selon le système de fichiers
- Encoder un cycle de vie unique dans l’API Rust peut ne pas fonctionner pour certains systèmes de fichiers
Problèmes des bindings Rust
- Tous les systèmes de fichiers ne passeront pas immédiatement à Rust
- À mesure que le code C évolue, les bindings Rust peuvent se casser
- Si les bindings Rust se cassent, cela restera un problème à la charge des développeurs de Rust-for-Linux
Conclusion
- Continuer à développer les bindings Rust tout en laissant le code C évoluer
- Avec le temps, on verra plus clairement s’il est bon ou mauvais d’encoder beaucoup de sémantique dans le système de types de Rust
Le résumé de GN⁺
- Introduire Rust dans les systèmes de fichiers aidera grandement à améliorer la sûreté mémoire et la productivité
- Le système de types de Rust permet d’imposer des exigences API complexes, ce qui améliore la justesse du code
- Si les développeurs C existants n’apprennent pas Rust, des difficultés comme les problèmes de synchronisation peuvent survenir
- Si les bindings Rust se cassent, ce sera aux développeurs de Rust-for-Linux de les corriger
- Un projet aux fonctionnalités similaires est Fuchsia OS de Google
1 commentaires
Commentaires sur Hacker News
Le fait que chaque système de fichiers gère différemment le cycle de vie des inodes tout en les traitant avec une même fonction va à l’encontre de la couche d’abstraction
Une question est soulevée sur la nécessité de modifier Rust pour faciliter les appels vers C
Il n’est pas clair si l’API Rust encapsule l’API C ou la réimplémente
Ajouter Rust au kernel entraîne une complexité supplémentaire
La discussion est très civilisée
Avoir davantage d’options dans le kernel Linux est toujours bénéfique
unsafeCertains commentaires en bas de la page lwn.net sont impolis
Discussion sur le problème d’incohérence des noms entre l’API C et l’API Rust