Auf der embedded world North America

TrustInSoft Analyzer jetzt auch mit Rust-Unterstützung

27. Oktober 2025, 8:00 Uhr | Rolland Dudemaine / ak
© nayemur/stock.adobe.com

Die Programmiersprache Rust wird zunehmend bei der Programmierung von Embedded-Systemen genutzt. Doch was sind ihre Vorteile gegenüber bewährten Programmiersprachen? Und was kann der TrustInSoft Analyzer hier leisten? Auf der embedded world North America gibt TrustInSoft Antworten auf diese Fragen.

Diesen Artikel anhören

Rust ist eine leistungsstarke Programmiersprache, die auf Speichersicherheit und Geschwindigkeit ausgelegt ist. Sie wurde ursprünglich von Mozilla Research entwickelt und 2015 veröffentlicht. Nach einem Jahrzehnt ist ihr Erfolg in vielen Branchen unbestreitbar. Ihre Fähigkeit, Speicherfehler und Datenkonflikte zu beheben und so den Fokus auf Sicherheit zu legen, ohne die Leistungsfähigkeit zu beeinträchtigen, ist ihr großer Vorteil.

Wegen ihrer wachsenden Beliebtheit wird die Sprache Rust heute für die Programmierung auf Systemebene, Web-Assembly, Embedded-Systeme, Blockchain-Entwicklung und viele weitere Programmierbereiche verwendet. Im Kern sorgt der Rust-Compiler dafür, dass Entwickler robusten und effizienten Code schreiben und potenzielle Probleme frühzeitig erkennen. Rust kennt keine Kompromisse und zwingt Entwickler, hochoptimierten Code zu liefern, der weitaus weniger fehleranfällig ist.

Interessanterweise hat Rust, obwohl es Entwicklern auf den ersten Blick das Leben schwer macht, in Umfragen von StackOverflow immer wieder den Titel »beliebteste Programmiersprache« gewonnen. Daraus folgt, dass Rust von einer umfangreichen, lebendigen und begeisterten Community gestützt wird, die sich schnell entwickelt hat, um die Sprache zu unterstützen, zu pflegen und weiter auszubauen.

Um jedoch das zu erreichen, was alle mit Rust erreichen wollen, muss man bei der entscheidenden Anforderung der Speichersicherheit beginnen. Fehler und andere häufige Schwachstellen zu vermeiden, die durch Pufferüberläufe, Null-Zeiger-Dereferenzierungen und Use-after-free-Fehler entstehen können, ist in vielen Programmiersprachen seit langem ein Problem und ist es bis zu einem gewissen Grad auch heute noch. Die Folgen solcher Fehler sind unzählige Cybersecurity-Probleme, von Denial-of-Service (DoS) bis hin zu aktiven Sicherheitslücken.

Rust hingegen reduziert Bedrohungen der Speichersicherheit, indem es sicherstellt, dass traditionelle Bedrohungen bereits zur Kompilierungszeit und nicht erst zur Laufzeit behoben werden. Selbst wenn der Rust-Ansatz keine Garantie bietet, bringt er Entwickler ein gutes Stück in die richtige Richtung.

Einer der vielen Gründe, warum Rust so positiv aufgenommen wurde, ist sein Borrow Checker: Dieser Kompilierungszeit-Checker erzwingt ein striktes Eigentümersystem, das vorschreibt, wie und wo auf Daten zugegriffen werden kann. Nach diesem Eigentumsprinzip ist jedes einzelne Datenelement in Rust mit dem Gültigkeitsbereich eines einzelnen Eigentümers verknüpft. Sobald der Eigentümer den Bereich verlässt, werden die Speicherdaten automatisch freigegeben, wodurch die manuelle Speicherverwaltung entfällt. Dies ist auch eine sehr effektive Methode, um Speicherlecks zu verhindern.

passend zum Thema

Entwicklung des Software-Defined Vehicle mittels Rust und TrustInSoft Analyzer.
Entwicklung des Software-Defined Vehicle mittels Rust und TrustInSoft Analyzer.
© sdecoret/stock.adobe.com

Ein weiteres Kernprinzip von Rust ist die strikte Einhaltung von Programmierregeln. Rust ermöglicht die Datenübernahme über Referenzen und setzt dafür strenge Regeln durch. Ein verwandtes Kernkonzept ist die Veränderbarkeit, die beschreibt, ob ein Wert verändert werden kann. So können eine veränderbare Referenz oder mehrere unveränderbare Referenzen auf ein Datenelement vorliegen, aber nicht beide gleichzeitig. Dies ist eine effektive Methode, um unerwartetes Verhalten zu verhindern und die Datenintegrität sicherzustellen. Aber auch hier gilt: Es ist keinen umfassenden Schutz, sondern man verschiebt lediglich die Grenze weiter als üblich.

Warum ist dieser Fokus auf Softwaresicherheit so wichtig? Auch wenn es für viele selbstverständlich sein mag, ist es dennoch eine berechtigte Frage für jene, die nicht direkt in die Programmierung eingebunden sind, besonders wenn es um Sicherheit geht. Traditionelle Programmiersprachen wie C und C++ geben Entwicklern direkte Kontrolle über den Speicher. Das ist an sich nichts Schlechtes, kann aber auch Nachteile haben: Mit großer Macht geht auch große Verantwortung einher. Dieses Maß an Kontrolle ermöglicht hohe Leistungsfähigkeit, was gewünscht ist. Gleichzeitig kann der Code jedoch schwer vorhersehbare oder gefährliche Aktionen mit den Daten ausführen. Letztlich geht es um die direkte Kontrolle durch die Entwickler. Für übermäßig enthusiastische oder leicht ablenkbare Personen kann direkte Kontrolle – oder deren Fehlen – den negativen Effekt haben, zu viel in zu kurzer Zeit zu versuchen, was zu Speicherfehlern oder Datenkorruption führen kann. Diese Fehler können wiederum zu ausnutzbaren Sicherheitslücken führen und unvorhergesehenes Verhalten hervorrufen.

