- Cas d’adoption de Rust chez Volvo : une très grande entreprise utilise Rust discrètement
- Julius Gustavsson occupe depuis 2019 le poste d’architecte logiciel principal pour les ECU (unités de contrôle électronique) à processeur basse consommation de Volvo
- Cet ECU est responsable de la gestion de l’alimentation (faible puissance) du véhicule ; même si les voitures électriques disposent d’une batterie haute tension de grande capacité, la ligne 12 V traditionnelle existe toujours
- L’ECU sert à réveiller le système électrique quand c’est nécessaire. Par exemple, il doit allumer le système lorsqu’on s’approche du véhicule
- Julius connaissait déjà Rust lorsqu’il a rejoint Volvo en 2017 et y voyait le potentiel de remplacer du code existant en C et C++
- Le processeur basse consommation s’est révélé parfaitement adapté à Rust : il n’était pas classé comme composant critique pour la sécurité et, comme il reposait sur un processeur ARM Cortex-M, il n’y avait ni obstacle technique ni obstacle bureaucratique à l’usage de Rust
- Aujourd’hui, les EX90 et Polestar 3 sont produits sur une chaîne d’assemblage qui ne fonctionnerait pas sans Rust
Pourquoi avoir choisi Rust ?
- Le premier emploi de Julius consistait à construire des logiciels de contrôle du trafic aérien utilisant largement Ada. À l’époque, le consensus dans l’entreprise était qu’Ada était trop ésotérique et propriétaire
- Ensuite, il a travaillé pendant environ 15 ans avec un mélange de C et de C++, et dans toutes les entreprises les bugs liés à la mémoire posaient constamment problème
- La plupart des bases de code reposaient sur des invariants et des hypothèses non formalisés, que tout le monde devait pourtant respecter. À mesure que la complexité du projet et la taille des équipes augmentaient, l’échec devenait inévitable à un moment donné
- Il a découvert Rust en 2015, avant la sortie de la version 1.0, et s’y est davantage intéressé après sa publication. Lorsqu’il est entré chez Volvo, il avait déjà un peu d’expérience acquise en amateur
- Le choix de Rust pour le projet d’ECU ne s’est pas fait soudainement. Lors de la création d’un prototype, il a essayé de contrôler le système avec un HAL interopérable avec Android écrit en Rust, et dès que la compilation a réussi, le ventilateur s’est mis à fonctionner, ce qui l’a beaucoup impressionné
Avancement
- Le projet convenait non seulement bien à Rust parce qu’il n’était pas critique pour la sécurité et s’exécutait sur un matériel courant, mais aussi parce que son ensemble de fonctionnalités limité le rendait très simple à appréhender
- En 2020, après avoir créé une première preuve de concept en C, l’équipe a poursuivi le projet en Rust. Il fallait communiquer avec les autres systèmes du véhicule via CAN, implémenter tous les systèmes de diagnostic et porter le protocole standard de Volvo
- Il a fallu réimplémenter beaucoup de choses, mais ils ont constaté qu’ils introduisaient bien moins de bugs qu’en C et C++
- Lors des réunions régulières avec les autres équipes, Julius soulevait rarement des problèmes, et quand il montrait les résultats, ses collègues étaient souvent impressionnés
Recommanderiez-vous Rust à d’autres ?
- Pour tout projet ayant des exigences très strictes en matière de fiabilité et de disponibilité, et pour lequel on veut être réellement certain que ce qu’on déploie est correct, Rust est un excellent choix
- Grâce à Cargo et aux autres outils disponibles, tout le cycle de développement de logiciels de haute qualité devient une très bonne expérience
- Comme le code fonctionne presque toujours dès qu’il compile, d’autres personnes peuvent le reprendre et le modifier en toute sécurité, ce qui en fait aussi un bon choix pour des équipes où le turnover est élevé
- Pour le prototypage, ce n’est peut-être pas le meilleur choix, car le compilateur force à travailler davantage sur les cas limites et les détails
- Nous sommes arrivés à un point où, au lieu de demander « Peut-on utiliser Rust pour ça ? », il faut demander « Pourquoi ne pourrait-on pas utiliser Rust pour ça ? » et en débattre
Quelles lacunes vous ont freiné ?
- Il n’a pas été facile de créer un logiciel répondant correctement aux exigences, principalement à cause des outils
- Par exemple, il était difficile d’exécuter des tests unitaires sur une cible embarquée. La couverture de code, le profiling à l’exécution, le BOM logiciel et le suivi des licences posaient aussi des difficultés
- Des outils comme le projet Knurling ont beaucoup aidé, mais il reste encore beaucoup à faire soi-même
Continuerez-vous à utiliser Rust à l’avenir ?
- Oui. Julius soutient activement le choix de Rust pour d’autres projets également
- Il semble y avoir un enthousiasme général pour Rust à plusieurs niveaux de l’entreprise
- Lors de la présentation finale du projet, un consensus s’est dégagé parmi la direction pour étudier l’usage de Rust dans davantage d’endroits
Conclusion
- Jusqu’à présent, l’usage de Rust chez Volvo semble être un grand succès. Les équipes sont satisfaites, la qualité des produits est élevée et l’entreprise semble prête à utiliser davantage Rust à l’avenir
- Il reste encore du travail à faire, mais avec l’arrivée d’outils orientés sécurité comme Ferrocene, Rust est plus prêt que jamais à être utilisé dans l’industrie automobile
L’avis de GN⁺
- Développer des logiciels embarqués avec Rust présente de grands avantages en matière de sécurité mémoire et de fiabilité. En particulier dans l’industrie automobile, où la sécurité est cruciale, l’adoption de Rust semble appelée à s’accélérer
- Cependant, compte tenu de l’immense héritage de l’écosystème C/C++ et du vivier de développeurs existant, une adoption progressive paraît plus réaliste qu’une transition complète. L’amélioration de l’interopérabilité entre Rust et C/C++ devrait être un enjeu majeur
- La chaîne d’outils Rust pour le développement embarqué n’est pas encore parfaite. Elle progresse rapidement sous l’impulsion de la communauté, mais pour atteindre une stabilité et un niveau de support commerciaux, l’investissement et la participation des entreprises semblent nécessaires
- Il existe encore une courbe d’apprentissage par rapport à C++, mais le système de types robuste de Rust et son concept d’ownership devraient, à long terme, contribuer à améliorer la productivité du développement et la qualité du code. Cela doit s’accompagner d’investissements dans la formation et l’onboarding
- Comme le montre le cas de Volvo, appliquer progressivement Rust à partir de nouveaux projets est une bonne stratégie. Une réécriture partielle de bases de code existantes et l’intégration de composants Rust constituent une approche réaliste
4 commentaires
Je trouve l’idée selon laquelle « Ada est trop abscons et propriétaire » assez surprenante. Pour avoir utilisé les deux dans un cadre professionnel, j’ai l’impression que C++ est bien plus abscons qu’Ada...
Quoi qu’il en soit, j’espère qu’un environnement de développement Rust « certifié » pouvant aussi être utilisé pour les systèmes safety-critical arrivera vite. AdaCore fait des efforts, donc on pourra sans doute l’utiliser un jour, non ?
GNAT Pro for Rust : environnement de développement Rust pour l’embarqué
La certification pose problème… mais une fois ce point résolu, j’ai l’impression qu’on essaiera de l’utiliser dans de plus en plus d’endroits.
Pendant ce temps, Uber utilise Zig de manière assez large. Un peu moins de la moitié des revenus de la fondation Zig dépend d'Uber.
2024 Financial Report and Fundraiser
Ce n’est pas du côté de l’embarqué, mais même dans notre entreprise, on dirait que de plus en plus d’équipes l’examinent en interne.
En particulier, on entend circuler l’histoire d’une bibliothèque d’interop pour le code Python d’Airflow, développée en Rust, qui a produit des effets assez juteux, donc beaucoup de gens s’y intéressent.