Was ist Rust (Programmiersprache)?
Die Programmiersprache Rust wurde 2015 in ihrer ersten stabilen Version 1.0 von Mozilla Research veröffentlicht. Sie hat sich seitdem in Entwicklerkreisen und bei Softwareherstellern verbreitet, da sie Ansätze mitbringt, die Performance und Sicherheit erhöhen sollen.
Rust (im Beitrag auch als „R“ bezeichnet) bezeichnet sich selbst als Allzwecksprache, die speziell für die systemnahe Programmierung geeignet ist. Sie wird laut eigener Dokumentation bereits in vielen Bereichen und Branchen für Softwareprodukte eingesetzt.
Der Rust-Compiler und die Werkzeuge der Sprache sind für alle gängigen Betriebssystem- und Hardwareplattformen verfügbar. Dazu zählen Windows, Linux, MacOS, Android, iOS auf 32- und 64-Bit- sowie ARM-Hardware. Rust ist eine plattformübergreifende Programmiersprache.
Für eine Vielzahl von Entwicklungsumgebungen existieren R-Erweiterungen, um Syntax-Highlighting im Editor, Debugging und eine Projektverwaltung zu erhalten. So können R-Programme etwa in Microsoft Visual Studio Code entwickelt werden.
Die Community ist sehr aktiv und unterstützt Entwickler bei der Installation und Einrichtung der Sprache und ihrer Tools.
Beispielsweise hat R bereits Tools für umfangreiche Tests und Dokumentation an Bord, die bei komplexen Softwareprojekten unerlässlich sind.
Eine gewisse Einarbeitung ist jedoch nötig, da sich Schlüsselwörter, die Arbeit mit Datenstrukturen und das Vorgehen bei der Zuweisung von Speicher sowie die Zugriffe darauf von bereits bekannten Programmiersprachen teils deutlich unterscheiden.
Die Motivation, sich mit Rust zu beschäftigen
Systemnahe Programmierung steht im Jahre 2023 besonders bei der Entwicklung von Betriebssystemen mobiler Geräte sowie beim Internet of Things (IoT) im Vordergrund. Werden hierbei C beziehungsweise C++ verwendet, liegt die Verantwortung für die Speicherverwaltung und -zuweisung beim Programmierer. Dies hat Auswirkungen auf die Sicherheit der Software.
So hat beispielsweise Microsoft auf der BlueHat Cybersecurity-Konferenz 2019 in Israel Untersuchungsergebnisse veröffentlicht, wonach etwa 70 Prozent der bekannt gewordenen Sicherheitslücken in Softwareprodukten auf fehlerhafte Speicherverwaltung im Quellcode zurückzuführen sind.
Weiterhin zeigte diese Studie, dass die ermittelte Quote seit Mitte der 2000er Jahre konstant bleibt. Die kritischen Stellen müssen regelmäßig per Updates geschlossen werden, was wenig Vertrauen beim Endanwender hervorruft. Unternehmen müssen verstärkt Aktualisierungen ausrollen und ihre Produktionssysteme während der regelmäßigen Patchdays in Wartung nehmen.
Entwickler, die etwa mit Sprachen wie C oder C++ arbeiten, werden den Problemen mit der Speicherverwaltung bei immer komplexer werdender Software nicht Herr.
R bietet mit seinem Memory-Safety-Konzept Möglichkeiten, um Fehler bei der Speicherverwaltung bereits während des Kompilierens aufzuzeigen. Hierzu gehört die Einführung des Memory Ownership, was den Besitz und die Weitergabe von Werten an Variablen im Speicher streng regelt. Ein Aufräumen mittels Garbage Collection zur Laufzeit ist daher nicht nötig und entfällt völlig.
Sichere Software in den 2020er Jahren mit den Jahrzehnte alten Sprachen C und C++ zu entwickeln, setzt einen hohen Zeitaufwand und langwierige Tests voraus.
Die fortschreitende Digitalisierung lässt dafür allerdings immer weniger Spielraum, weil die Softwareentwicklung schnellere Ergebnisse bei komplexeren Anforderungen liefern muss. Da mit eingebetteten (embedded) Systemen, IoT-fähigen und mobilen Endgeräten die systemnahe Programmierung neben Betriebssystemen und Treibern an Bedeutung zunimmt, kann sichere Software nicht mit Java und ähnlich hoch abstrakten Sprachen realisiert werden. Diese bieten zwar durch ihre erhobene Abstraktionsebene eine komfortablere Entwicklung und automatische Speicherverwaltung, sind für hardwarenahe Anwendungen jedoch schlicht nicht performant genug.
Die fehlende Speicherbehandlung zur Laufzeit macht ein fertiges R-Programm im Gegensatz hoch abstrakten Sprachen wesentlich schneller. Der Rust-Kompiler sorgt bereits während der Übersetzung des Quelltextes für eine gründliche Prüfung auf Fehler, die der Programmierer im Hinblick auf die Speicherverwaltung begangen haben könnte.
Memory Ownership
Das Konzept des Memory Ownership, also das strenge Regeln von Speicherzugriffen, ist eine der Sicherheitseinrichtungen von Rust. Allerdings macht dies gleichzeitig das Erstellen des Quelltextes für den unerfahrenen Rust-Entwickler schwieriger. Denn hinsichtlich der Speicherverwaltung stellt R Regeln auf, wie sicherer Code zu implementieren ist. Der R-Compiler prüft den Quelltext nicht bloß auf Syntax und Grammatik, er deckt während der Übersetzung zusätzlich Speicherfehler auf.
Geht der Code nicht regelkonform mit den Speicherzugriffen um, verweigert der Compiler die Übersetzung. Einsteiger könnten sich daher von der anstehenden Einarbeitung in R abschrecken lassen. Jedoch lassen sich Speicherfehler nun zur Kompilierzeit aufspüren, bevor überhaupt ein lauffähiges Programm entsteht und dessen potentielle Fehler mühsam durch Tests entdeckt werden müssen.
Update-Kanäle, Parallelinstallationen und Abwärtskompatibilität
Rust ist quelloffen und unterliegt einer stetigen Weiterentwicklung, die von seiner Community betrieben und unter anderem von der Mozilla Foundation finanziert wird. Aktualisierungen bezieht der Nutzer über einen der drei Kanäle „stable“, „beta“ oder „nightly“.
Von Nightly wird für eine produktive Nutzung abgeraten, da hier aktuellste Entwicklungen und neueste Funktionen ohne Garantie einer ordnungsgemäßen Funktion enthalten sind. Dafür erscheinen die Nightly-Releases (nächtlich) mit neuen Features in sehr kurzen Abständen. Es ist stark davon auszugehen, dass mit Nightly erstellter Code nicht mit dem Beta- oder Stable-Kompiler übersetzt werden kann.
Beta-Versionen sind als Release-Kandidaten zu verstehen, da hier Aktualisierungen enthalten sind, die kurze Zeit später in der stabilen Version veröffentlicht werden.
Als Stable erscheinen stabile und getestete Releases, die für die produktive Nutzung freigegeben sind. Für die Veröffentlichung zwischen zwei neuen stabilen R-Versionen hat sich ein Zeitraum von sechs Wochen etabliert.
Auf einem Entwicklersystem lassen sich durch den Nutzer Rust-Releases verschiedener Versionen und aus jedem der drei Entwicklungskanäle getrennt installieren. Somit kann ein Entwickler sowohl Code mit den neuesten Erscheinungen aus Nightly parallel neben Programmen für den Stable-Kompiler übersetzen, ohne dass sich beide Umgebungen gegenseitig beeinflussen.
Installationen und Updates aus allen Kanälen können über Befehle in der Kommandozeile initiiert werden. Dies macht es möglich, eine automatisierte Installation und Aktualisierung einfach und skriptgesteuert zu realisieren.
R ist abwärtskompatibel, sodass Programmcode, der mit älteren Rust-Stable-Versionen erstellt wurde, mit jedem neu erschienenen stabilen Release kompiliert werden kann. Eine Ausnahme hinsichtlich der Kompatibilität stellt wie erwähnt der Nightly-Kanal dar.
Fazit
Immer komplexere Softwaresysteme sowie mobile und IoT-fähige Geräte sehen sich einer gleichbleibend hohen Anzahl an Sicherheitslücken gegenüber. Herkömmliche Programmiersprachen, die in den Zeiten lange vor dem heutigen Internet das Licht der Welt erblickten, stoßen hier trotz stetiger Weiterentwicklung an ihre Grenzen.
Häufige Updates beschäftigen neben Privatanwendern besonders die IT-Abteilungen eines jeden Unternehmens.
Rust ist eine Programmiersprache, die dieses Problem ganz bewusst mit einem eigenen Ansatz angeht.
Fehlende Garbage Collection kann schnelle Programme erzeugen, während der Programmcode bereits zum Zeitpunkt seiner Entwicklung strengen Regeln standhalten muss, um kompiliert werden zu können. Dies erfordert zwar eine intensive Einarbeitung, kann jedoch die Entwicklung komplexer und sicherer Anwendungen erheblich unterstützen.
Interessante Beiträge:
Informationen zu Rust auf Wikipedia
Eine erste Einführung zur Rust Programmiersprache auf Entwickler.de
Bilder: Canva
Der Autor: Sascha Thattil arbeitet bei YUHIRO und hilft Unternehmern und Unternehmen beim einfachen Aufbau von Programmier-Teams in Indien. YUHIRO ist ein deutsch-indisches Unternehmen welches IT Firmen, Agenturen und IT Abteilungen Softwareentwickler bereitstellt.
Schreibe einen Kommentar