Das Speichermodell von Rust hingegen bietet ein strengeres, aber stabileres Maß an Kontrolle, das für mehr Sicherheit sorgt, indem es die Entwickler und den Code dazu zwingt, in ihrer Spur zu bleiben. Dies reduziert die Wahrscheinlichkeit eines allgemeinen Fehlerbefalls und macht Rust-Programme von Grund auf sicherer. Kurz gesagt: Es gibt mehr Kontrolle, wodurch weniger Raum für Fehler bleibt.

Rust-Programmierung mithilfe des TrustInSoft Analyzer.
Rust-Programmierung mithilfe des TrustInSoft Analyzer.
© TrustInSoft

Eine der wichtigsten Errungenschaften von Rust ist seine Fähigkeit, Speichersicherheit zu gewährleisten, ohne auf einen Garbage Collector für die automatische Speicherverwaltung angewiesen zu sein. Garbage Collection (GC) in anderen Programmiersprachen wie Go, Python oder Java ist zwar effektiv, führt jedoch häufig zu einem Laufzeit-Overhead, der sich negativ auf die Leistungsfähigkeit auswirken kann. Das Eigentumsmodell von Rust verwaltet den Speicher effizienter und bietet Entwicklern die beiden bereits erwähnten Vorteile: Sicherheit und Geschwindigkeit.

Es sind diese Säulen der Sicherheit und Kontrolle sowie die Funktionen, die Rust so attraktiv machen. Programmierer nutzen Rust zunehmend, um neue Betriebssysteme und Kernel zu entwickeln. Aus denselben Gründen entstehen neue und überarbeitete Webbrowser-Designs sowie neue Blockchains und Spiele, die die Vorteile von Rust nutzen. Die Welt wird zunehmend in Rust neu geschrieben, mit einer modernen Sprache und modernen Methoden.

Auf den ersten Blick scheint Rust also eine optimale Lösung zu sein. Aber es gibt noch Hindernisse.

Rust ist trotz all seiner Vorteile nicht perfekt. Es geht lediglich einen anderen Kompromiss ein. An sich verbessert dieser Ansatz die Branche insgesamt, aber ein einzelnes Tool kann nicht alles perfekt machen. Zu den zentralen Designentscheidungen gehört, dass der Code instrumentiert wird, um eine Eigenschaft zur Laufzeit zu überprüfen, wenn diese nicht durch den (fortschrittlichen) Compiler verifiziert werden kann. Tritt ein Fehler auf, ruft der Code freiwillig einen Fatal-Handler auf (Panic!) und ermöglicht die Fehlerbehandlung oder den Abbruch. Dies mag auf einem Desktop oder Server, wo der Code einfach neu gestartet werden kann, akzeptabel sein, ist aber in Mission-Critical-Systemen inakzeptabel.

TrustInSoft Analyzer (TISA) bietet zusätzliche Sicherheit für den Code durch einen formalen Methodenansatz. Ursprünglich für C entwickelt und später auf C++ erweitert, ermöglicht TISA nun die vollständige Nutzung von Rust. Eine der Eigenschaften ist der Nachweis der Abwesenheit ganzer Kategorien von Fehlern, was weit über die Speichersicherheitsfunktionen von Rust hinausgeht.

Der besondere Ansatz von TISA liefert die Ergebnisse einer dynamischen Analyse und erkennt Laufzeitfehler, ohne dass diese in einem tatsächlichen Zielsystem ausgeführt werden müssen. Damit lassen sich potenzielle Schwachstellen, Ineffizienzen oder Logikfehler schnell und effizient erkennen und verhindern. Durch den Einsatz formaler Methoden als Bestandteil der Verifizierungstechniken wird Konformität mit sicheren Programmierpraktiken gewährleistet, was die Debugging-Zeit sowie die damit verbundenen Kosten und den Aufwand erheblich reduziert.

Anders gesagt: Mit TISA lassen sich alle Ursachen für Panic-Situationen und unerwartetes Codeverhalten erkennen, noch bevor sie das endgültige System erreichen.

Dudemaine Rolland von TrustinSoft
Rolland Dudemaine ist Director Solutions Engineering bei TrustInSoft.
© TrustInSoft

Ein Nebeneffekt der dynamischen Analyse von C- und Rust-Code ist, dass TISA solche Speichersicherheitsgarantien auch über Sprachgrenzen hinweg abdeckt: Wenn Rust-Code eine ältere C-Bibliothek aufruft oder umgekehrt C-Code Rust aufruft, überprüft TISA die Konsistenz der übergebenen Daten und meldet auch alle damit verbundenen Probleme.

All dies arbeitet Hand in Hand mit den integrierten Sicherheitsfunktionen von Rust und bietet zusätzlich eine komfortable und dennoch undurchdringliche Sicherheitsbarriere. Mit anderen Worten: Rust-Programmierer, die TrustInSoft Analyzer verwenden, wissen, dass keine Bugs oder Laufzeitfehler in einer kritischen Anwendung auf den Markt gelangen und finanzielle Verluste, irreparable Sachschäden oder Schlimmeres verursachen. Rust-Nutzer können dank TrustInSoft somit entspannt ihrer Arbeit nachgehen.

TrustInSoft auf der embedded world North America: Halle C, Ebene 1, Stand 9040


Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Componeers GmbH

Weitere Artikel zu Embedded

Weitere Artikel zu Echtzeit-/Embedded Software

Weitere Artikel zu Software/Entwicklung