- Beispiel für die Einführung von Rust bei Volvo: In einem sehr großen Unternehmen wird Rust still und leise eingesetzt
- Julius Gustavsson ist seit 2019 als leitender Softwarearchitekt für die ECU (Electronic Control Unit) eines stromsparenden Prozessors bei Volvo tätig
- Diese ECU ist für das Strommanagement des Fahrzeugs verantwortlich. Auch wenn Elektroautos über große Hochvolt-Batterien verfügen, gibt es weiterhin die herkömmliche 12-V-Leitung
- Die ECU hat die Aufgabe, das elektrische System bei Bedarf aufzuwecken. Wenn man sich zum Beispiel dem Fahrzeug nähert, muss das System eingeschaltet werden
- Julius kannte Rust bereits, als er 2017 zu Volvo kam, und sah das Potenzial, bestehenden C- und C++-Code zu ersetzen
- Der stromsparende Prozessor erwies sich als perfekt für den Einsatz von Rust geeignet, da er nicht als sicherheitskritische Komponente eingestuft war und auf einem ARM-Cortex-M-Prozessor basierte, sodass es weder technische noch bürokratische Hürden für den Einsatz von Rust gab
- Inzwischen werden EX90 und Polestar 3 auf Montagebändern produziert, die ohne Rust nicht funktionieren würden
Warum Rust gewählt wurde
- Julius’ erste Arbeitsstelle bestand darin, Flugsicherungssoftware zu entwickeln, in der viel Ada verwendet wurde. Damals war der Konsens im Unternehmen, dass Ada zu schwierig und proprietär sei
- Danach nutzte er etwa 15 Jahre lang eine Mischung aus C und C++, wobei speicherbezogene Bugs in jedem Unternehmen immer ein Problem waren
- Meist handelte es sich um Codebasen, in denen Unveränderlichkeit und Annahmen nicht formal festgeschrieben waren, sich aber dennoch alle daran halten mussten. Mit wachsender Projektkomplexität und Teamgröße musste das irgendwann scheitern
- Er lernte Rust 2015 kennen, also vor dem Release von 1.0, und interessierte sich nach der Veröffentlichung noch stärker dafür. Als er zu Volvo kam, hatte er damit bereits etwas Erfahrung als Hobby
- Die Entscheidung für Rust im ECU-Projekt fiel nicht plötzlich. Beim Bau eines Prototyps erstellte er in Rust ein HAL, das mit Android zusammenarbeitete und das System steuerte. Kaum war die Kompilierung erfolgreich, sprang der Lüfter an – das war äußerst beeindruckend
Fortschritt
- Das Projekt eignete sich nicht nur deshalb gut für Rust, weil es nicht sicherheitskritisch war und auf gewöhnlicher Hardware lief, sondern auch, weil es durch den begrenzten Funktionsumfang sehr überschaubar war
- 2020 wurde zunächst ein erster Proof of Concept in C erstellt, danach wurde das Projekt in Rust fortgeführt. Es musste über CAN mit anderen Systemen im Fahrzeug kommunizieren, alle Diagnosesysteme mussten implementiert und das standardmäßige Volvo-Protokoll portiert werden
- Es musste vieles neu implementiert werden, doch dabei stellte sich heraus, dass im Vergleich zu C und C++ deutlich weniger Bugs entstanden
- In regelmäßigen Meetings mit anderen Teams brachte Julius kaum Probleme zur Sprache, und wenn er Ergebnisse zeigte, waren seine Kollegen oft beeindruckt
Würden Sie Rust anderen empfehlen?
- Für jedes Projekt mit sehr strengen Anforderungen an Zuverlässigkeit und Verfügbarkeit, bei dem man sicher sein möchte, dass ein Deployment tatsächlich korrekt ist, ist Rust eine hervorragende Wahl
- Dank Cargo und anderen verfügbaren Tools wird der gesamte Entwicklungszyklus hochwertiger Software zu einer wirklich guten Erfahrung
- Weil Code beim Kompilieren fast immer auch funktioniert, können andere ihn übernehmen und sicher ändern; deshalb funktioniert Rust auch gut in Teams mit hoher Fluktuation
- Für Prototyping ist es möglicherweise nicht die beste Wahl, weil der Compiler einen dazu zwingt, sich stärker mit Edge Cases und Details zu beschäftigen
- Statt zu fragen: „Kann man dafür Rust verwenden?“, sind wir an einem Punkt angekommen, an dem man eher fragen und diskutieren sollte: „Warum kann man dafür nicht Rust verwenden?“
Welche Defizite waren hinderlich?
- Es war nicht einfach, Software zu erstellen, die den Anforderungen angemessen entsprach; das lag vor allem an Tooling-Problemen
- So war es zum Beispiel schwierig, Unit-Tests auf Embedded-Targets auszuführen. Auch Code Coverage, Runtime-Profiling, Software-BOM und Lizenz-Tracking bereiteten Schwierigkeiten
- Tools wie das Knurling-Projekt halfen zwar sehr, aber es blieb dennoch vieles, das man selbst erledigen musste
Werden Sie Rust auch künftig verwenden?
- Ja. Julius setzt sich aktiv dafür ein, dass Rust auch in anderen Projekten gewählt wird
- Es scheint auf mehreren Ebenen im Unternehmen insgesamt Begeisterung für Rust zu geben
- Bei der abschließenden Projektpräsentation herrschte unter den Führungskräften breite Einigkeit, den Einsatz von Rust an weiteren Stellen zu prüfen
Fazit
- Bisher scheint der Einsatz von Rust bei Volvo ein großer Erfolg zu sein. Die Menschen sind zufrieden, die Produktqualität ist hoch, und das Unternehmen scheint bereit, künftig noch mehr Rust zu verwenden
- Es bleibt zwar noch mehr zu tun, aber mit der Verfügbarkeit sicherheitsorientierter Tools wie Ferrocene ist Rust besser denn je für den Einsatz in der Automobilindustrie gerüstet
Meinung von GN⁺
- Die Entwicklung von Embedded-Software mit Rust bietet große Vorteile in Bezug auf Speichersicherheit und Zuverlässigkeit. Gerade in der sicherheitskritischen Automobilindustrie dürfte sich die Einführung von Rust beschleunigen
- Angesichts des enormen Legacy-Bestands im bestehenden C/C++-Ökosystem und des verfügbaren Entwicklerpools dürfte jedoch eine schrittweise Einführung realistischer sein als ein vollständiger Umstieg. Die Verbesserung der Interoperabilität zwischen Rust und C/C++ wird eine wichtige Aufgabe sein
- Die Rust-Toolchain für Embedded-Entwicklung ist noch nicht perfekt. Sie entwickelt sich unter Community-Führung zwar schnell weiter, doch für Stabilität und Support auf kommerziellem Niveau sind Investitionen und Beteiligung von Unternehmen erforderlich
- Im Vergleich zu C++ gibt es weiterhin eine gewisse Lernkurve, doch das starke Typsystem und das Ownership-Konzept von Rust werden langfristig zur Steigerung der Entwicklungsproduktivität und der Codequalität beitragen. Dafür sind allerdings Investitionen in Schulung und Onboarding nötig
- Wie das Beispiel von Volvo zeigt, ist es eine gute Strategie, Rust schrittweise zunächst in neuen Projekten einzusetzen. Eine teilweise Neuschreibung bestehender Codebasen und die Integration von Rust-Komponenten dürften der realistische Ansatz sein
4 Kommentare
Die Meinung, dass „Ada zu kompliziert und proprietär“ sei, überrascht mich etwas. Aus meiner Erfahrung, da ich beide beruflich genutzt habe, wirkt C++ deutlich komplizierter als Ada...
Wie dem auch sei: Ich hoffe, dass bald eine „zertifizierte“ Rust-Entwicklungsumgebung erscheint, die sich auch für Safety-Critical einsetzen lässt. AdaCore arbeitet daran, also wird man sie irgendwann wohl nutzen können, oder?
GNAT Pro for Rust: Rust-Entwicklungsumgebung für Embedded
Die Zertifizierung ist das Problem ... wenn das gelöst ist, wird man es wohl nach und nach an immer mehr Orten einsetzen wollen.
Unterdessen nutzt Uber Zig recht breit. Fast die Hälfte der Einnahmen der Zig Foundation hängt von Uber ab.
2024 Financial Report and Fundraiser
Es ist zwar nicht direkt der Embedded-Bereich, aber auch bei uns im Unternehmen scheint es intern immer mehr Teams zu geben, die das prüfen.
Vor allem macht die Geschichte die Runde, dass man durch die Entwicklung einer Interop-Bibliothek in Rust für den Python-Code von Airflow ziemlich ordentliche Effekte erzielt hat, weshalb sich viele dafür interessieren.