Moderne Fahrzeuge sind komplexe, Software-gesteuerte Systeme. Mit der Komplexität steigt jedoch auch die Angriffsfläche durch schädliche Akteure. Den verwendeten Programmiersprachen kommt daher eine besondere Bedeutung zu.
Bei der Entwicklung von Software für den Automotive-Bereich wird eine große Zahl unterschiedlicher Programmiersprachen eingesetzt. Aber welche Sprache ist am besten geeignet, um den strengen Anforderungen an Cybersecurity zu entsprechen?
Cybersecurity ist in der Automotive-Branche ein zentraler Faktor geworden. Laut dem diesjährigen Branchen-Report von Perforce nannten 24 Prozent der befragten Fachkräfte für Automotive-Software die Tatsache als ihre größte Herausforderung, nicht über die benötigten Fähigkeiten zum Kampf gegen Security-Bedrohungen zu verfügen. 22 Prozent wiederum führen das Erfüllen von Security-Requirements als größte Herausforderung an.
Sicherheit durch Standards
Standards wie ISO/SAE 21434 sind entscheidend, um für ein bestmögliches Cybersicherheitsniveau in Fahrzeugen zu sorgen. Aber auch allgemeine Qualitätseigenschaften von Software, wie sie im Qualitätsmodell ISO 25010 definiert sind, sind relevant für die Entwicklung von Automotive-Software, selbst wenn diese nicht explizit gefordert werden.
Programmiersprachen spielen eine entscheidende Rolle, um diesen Standards gerecht zu werden. Denn sie beeinflussen alles: vom Grad der Modularität und Abstraktion bis hin zur Resilienz gegen Sicherheitslücken.
ISO/SAE 21434: Cybersecurity Engineering
Bei ISO/SAE 21434 handelt es sich um einen Automotive-Standard für das auf Cybersicherheit bezogene Risikomanagement in elektronischen Fahrzeugsystemen. Obwohl der Standard noch relativ neu ist, muss ihn bereits heute ein Großteil der Befragten (65 Prozent) einhalten.
Der Standard enthält detaillierte Anforderungen an die Softwareentwicklung. Dazu zählen unter anderem die Prüfung des Software-Codes auf inhärente Sicherheitsrisiken sowie Konsistenz, Korrektheit und Vollständigkeit. Daneben müssen bestimmte Kriterien bei der Auswahl der Programmiersprache beachtet werden wie sicheres Design und sichere Coding-Techniken oder eindeutige Syntax und Semantik.
ISO 25010: Modell für Softwarequalität
Bild 1: Hauptmerkmale von Softwarequalität nach ISO 25010.
(Bild: Perforce)
Daneben definiert ISO 25010 ein allgemeineres Modell für Softwarequalität anhand von acht Haupt- und 31 Nebenmerkmalen. Auch hier müssen die verwendeten Programmiersprachen folglich Eigenschaften aufweisen, mit deren Hilfe Entwickler Software schreiben können, die diese Kriterien erfüllt. Cybersicherheit ist eines davon. Für Unternehmen gilt es jedoch, zu ermitteln, wie gut die Eigenschaften der gewählten Programmiersprache dieses und auch alle anderen geforderten Qualitätsmerkmale erfüllen. Für Echtzeitanwendungen sind die funktionale Passgenauigkeit und Leistungseffizienz mindestens ebenso wichtig.
AUTOSAR-Plattformen
AUTOSAR (kurz für „Automotive Open System Architecture“) zielt darauf ab, grundlegende Softwareelemente, Schnittstellen und Bus-Systeme zu standardisieren und zukunftsfest zu machen. Dies soll Fahrzeugbauern dabei helfen, die wachsende Systemkomplexität zu beherrschen und gleichzeitig die Kosten niedrig zu halten.
Die „Classic Platform API” ist für Fahrzeugfunktionen mit strengen Echtzeit-Anforderungen und hoher Bedeutung für die funktionale Sicherheit gedacht. Spezifiziert wurde die Schnittstelle in der Programmiersprache C. Die neue „Adaptive Platform API” hingegen wurde unter Nutzung von C++ spezifiziert, unterstützt dabei jedoch ausdrücklich Bindings zu anderen Sprachen.
Insbesondere für beliebte Programmiersprachen wie Python, Java, C#, JavaScript, Go und Rust gilt es daher, deren Qualitätseigenschaften zu diskutieren.
Die gängigsten Sprachen im Überblick
Generell lassen sich die im Fahrzeugbau verwendeten Programmiersprachen in drei Kategorien unterteilen: Native, Plattform- und interpretierte Sprachen. Sie alle weisen jeweils spezifische Stärken und Schwächen auf, die sie für unterschiedliche Einsatzzwecke empfehlen.
Native Sprachen
Native Sprachen werden zu Objektcode kompiliert, der sich direkt auf der Zielmaschine ausführen lässt. Zu diesen Sprachen zählen – geordnet nach ihrem Veröffentlichungsdatum – C, C++, Rust und Go.
Native Sprachen auszuführen, weckt Bedenken hinsichtlich funktionaler und digitaler Sicherheit. Programmfehler können zu Abstürzen führen und Sicherheitslücken lassen sich zu schädlichen Zwecken ausnutzen. Für C und C++ unterhält ISO Sprachstandards, die problematisches Verhalten spezifizieren. C und C++ können verschiedenste Formen von undefiniertem Verhalten zeigen, zum Beispiel die Verwendung nicht-initialisierter Daten, Zugriffsversuche auf Null-Speicheradressen sowie Pufferüberläufe.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel Communications Group GmbH & Co. KG, Max-Planckstr. 7-9, 97082 Würzburg einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von redaktionellen Newslettern nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung, Abschnitt Redaktionelle Newsletter.
Glücklicherweise sind Probleme wie diese weitgehend bekannt und Coding-Standards wie MISRA C und MISRA C++ zielen darauf ab, das Risiko eines solchen undefinierten Verhaltens so weit wie möglich zu senken. Der Einsatz von Tools zur statischen Analyse kann zudem dabei unterstützen, Coding-Standards zuverlässig einzuhalten.
Native Sprachen sind inhärent leistungseffizient. C und C++ ermöglichen eine optimale Laufzeit- sowie Arbeitsspeicherleistung und bieten deshalb den höchsten Grad an Ausführungskontrolle. Damit einher geht jedoch das Risiko fehlerhafter Speicherzugriffe wie zum Beispiel Speicherverwendung nach Freigabe („user after free”). Coding-Standards stellen Leitlinien in diesem Bereich bereit. MISRA C beinhaltet eine verbindliche Regel, die es untersagt, dynamische Speicher zu verwenden. In C++ stellt „Scope Bound Resource Management” (SBRM) eine Möglichkeit dar, das Speichermanagement zu automatisieren.
Die Sprache Go wurde 2009 von Google vorgestellt. Vom Design hier liegt ihr Schwerpunkt auf paralleler Code-Ausführung. Wie C erlaubt sie ein manuelles Speichermanagement mit allen damit verbundenen Risiken. Für automatisches Speichermanagement nutzt sie einen Garbage Collector, der Nichtdeterminismus mit sich bringt, so dass sie für Echtzeit-Anwendungen nicht geeignet ist.
Rust wird im Buch „Rust Reference“ beschrieben, die Toolchain Ferrocene umfasst eine Spezifizierung der Sprache. Rust bietet eine neuartige dynamische Speicherlösung, die auf dem Eigentümerkonzept basiert. Sie enthält Regeln für die Eigentümerschaft von Speicher, die das Programm befolgen muss. Die Regeln dienen der Automatisierung des Speichermanagements, ähnlich dem SBRM in C++. Das erschwert zwar das Schreiben von korrektem Programmcode. Dieser erfordert dann jedoch keine Garbage Collection und eignet sich daher für Echtzeit-Anwendungen.
Das vor kurzem gegründete „Safety-Critical Rust Consortium” arbeitet an zusätzlichen Leitlinien für funktionale Sicherheit. Für MISRA C hat Perforce ein Unterkapitel mit Namen „Iron Carbide“ geschaffen, das sich auf Rust anwenden lässt.
Bezogen auf die Features der einzelnen Sprachen bestehen ebenfalls Unterschiede. C unterstützt lediglich prozedurales Programmieren, alle anderen Sprachen hingegen moderne Programmierparadigmen.
C-Compiler sind für fast jede Hardware erhältlich. Ähnliches gilt für C++-Compiler. Rust wird zu nativem Code kompiliert und nutzt zu diesem Zweck LLVM-Technologie, die eine große Bandbreite an Architekturen unterstützt. Go schließlich wird nur auf Desktop-Plattformen unterstützt.
Plattform-Sprachen
Eine Plattform bietet eine Abstraktion von der Maschine. Sie enthält einen Compiler, der Bytecode für seine virtuellen Maschinen erzeugt. Java und Kotlin laufen auf der Java-Plattform mithilfe der Java Virtual Machine (JVM). C# hingegen stellt die primäre Sprache für die .NET-Plattform mit der Common Language Runtime (CLR) von Microsoft dar.
Die Ausführung der Programme wird vollständig von der Spezifizierung der virtuellen Maschine definiert. Dennoch arbeiten sie mit einem Garbage Collector, was zu Nichtdeterminismus führen kann. Echtzeit-Java-Plattformen nutzen einen deterministischen präventiven Garbage Collector. Dennoch können Programme weiterhin Fehler enthalten und Sicherheitsprobleme verursachen. Entsprechend gibt es einen CERT-Coding-Standard für Java, während CWE Listen mit bekannten Schwächen und OWASP Cheat Sheets für beide Plattformen bereitstellen.
Kotlin ist Googles zentrale Programmiersprache für die Android-Plattform und hat in dieser Eigenschaft Java abgelöst. Android bietet ein „Native Development Kit” mit ausgereifter Unterstützung für C und C++. 2021 wurde zudem Rust als weitere Option hinzugefügt. Kotlin hat eine starke Ähnlichkeit zu Java, allerdings machen Schnittstellenänderungen häufigere Anpassungen am Code notwendig – mit negativen Auswirkungen auf die Wartbarkeit. Kotlin ist zur Verwendung in Web-Applikationen mit JavaScript interoperabel.
Java ist für die gängigen Desktop- und Serverplattformen erhältlich, während .NET nur wirklich gut auf Windows unterstützt wird.
Interpretierte Sprachen
Die beiden verbleibenden Sprachen Python und JavaScript sind interpretierte Sprachen. Interpreter lesen das Programm Zeile für Zeile und führen die Befehle aus. Die Folge davon ist, dass es sich hier um die am wenigsten deterministischen und am wenigsten geeigneten Sprachen für den Einsatz in Echtzeitsystemen handelt.
Python ist eine beliebte Scripting-Sprache, die langsam ausgeführt wird, aber einfach zu schreiben ist. Sie wird häufig als Bindeglied zwischen schnellen Komponenten genutzt, die in nativen Sprachen geschrieben sind. Für Python existieren keine Richtlinien bezüglich funktionaler oder digitaler Sicherheit.
JavaScript dient dazu, das Verhalten von Webseiten zu programmieren. In der Automobilbranche werden damit einige In-Vehicle-Infotainment-Systeme als Web-Applikationen implementiert. ECMA pflegt zwar den ECMAScript-Standard, doch davon existieren viele Varianten und Erweiterungen. Die Vielzahl an Sprachversionen, Frameworks und Umgebungen stellt eine Herausforderung dar. Denn ein vollständiges Verständnis der betriebenen Umgebung ist unabdingbar, damit sich die CWE- und OWASP-Richtlinien anwenden lassen.
Innovate Your Software – for a Smarter Future
Deutschlands Leitkongress der Embedded-Softwarebranche
Das Programm des ESE Kongress umfasst 96 Vorträge, 21 Seminare und 3 Keynotes. Seien Sie dabei, wenn sich die Embedded-Software-Community trifft, und nutzen Sie Diskussionen und Expertengespräche für einen ergiebigen Wissenstransfer und erfolgreiches Networken. Während der vier Kongresstage erwartet Sie zudem eine große Fachausstellung mit den führenden Firmen der Branche. Erfahren Sie alles über die neuesten Trends, Herausforderungen und Lösungen im Embedded Software Engineering, von KI, Safety und Security bis hin zu Management und Innovation.
Aus all diesen Beobachtungen ergeben sich die in Bild 2 und Bild 3 folgenden Eignungsmatrizen für ISO/SAE 21434 und ISO 25010.
Bild 2: Eignungsmatrize für Programmiersprachen nach ISO/SAE 21434.
(Bild: Perforce)
Die Eignung der einzelnen Programmiersprachen hängt vom „Safety Integrity Level” des jeweiligen Projekts ab. Projekte, in denen die funktionale Sicherheit zentral ist, erfordern unter Umständen eine zertifizierte Toolchain, was die Optionen drastisch reduziert.
C bleibt eine gute Wahl für einfache Anwendungen in Umgebungen, die begrenzten Hardware- und strikten Echtzeitanforderungen unterliegen.
C++ eignet sich besser für komplexe Frameworks mit mehreren Schichten. Dazu zählt zum Beispiel die „AUTOSAR Adaptive Platform“, deren Programmierschnittstelle in C++ spezifiziert ist.
Bild 3: Eignungsmatrize für Programmiersprachen nach ISO/SAE 25010.
(Bild: Perforce)
Java bietet sich als Sprache im Rahmen von Java-Frameworks wie Android an oder in Echtzeit-Umgebungen, in denen eine Echtzeit-JVM genutzt wird.
Kotlin eignet sich ebenfalls für die Verwendung in Android. Allerdings ist die Sprache weniger stabil als Java und ihre Echtzeit-Unterstützung ist eingeschränkter. Andererseits integriert sie sich besser in JavaScript für In-Vehicle-Infotainment-Anwendungen.
C# ist ideal für .NET, allerdings findet diese Plattform in Fahrzeugen keine Verwendung.
Python eignet sich nur für wenige Kontexte; insgesamt gibt es passendere Alternativen. JavaScript hingegen ist aus Web-User-Interfaces nicht wegzudenken, die in In-Vehicle-Infotainment-Systemen eingesetzt werden.
Schließlich bietet Rust bietet die stärksten Eigenschaften für funktionale Sicherheit und erhält immer mehr Zuspruch, zumal sich immer mehr Leitlinien dazu herausbilden und Toolchains zertifiziert werden.
Sprachwahl als strategische Entscheidung
In dem Maße, wie sich die Branche weiterentwickelt, müssen sich auch die genutzten Tools und Praktiken anpassen. Die Auswahl der Programmiersprache ist nicht nur eine Frage der Technik. Vielmehr handelt es sich um eine strategische Entscheidung, die unmittelbare Auswirkungen auf die funktionale und digitale Sicherheit sowie langfristige Wartbarkeit des Programm-Codes hat. Entsprechende Überlegungen gilt es daher, von Anfang an in die Sprachwahl miteinzubeziehen. (sg)
* Dr. Frank van den Beuken ist Principal Technical Support Engineer bei Perforce Software