Rust setzt mit dem Paketmanager Cargo sein Gesamtkonzept für den Entwicklungsprozess um und bedient damit das Bedürfnis vieler Entwickler nach einheitlichen Konzepten. Allerdings schafft dieses Gesamtkonzept im Kontext von integrierten Buildsystemen für eingebettete Systeme neue Probleme.
Mit Version 6.1 hat mit Rust erstmalig eine zweite Programmiersprache Einzug in den Linux Kernel gehalten. Rust bietet mit einem Schwerpunkt auf Memory- und Thread-Safety, modernen Programmierkonzepten, wie Generics und async/await, einem Mix aus funktionaler und objektorientierter Programmierung, auch für die Kernel-Entwicklung fundamentalen Konzepten wie starke Typisierung, Makros und Zero Cost Abstractions. Damit bedient Rust nicht nur steigende Security und Safety Anforderungen an eingebettete Systeme, sondern auch das Bedürfnis vieler Entwickler nach modernen Entwicklungskonzepten.
Im Bereich Embedded Linux ist es üblich den Bau- und Entwicklungsprozess eines Gesamtsystems über ein integriertes Tooling abzubilden. Zwei Beispiele oft genutzter Software sind Yocto (bzw. Openembedded) und Buildroot. Neben dem eigentlichen Bauprozess kümmern sich diese Entwicklungswerkzeuge um die Bereitstellung der Sourcen, das Auflösen von Abhängigkeiten, das Paketieren der durch den Bauprozess erzeugten Artefakte, die Verwaltung von Dokumentation und Lizenzvereinbarungen und die Ausführung von Tests.
Alle zuvor genannten Aufgaben wurden bei der Entwicklung von Rust direkt als Gesamtkonzept mitgedacht und in der Paketverwaltungssoftware Cargo umgesetzt. Cargo löst für die Rust-Entwicklung somit von Anfang an Probleme, die man für andere Sprachen des Öfteren versucht durch eine Vielfalt von Buildtools, Lintern, Paketquellen und Testumgebungen zu lösen.
Leider ist es gerade dieses moderne Konzept des Entwicklungsprozesses, das die Integration in Entwicklungsumgebungen wie Yocto und Buildroot erschwert und oftmals neue Probleme erzeugt und zusätzliche Arbeitsschritte erfordert.
Dieser Vortrag beschäftigt sich mit den Ursachen dieser Probleme und, soweit vorhanden, den bisherigen Lösungsansätzen.