FreeBSD ist ein renommiertes, freies Betriebssystem, das für seine Stabilität und Sicherheit weltweit geschätzt wird. In den letzten Jahren hat die Programmiersprache Rust enorm an Bedeutung gewonnen, vor allem aufgrund ihrer Sicherheit und Performance. Das Projekt, Rust optional in FreeBSD zu unterstützen, hat daher inzwischen an Fahrt aufgenommen. Nach einem Hackathon mit FreeBSD-Entwicklern ist ein Statusbericht im Mai 2025 veröffentlicht worden, der detaillierte Einblicke in den aktuellen Stand der Rust-Integration sowie die nächsten Entwicklungsschritte gibt. In diesem Bericht wird klar, wie FreeBSD Rust als optionale Komponente im Userland einführt und welche Herausforderungen noch bevorstehen.
Eine vollständige Rust-Integration, insbesondere für Bibliotheken und den Kernel, ist zwar noch nicht erreicht, doch die bisherigen Fortschritte zeigen ein vielversprechendes Potenzial für die Zukunft. Der Ausgangspunkt dieser Entwicklung war ein gezielter Hackathon, bei dem FreeBSD-Entwickler zusammenkamen, um grundlegende Unterstützung für optionale userland-Komponenten in Rust zu erarbeiten. Ziel war es, eine Basis zu schaffen, auf der einzelne Anwendungen oder Bibliotheken optional in Rust implementiert und einfach gebaut werden können, ohne den gesamten Build-Prozess radikal zu verändern. Daraus entstand ein spezieller Feature-Branch namens hardened/current/rust-in-base, in dem die Implementierung untergebracht ist. Eine wichtige Entscheidung war, den Fokus zunächst auf Anwendungen zu legen, also ausführbare Rust-Komponenten im Userland.
Die direkte Unterstützung von rust-basierten Bibliotheken, insbesondere von sogenannten cdylib-Bibliotheken, die eine FFI-Schnittstelle für C und C++ bieten, ist zwar geplant, jedoch noch nicht vollständig umgesetzt. Noch weniger wird der Rust-Einsatz im Kernel unterstützt, da dieser Bereich besondere Anforderungen an die Sicherheit und die Systemintegration stellt und deutlich komplexer ist. Daher beschränkt sich die aktuelle Arbeit auf das optionale Hinzufügen von Rust-Anwendungen im Userland, die bei Bedarf während des Buildworld-Prozesses kompiliert und installiert werden können. Die technische Integration wurde durch die Einführung eines neuen Makefile-Moduls share/mk/bsd.rust.
mk realisiert. Dieses Modul übernimmt Aufgaben, die mit der Modi bsd.prog.mk vergleichbar sind, jedoch speziell auf Rust zugeschnitten sind. Anders als bei klassischen BSD-Programmen wird das neu geschaffene Makefile so konzipiert, dass der Aufbau und die Installation von Rust-Anwendungen während des Buildworld-Prozesses möglich sind, sofern entsprechende Konfigurationen gesetzt sind.
Insbesondere entscheidet das neue src.conf-Kommandozeilen-Knopfwort OPTIONAL_TOOLCHAINS über die Aufnahme von rust-cargo in den Buildprozess. Fehlt dieser Eintrag, werden Rust-Komponenten einfach übersprungen und der Prozess läuft wie gewohnt weiter. Der Buildprozess selbst stützt sich vollständig auf Cargo, den offiziellen Paket- und Buildmanager von Rust. Cargo wird angewiesen, ausschließlich auf lokal vorliegende, sogenannte "vendored" Abhängigkeiten zuzugreifen, die im Quellcodeverzeichnis unter vendor/rust abgelegt sind.
Dies stellt sicher, dass während des Builds keine Abhängigkeit von externen Netzwerken oder Repositorien besteht, was besonders für reproduzierbare Builds und für Sicherheit wichtig ist. Cargo erhält dabei explizit den --offline Parameter, um die Internetverbindung zu vermeiden. Die gesamte Organisation der benötigten Crates an einem zentralen Ort entspricht einer bewährten Praxis in FreeBSD, die bereits von anderen Komponenten genutzt wird. Um Probleme bei der Pfadauflösung des zu erstellenden Binaries zu vermeiden, wird env(1) verwendet, um das Verzeichnis des jeweiligen Rust-Projektes zu wechseln. Dies ist notwendig, da Cargo in manchen Situationen mit dem --path Argument Schwierigkeiten haben kann.
Im Rahmen des Buildworld-Prozesses wird Cargo die einzelnen Rust-Anwendungen zusammen mit all ihren Abhängigkeiten aus dem Vendor-Verzeichnis kompilieren. Im Anschluss, während des installworld-Durchlaufs, übernimmt Cargo die Installation der gebauten Binärdateien an ihre vorgesehenen Speicherplätze. Dieses Vorgehen erleichtert die nahtlose Integration von Rust-Anwendungen in die traditionelle FreeBSD-Userland-Struktur. Im aktuellen Entwicklungszweig sind bereits einige praktische Beispiele für Rust-Anwendungen enthalten, die als Muster für die weitere Arbeit dienen. Dazu zählen unter anderem Anwendungen wie freebsd-geom-exporter, jail_exporter, nfs-exporter und gstat.
Diese Applikationen sind zwar noch nicht für eine Übernahme in den offiziellen FreeBSD-Quellcode vorgesehen, sie zeigen jedoch den praktischen Nutzen und die Funktionsweise des neuen Rust-Buildsystems im FreeBSD-Kontext. Insbesondere dienen sie dazu, das Handling der Abhängigkeiten, den Buildprozess und die Integration in das Gesamtsystem zu verifizieren und zu verbessern. Eine Reihe von Herausforderungen und Erweiterungswünschen wurde im Statusbericht ebenfalls offen angesprochen. Die Unterstützung von Rust-Bibliotheken als eigenständige, buildbare und installierbare Komponenten steht ganz oben auf der Prioritätenliste. Besonders die Implementierung von cdylibs ist technisch anspruchsvoll, da diese einen nahtlosen Interoperabilitätslayer mit traditionellen C/C++-Bibliotheken ermöglichen sollen.
Weiterhin wird die Unterstützung mehrerer Rust-Anwendungen, die gleichzeitig durch ein einzelnes Makefile gebaut werden können, als wichtige Erweiterung gesehen. Aktuell unterstützt das System nur den Aufbau einzelner Anwendungen pro Makefile, was in komplexeren Szenarien schnell an Grenzen stößt. Die geplante Einführung eines Äquivalents zu bsd.progs.mk für Rust soll hier Abhilfe schaffen.
Auch die Handhabung von zusätzlichen Ressourcen wie Handbuchseiten, Header-Dateien oder anderen Hilfsdateien ist noch nicht vollständig etabliert. Eine komplette Integration von Dokumentation und sonstigen Begleitdateien ist jedoch essentiell, um den gewohnten Standards von FreeBSD zu entsprechen und Entwicklern und Nutzern den vollen Komfort zu bieten. Ein weiterer Fokus liegt auf der Entwicklung und Definition klarer Richtlinien für das Einpflegen von Vendor-Abhängigkeiten von Rust-Crates. Zwar bestehen in FreeBSD bereits etablierte Prozesse für die Aufnahme und Pflege von nicht-Rust-Vendor-Paketen, doch Rust bringt durch seinen Package-Management-Mechanismus einige Besonderheiten mit sich. Die automatische und quelloffene Verwaltung der Crates muss so erfolgen, dass Qualität, Sicherheit und Reproduzierbarkeit jederzeit gewährleistet sind.
Der aktuelle Status des Projekts wird von den Entwicklern als proof-of-concept beziehungsweise als Arbeitsstand gesehen, der noch nicht zur formalen Begutachtung im Phabricator-System geeignet ist. Die genannten nächsten Schritte sollen vor einer offiziellen Patcheinreichung abgeschlossen werden, um eine stabile, robuste Basis für die optionale Rust-Unterstützung in FreeBSD zu gewährleisten. Sobald diese Voraussetzungen erfüllt sind, ist mit einem Reviewprozess zu rechnen, der die Tür für eine Aufnahme der Rust-Unterstützung in den offiziellen FreeBSD-Stamm öffnen wird. Das Konzept, Rust optional einzuführen, ohne das bestehende System zu stören, entspricht der Philosophie von FreeBSD, möglichst konservativ und stabil bei gleichzeitiger Innovation zu agieren. Durch die modulare Herangehensweise können Nutzer und Entwickler schrittweise von den Vorteilen der modernen Programmiersprache profitieren, ohne Kompatibilitätsprobleme oder Sicherheitsrisiken einzugehen.
Die Einführung von Rust in FreeBSD bietet vielfältige Vorteile. Rust ist insbesondere für seine Speichersicherheitsgarantien bekannt, die klassische Fehlerquellen in C und C++ vermeiden helfen. Dies kann die Stabilität und Sicherheit von Systemkomponenten erhöhen und das FreeBSD-System für die Zukunft robuster machen. Gleichzeitig profitieren Entwickler von modernen Werkzeugen, einem reichhaltigen Ökosystem und einer lebendigen Community, was die Entwicklung neuer Software erleichtert. Das fortschreitende Projekt zeigt beispielhaft, wie freie Betriebssysteme sich kontinuierlich weiterentwickeln und moderne Technologien adaptieren können, ohne ihre bewährte Identität zu verlieren.