Do you want to see our content in English?

x
x

So geht IoT-Embedded-Softwareentwicklung mit der Programmiersprache Rust

““

Klicken Sie auf den unteren Button, um den Inhalt von Spotify Player zu laden.

Inhalt laden

IoT Use Case Podcast auf Spotify anhören
IoT Use Case Podcast auf Spotify anhören
IoT Use Case Podcast auf anderen Plattformen anhören

IoT Use Case Podcast #134 - ITK Engineering

In dieser Podcast-Folge dreht sich alles um die Programmiersprache Rust und ihre Anwendung im Bereich IoT. Madeleine Mickeleit spricht mit Matthias Goetz, Lead Engineer, und Felix Herrmann, FPGA-Engineer bei ITK Engineering GmbH, einer Tochtergesellschaft von Bosch. Gemeinsam diskutieren sie die Besonderheiten und Vorteile von Rust im Vergleich zu anderen Programmiersprachen und gehen auf spezifische Anwendungsfälle und Best Practices ein, die Entwicklungsprozesse für IoT-Projekte optimieren können.

Folge 134 auf einen Blick (und Klick):

  • [12:00] Herausforderungen, Potenziale und Status quo – So sieht der Use Case in der Praxis aus
  • [24:48] Lösungen, Angebote und Services – Ein Blick auf die eingesetzten Technologien

Podcast Zusamenfassung

In Folge 134 sind wir technisch unterwegs. Diese Podcastfolge ist vor allem etwas für alle Anwendungsentwickler und -entwicklerinnen da draußen – oder Personen, die mit Entwicklungsteams zusammenarbeiten.

Rust ist eine moderne Programmiersprache, die sich durch innovative Ansätze wie das Ownership-Modell auszeichnet. Diese Merkmale sorgen für memory-safety und eine effiziente Ressourcenkontrolle, was sie besonders geeignet für die Entwicklung sicherer und zuverlässiger Embedded Software macht.

Im Vergleich zu traditionellen Sprachen wie C und C++ bietet Rust durch seine strikte Speicherverwaltung und das Fehlen von Nullpointern eine höhere Sicherheit. Der Rust-Compiler hilft, viele typische Fehler bereits während der Entwicklung zu vermeiden.

Anwendungsfälle im IoT: Rust wird sowohl für Embedded als auch für Anwendungssoftware verwendet. Ein konkretes Beispiel ist die Überwachung von Vibrationen in industriellen Motoren zur Früherkennung von Anomalien. ITK-Engineering erläutert, wie Rust in IoT-Projekten implementiert werden kann, um Entwicklungsprozesse zu beschleunigen und die Fehleranfälligkeit zu reduzieren. Sie betonen die Bedeutung der Integration von Rust in bestehende Systeme und die Nutzung von Rusts umfangreicher Toolchain.

Business Case und Herausforderungen: Rust bietet Lösungen für häufige Probleme in der Softwareentwicklung, wie Speicherfehler und komplexe Testing-Prozesse. Die Sprache trägt zu kürzeren Entwicklungszyklen bei und erhöht die Effizienz durch schnellere Feedback-Loops und weniger notwendige zusätzliche Tools.

Einhaltung von Industriestandards: Rust unterstützt die Einhaltung von Sicherheitsstandards wie ISO 26262 und MISRA. Institutionen wie die CISA und NSA empfehlen zunehmend die Nutzung speichersicherer Sprachen wie Rust.

Podcast Interview

Hallo Felix und hallo Matthias. Erst mal schön, dass ihr da seid. Felix, ich frag dich mal, wie geht’s dir und wo erreiche ich dich gerade?

Felix

Hi Madeleine, vielen Dank für die Einladung zuerst. Du erreichst mich gerade noch im Homeoffice hier im schönen Wien.

In Wien. Fantastisch. Ja, dann schöne Grüße nach Wien an der Stelle. Und Matthias, wo bist du gerade unterwegs?

Matthias

Auch von mir vielen Dank für die Einladung. Ich habe mich heute bei uns in unserem Besprechungsraum im Speyerer Dom an unserem Hauptstandort in Rülzheim in der Südpfalz eingemietet, damit wir eine gute Gesprächsatmosphäre haben.

Fantastisch, dann schöne Grüße an die Menschen vor Ort. Vielleicht bevor wir den Podcast starten: Ich bin heute ein bisschen aufgeregt. Man ist immer ein bisschen aufgeregt, aber ich glaube, ihr werdet mich heute herausfordern, weil ich klassisch Baumaschinenbau studiert habe, aber keine ITlerin bin. In meiner Vergangenheit habe ich viel mit den Pre-Sales und technischen Funktionen gearbeitet. Deswegen, Felix, du hast ja auch ein bisschen den Hintergrund im Maschinenbau, ne? Habe ich aus den Vorgesprächen erfahren.

Felix

Ne, wir haben zwar die gleiche Alma Mater, wie wir vorher festgestellt haben, aber ich war an der elektrotechnischen Fakultät.

Stimmt, du warst ja Elektrotechnik. Dann seid ihr tatsächlich beide aus der IT. Könnt ihr mal ganz kurz, weil ich finde es persönlich, Vorstellung, Felix, kannst du ein, zwei Worte zu dir sagen, was du genau machst, was du studiert hast und was du jetzt bei ITK machst?

Felix

Gerne. Ich habe Elektrotechnik und Informationstechnik sowohl im Bachelor als auch im Master studiert und dabei einen Fokus auf FPGA-Technologie, vor allem Real-Time-Architektur und Embedded-Systeme gelegt. Bei ITK bin ich in der Real-Time-Architectures-Umgebung eingesetzt und entwickle vor allem C- und C++-Systeme, hardwarenah. Treiber schreiben, Firmware anbinden, Firmware schreiben, sowas in der Richtung.

Sehr schön. Was es damit auf sich hat, da hören wir ja gleich ein bisschen was drüber. Matthias, wie ist es bei dir? Was machst du genau bei ITK und was ist deine Historie?

Matthias

Ich habe Informatik bzw. Computer Science studiert und habe vor über zehn Jahren bei ITK angefangen. Bin in der Softwareentwicklung unterwegs, war früher mehr in der Application Software Ebene, aber die letzten Jahre näher im Embedded Bereich. Bin auch in der gleichen Abteilung wie Felix, in der Real-Time Architectures.

Sehr schön. Für die Leute, die ITK noch nicht kennen, würde ich eine kurze Vorstellung in eigenen Worten machen. ITK Engineering ist eine Tochter der Bosch. Die Branche umfasst Entwicklungsdienstleistungen, Beratung und Softwareentwicklung. Ihr habt insgesamt 1.300 Mitarbeitende und baut branchenübergreifende und kundenspezifische Lösungen. Eure Teams werden tatsächlich auch bei den Kunden eingesetzt. Das heißt, ihr seid vor Ort, um die Projekte mitzuentwickeln. Wir haben auch schon ein paar Folgen gemacht, zum Beispiel Folge 111. Hört da auch mal rein oder abonniert den Podcast und hört die Folge noch mal. Die ist mega spannend, auch mit einem Partner von euch, der Firma SEW Eurodrives. Habe ich das richtig gesagt? Habt ihr noch Ergänzungen?

Matthias

Passt im Wesentlichen. Vielleicht noch eine kurze Ergänzung: Die Abteilung, in der wir unterwegs sind, hat ungefähr 200 Mitarbeiter. Wir sind in Deutschland, Österreich und Spanien vertreten. Du hast schon angedeutet, wir sind vor allem für kundenspezifische, maßgeschneiderte Lösungen zuständig. Wir entwickeln nach dem Whitebox-Verfahren. Das heißt, am Ende der Projekte behält der Kunde die IP auf die Software. Das ist ein Alleinstellungsmerkmal im Vergleich zu anderen.

Und von den Kundensegmenten her, habt ihr vor allem Industriekunden? Kannst du da ein bisschen ausholen, mit wem ihr typischerweise arbeitet?

Matthias

Wir sind stark brancheübergreifend unterwegs. Ein großer Bereich ist Mobility. Wir haben Industrie, wo ich aktuell unterwegs bin. Wir haben Medizintechnik und noch viele andere Bereiche. Unsere Stärke ist die Methodenkompetenz, die man gut von einer Branche auf die andere übertragen kann.

Sehr schön. Jetzt sprechen wir heute über eine sehr spezielle Programmiersprache. Bevor wir dazu kommen, wollte ich nur kurz fragen, wen das eigentlich bei euren Kunden betrifft. Mit welchen Teams arbeitet ihr bei den Kunden zusammen? Ist das klassischerweise Softwareentwicklung?

Matthias

Softwareentwicklung, das heißt, mit Softwareentwicklern und Softwarearchitekten haben wir viel zu tun. Wir haben auch System- und Hardwareentwicklung. Ich bin gerade in einem Projekt, das alles umfasst und genau in diesen Bereichen sind wir unterwegs. Wie du auch gesagt hast, oft in gemeinsamen Teams mit dem Kunden, wo wir gemeinsam am Produkt arbeiten.

Cool. Dann lasst uns doch mal ins Thema eintauchen. Ich bin schon gespannt, mehr über Rust zu erfahren. Vielleicht ordnen wir das Thema kurz ein. Ich kannte es vorher nicht, deswegen interessiert es mich: Rust, was ist das überhaupt?

Felix

Ja, bei Rust handelt es sich um eine noch ziemlich neue Programmiersprache. Die Version 1.0 ist vor neun Jahren an den Markt gegangen bzw. öffentlich geworden. Die erste wirklich öffentliche Version, mit der man arbeiten konnte, ist 2015 herausgekommen. Sie zeichnet sich im Vergleich zu herkömmlichen Programmiersprachen wie C, C++ oder Java, Python vor allem durch Memory Safety und eine sehr gute Ressourcenkontrolle aus. Dabei hat sie eine vergleichbare Performance mit C, C++. Sie ist sehr vielseitig, was für alle Einsatzbereiche ein großer Vorteil ist. Von Embedded bis Networking, Application, Cloud Computing ist grundsätzlich alles mit dieser Sprache möglich. Mit diesen innovativen Ansätzen könnte sie einen grundsätzlichen Paradigmenwechsel einleiten.

Stimmt es, dass die Programmiersprache von Mozilla Research mitentwickelt wurde? Ich habe vorher gelesen, dass es ein Open-Source-Ansatz ist. Stimmt das?

Felix

Die Programmiersprache kommt tatsächlich aus dem Hause Mozilla. Sie wurde von Mozilla gefundet. Es war ein einzelner Entwickler, der bei den herkömmlichen Programmiersprachen einige Dinge verbessern wollte, z.B. Nullpointer etc. Er hat auf eigene Faust angefangen, eine neue Programmiersprache zu entwickeln, die diese grundsätzlichen Themen verbessert. Ende der Nullerjahre hat er damit begonnen. Mozilla hat das Potenzial erkannt und viel davon gefundet.

Viele Programmiersprachen haben heute einen Schwerpunkt oder werden für ein spezielles Ziel entwickelt. Mir fallen da auch allgemeine Programmiersprachen ein wie C, C++, Java, Python und so weiter. Es gibt auch in der Webentwicklung und viele andere. In der mobilen Appentwicklung gibt es Swift und so weiter. Wofür wurde Rust entwickelt? Hat das ein spezielles Ziel gehabt? Kannst du dazu noch was sagen?

Felix

Grundsätzlich wurde Rust entwickelt, um die technischen Probleme anderer Sprachen, wie Garbage Collection und Ressourcenverbrauch, auszumerzen. Das war die Idee. Jede Sprache hat ihre Vorteile. Python ist zum Beispiel sehr ressourcenverbrauchend. Bei C muss man sich an viele Coding-Guidelines wie MISRA halten, um sicher zu programmieren. Man muss viel beachten. C++ ist inzwischen auch 50 Jahre alt. Er wollte das alles auf ein neues Niveau bringen.

Okay, verstehe. Noch eine Frage zum Timing: Warum sprechen wir gerade jetzt darüber, vor allem im Kontext von IoT? Viele, die zuhören, arbeiten vielleicht mit Entwicklungsteams oder sind selbst in einem Team aktiv. Warum ist das jetzt wichtig?

Felix

Es wird immer wichtiger, weil unsere Welt zunehmend elektrifiziert wird und mit digitalen Features ausgestattet ist. Alles wird smarter und softwaredefinierter. Die Anforderungen an diese zunehmend komplexen Systeme wachsen, was Security und funktionale Sicherheit betrifft. Mehr Aufwand geht fürs Testing und die Validierung von Designs drauf, weil die Designs größer und komplexer werden. Daraus resultieren langsamere Entwicklungszyklen.

Ich liebe Beispiele aus der Praxis. Wenn ein Motorenhersteller einen Vibrationssensor an seinen Motor anbringen möchte, um seinem Kunden einen zusätzlichen Service zu bieten, Dinge digital abzurufen, muss das programmiert werden. Es gibt eine Unterscheidung zwischen Embedded Software Entwicklung und Nicht-Embedded Software Entwicklung. Rust kann in verschiedenen Bereichen eingesetzt werden. Bei Embedded Software Entwicklung geht es häufig um Geräte, die speziell für die Steuerung oder den Betrieb von Hardware eingesetzt werden. Zum Beispiel könnte ein industrieller Motor überwacht werden, um Anomalien frühzeitig zu erkennen. Dafür könnte man Rust einsetzen. Ist das richtig?

Felix

Prinzipiell würde ich dir zustimmen. Embedded ist vielfältiger als nur hardwarenah, real-time und Treiber schreiben. Es geht darüber hinaus. Viele Teile der Firmware, die den Transport in höhere Anwendungen betreffen, würde ich auch dazu zählen. Grundsätzlich kann Rust dafür eingesetzt werden.

Okay. Das andere wäre die nicht-embedded Softwareentwicklung. Da greift man nicht direkt von der Software auf die Hardware zu, sondern stellt Daten in übergeordneten Funktionendiensten bereit, z.B. in der Cloud. Das wäre der andere Bereich der nicht-embedded Softwareentwicklung.

Felix

Genau, Cloud Computing wäre da ein Beispiel für.

[12:00] Herausforderungen, Potenziale und Status quo – So sieht der Use Case in der Praxis aus

Ihr habt ja jetzt viel Erfahrung in den ganzen Kundenprojekten auch schon gesammelt und seid ja auch aktiv in den Projekten. Was sind klassische Herausforderungen eurer Kunden, die durch Rust adressiert werden konnten?

Felix

Grundsätzlich habe ich es schon kurz angedeutet. Im Vergleich zu C/C++, das mich in meinem Arbeitsbereich betrifft, liefert C/C++ im Thema Speichersicherheit wenig Garantien. Man muss viel händisch abfangen und verschiedene Tools benutzen, um die Software sicher zu gestalten. Speichersicherheiten sind verantwortlich für die meisten Probleme in der Softwareentwicklung. Man braucht immer mehr Tools, z.B. statische Code-Analyse, was die Entwicklungsumgebung immer komplexer macht. Jeder Entwickler muss sich auf viele Tools einstellen, oft projektabhängig, manchmal von dem einen Hersteller, manchmal von dem anderen Hersteller. Gerade wir, wo wir in verschiedenen Projekten arbeiten und immer mal wieder bei unterschiedlichen Kunden eingesetzt werden haben da quasi häufig das Problem, dass wenn wir in ein neues Projekt kommen und der Kunde spezifische Vorstellungen an das Tooling hat und an die ganze Toolchain, dass man sich dann erst mal komplett einmal einarbeiten muss, sich um die Wartung kümmern muss, dass die ganzen Versionen miteinander kompatibel sind. Das gehört im Endeffekt alles dazu. Da kommt dann Rust auch so ein bisschen zum Einsatz, da das unter anderem von dieser Programmiersprache getackled wird.

Okay, das heißt, wenn du Speichersicherheit meinst, hast du ein Beispiel, z.B. von diesem Motorenhersteller? Was wird da genau gespeichert? Sind das dann Datenbankinformationen?

Felix

Es geht beim Speichermanagement um Arrays oder ähnliches in deinem Code, im RAM. Also jede Art von Daten, aber auch jede Variable.

Okay, verstehe. Und bei den Tools, du hattest Wartung angesprochen. Hast du ein Beispiel, was das für Tools wären?

Felix

Ja, wir benutzen eine ganze Reihe von Tools, angefangen von Jenkins und Conan. Dann gibt es verschiedene Compiler, die du für C, C++ nutzen kannst. Meistens wird GCC benutzt. Für die statische Code-Analyse kannst du CPP-Checker oder SonarQube nehmen. Linter überprüfen den Code, dass er auch schön aussieht.

Das sind Tools, die die Arbeit vereinfachen oder bestimmte Bibliotheken integrieren. Okay, habe ich verstanden. Wie kann der Einsatz von Rust bei Kundenprojekten konkret dazu beitragen, dass die Entwicklungsprozesse verbessert oder modernisiert werden, insbesondere im IoT-Bereich?

Matthias

Felix hat es schon angedeutet, dass das Memory Management von Rust bzw. speichersichere Sprachen im Allgemeinen einen Paradigmenwechsel im Vergleich zu C und C++ darstellen. Viele Fehler, die bei C, C++ erst im Nachgang, vielleicht durch die statische Code-Analyse oder im realen Einsatz entdeckt werden, werden durch das Design der Sprache schon im Vorfeld vermieden. Das betrifft vor allem kritische Speicherfehler. Ein großer Vorteil ist, dass die Sprache einen Großteil der MISRA-Regeln, dem bekanntesten Programmierstandard im Automotive-Bereich, bereits durch das Design abdeckt. Dadurch wird die Einhaltung des Standards vereinfacht. Da Rust dieses Speichermodell hat, das bereits im Compiler geprüft wird, werden viele Fehler früher entdeckt und vermieden, weil der Code gar nicht gebaut werden kann, wenn Fehler vorhanden sind. Dies führt zu einer schnelleren Feedback-Schleife. Was man auch dazu sagen muss, ist, dass die Qualität der Fehlermeldungen, die man vom Rust-Compiler bekommt, nicht mit denen von C und C++ vergleichbar ist.

Und der Compiler, nur für mein Verständnis, ist im Endeffekt ein Softwareprogramm, das den Quellcode oder die Programmiersprache übersetzt. Könnte man das so sagen?

Matthias

Genau.

Okay, verstanden. Gibt es noch weitere Vorteile, die Rust gegenüber älteren Programmiersprachen hat? Ihr habt schon einige angesprochen, aber gibt es noch weitere wichtige Vorteile in den Projekten?

Matthias

Was man noch erwähnen kann: Felix hat vorhin gesagt, dass man bei C viele zusätzliche Tools braucht. Da bei Rust vieles integriert ist, vereinfacht das die Toolchain und damit auch das Aufsetzen und die Wartung der Toolchain. Das ist ein weiterer Vorteil durch den Einsatz von Rust.

Kannst du kurz erklären, was eine Toolchain ist?

Matthias

Eine Toolchain ist die komplette Umgebung, die man braucht, um Software zu entwickeln. Dazu gehört ein Compiler, mit dem man lokal arbeitet, ein Build-Server wie Jenkins oder GitLab CI/CD, Test-Frameworks, Linter, statische Code-Analyse-Tools und Software für Integrationstests. All diese Dinge.

Also eine Sammlung an Software-Entwicklungstools. Okay. Ihr habt den Unterschied zu C++ angesprochen. Viele arbeiten noch damit. Könnt ihr den Unterschied zu C++ in der Praxis herausarbeiten?

Felix

Rust wächst auf jeden Fall, vor allem in den Staaten und in Deutschland nimmt die Zahl der Rust-Entwickler stark zu. Seit ein paar Jahren ist Rust die meistgeliebte Sprache auf Stack Overflow. Der große Unterschied ist die Speicherverwaltung. Rust bringt das sogenannte Ownership-Modell mit, wobei jede Variable einem Besitzer gehört. Besitzer können Funktionen, Methoden oder Loops sein, also verschiedene Instanzen oder Scopes. Wenn eine Variable out of scope geht, wird sie automatisch gedroppt und der Speicher freigegeben. Es gibt kein Garbage Collection in Rust. Der Zugriff von anderen Funktionen wird über das Borrowing, also das Leihen der Funktion, geregelt. Grundsätzlich kann nur der Besitzer in die Variable schreiben, es sei denn, es wird im Code explizit darauf hingewiesen, dass die Variable ausgeliehen wird und erst dann kann sie auch verändert werden. Es kann nur einen Writer gleichzeitig, aber mehrere Reader geben.

Vielleicht nur für das Protokoll: Stack Overflow ist eine sehr bekannte Community und ein Werkzeug für Entwickler, wo man Fragen stellen, Antworten bekommen und voneinander lernen kann. Für die, die es noch nie gehört haben. Können wir noch mal auf den Business-Case eingehen? Wie hat der Einsatz von Rust in Projekten, z.B. bei einem Motorhersteller, der Vibrationssensoren programmieren möchte, zur spürbaren Verbesserung geführt? Vom Business-Case her betrachtet.

Matthias

Was eine große Rolle spielt, ist die Softwareentwicklung für den Markt, vor allem im Automotive-Bereich, wo die Anforderungen sehr hoch sind, weil es um Menschenleben geht. Viele Fehler müssen ausgeschlossen werden. Dafür kommt im Automotive-Bereich z.B. MISRA zum Einsatz. Die Erfüllung der MISRA-Konformität ist ein enormer Aufwand. Jede Abweichung muss durch einen besonderen Prozess, gereviewt und begründet werden. Wenn wir Rust einsetzen, wo MISRA größtenteils durch das Design der Sprache abgedeckt ist, kann man große Aufwände sparen. Wenn etwas in Rust kompiliert, hat man durch die Prüfungen im Compiler eine viel höhere Sicherheit als bei vergleichbarer Software in C und C++, weil dort viele Checks und Prüfungen noch nicht integriert sind.

Hast du ein Beispiel aus der Praxis, was eine MISRA-Anforderung sein kann? Ist das vor allem auf den Softwarecode bezogen? Nur, damit man das versteht. MISRA ist ja eine Organisation, die diese Richtlinien aufstellt, oder?

Matthias

Ein großes Thema ist z.B. das Arbeiten mit Pointern, also Zeigern, was in C eine der gängigsten Möglichkeiten ist, im Embedded-Bereich an vielen Stellen zu arbeiten. MISRA schränkt das sehr stark ein, was große Probleme bei der Erfüllung macht. Rust hat ein anderes Konzept für das Speichermanagement. Zeiger gibt es in Rust noch, z.B. wenn man Register für eine Hardware im Embedded-Bereich beschreibt, aber in anderen Bereichen braucht man sie weniger und kann dadurch viel Aufwand einsparen.

Ja, und Register für eine Hardware beschreiben wir im Embedded Software-Entwicklungsbereich, z.B. bei einem Vibrationssensor, wo die Software die Vibrationen abruft. Das meinst du wahrscheinlich, oder?

Matthias

Ich meine z.B., wenn man eine Peripherie ansteuert, hat man eine Schnittstelle. Ein einfaches Beispiel: Wir haben einen digitalen Ausgang, einen GPIO, und der wird über ein Register, ein Peripherieregister, gesteuert. Da gibt es ein Bit, und wenn man es setzt oder nicht setzt, wird der entsprechende Ausgang geschaltet.

Jetzt haben wir über die Verbesserung in den Projekten gesprochen. Wie sieht das vom Business-Case her aus? Es geht ja am Ende auch um Kosteneinsparungen, wenn man einen Wechsel durchführen möchte. Welche Kosteneinsparungen kann man erwarten, wenn man auf Rust umsteigt?

Felix

Man hat verschiedene und vielseitige Kosteneinsparungen, wenn man mit Rust entwickelt. Neben den Sicherheiten, die Rust grundsätzlich mitbringt, hat man eine Steigerung der Produktivität, was verschiedene Studien und Stackoverflow-Befragungen von tausenden Entwicklern gezeigt haben. Der wichtigste Punkt ist, dass diese Sprache viele Sicherheiten beim Speichermanagement mitbringt, wodurch weniger Fehler in späteren Projektphasen gefunden werden. Wer mit diesem Kostenmodell vertraut ist, weiß, dass die Kosten für Fehler exponentiell steigen. Was am Anfang 5 Euro kostet, kann nach der Auslieferung 50.000 Euro kosten, wenn man Produkte zurückrufen und Fehler beheben muss. Da die meisten Fehler vom Compiler zur Compile-Zeit abgefangen werden, minimiert man späte Fehler.

Wie unterstützt Rust weiterhin die Einhaltung von Industriestandards? Gibt es neben MISRA noch weitere Industriestandards oder Anforderungen, die diese Programmiersprache erfüllt?

Matthias

Erfüllen würde ich nicht direkt sagen, weil Rust nicht MISRA erfüllt. Es ist eher so, dass viele Dinge, die MISRA fordert, in Rust nicht möglich sind und deshalb wegfallen. Aber wo es noch vielleicht zum Trage kommt, ich meine, Im Moment ist das Thema speichersichere Sprache ein großes Thema. Da gibt es auch nicht nur Rust, muss man der Vollständigkeit halber sagen. Im Moment ist das Thema speichersichere Sprache ein großes Thema. Es gibt Institutionen, die inzwischen die Verwendung von speichersicheren Sprachen empfehlen. Im Moment ist es eine Empfehlung. Sollte das irgendwann mal eine Forderung werden, hätten wir andere Voraussetzungen.

[24:48] Lösungen, Angebote und Services – Ein Blick auf die eingesetzten Technologien

Wenn ich das umsetzen möchte, welche speziellen Features oder Tools innerhalb von Rust oder der Toolchain brauche ich, um solche Projekte umzusetzen? Könnt ihr dazu noch was sagen?

Felix

Die Rust Toolchain ist zum Glück sehr einfach gehalten und enthält viele der Features, die sonst durch verschiedene Tools abgedeckt werden. Vor allem hat man den Compiler und Cargo. Cargo hat fast alle wichtigen Features dabei: statische Code-Analyse, kein eigenes Paketmanagement mehr mit Conan oder CMake, und Clang-Format ist abgedeckt. Das ist dafür da, den Code übersichtlich zu halten und Coding Guidelines einzuhalten. Doxygen ist komplett mit Rust-Doc abgedeckt. Die statische Code-Analyse ist kaum nötig, weil viel im Compiler abgefangen wird. Der große Vorteil ist, dass alle Tools aus einem Guss sind, also aufeinander abgestimmt. Man muss nicht mehr schauen, dass man die richtigen Versionen installiert hat und dass sie kompatibel sind. Man hat nur noch einen Anbieter und ein Toolpaket, wo alles Wichtige für die Entwicklung schon drinsteckt.

Ja, verstehe. Cargo ist dann das Paketverwaltungssystem, was wie ein Tool für Rust funktioniert, richtig? Ihr seid in den Projekten unterwegs, auch mit den Software-Teams. Wie gehen die Unternehmen vor, die Rust in ihre bestehende Systemlandschaft integrieren oder migrieren wollen? Wie macht man das?

Matthias

Guter Punkt, weil die meisten Projekte beginnen nicht auf der grünen Wiese, sondern es gibt schon bestehende Legacy-Software, die erweitert oder erneuert werden soll. Diese Codebasis ist oft groß. Alles neu in Rust zu machen, ist keine Option. Die Idee ist, auf Basis von Interoperabilität neue Features oder besonders kritische Elemente in der Software auszutauschen und zu erneuern. Rust bietet ein Foreign Function Interface zu C an, und auf Basis dieser Schnittstelle kann man Rust in Kombination mit C oder C++ verwenden. Es gibt viele Tools oder Crates zur Einbindung, die den Aufwand der Schnittstellen-Implementierung zu C vereinfachen, indem sie diese automatisch generieren. Damit ist es einfach möglich, neue oder bestehende kritische Teile zu ersetzen. Das sehen wir z.B. beim Linux-Kernel. Rust ist neben C für den Linux-Kernel erlaubt, und Erweiterungen können in Rust geschrieben und integriert werden.

Ihr habt einiges an Erfahrungswerten aus den Projekten gewonnen. Gibt es Best Practices oder Learnings, die ihr den Hörern mitgeben wollt? Empfehlungen oder Fallstricke, worauf man achten sollte?

Matthias

Gern. Rust ist eine recht junge Programmiersprache, es gibt also noch Optimierungspotenzial. Aber es gibt viele vielversprechende Ansätze, die schon jetzt Vorteile bringen. Nach unserer Einschätzung überwiegen die vorhandenen Vorteile die noch bestehenden Defizite. Perspektivisch gesehen könnten die Defizite noch ausgemerzt oder gemindert werden, was den Einsatz von Rust lohnenswerter macht. Ein wichtiger Punkt ist, Rust überhaupt einsetzen zu können. Es gibt zertifizierte Toolchains von Anbietern wie Ferrocene, die Rust im Wesentlichen treiben, aber auch von unserem ITK-Partner HEITEC gibt es eine Toolchain mit Compiler, die man nutzen kann. Das ist eine Grundvoraussetzung, um die Sprache im sicherheitskritischen Bereich verwenden zu dürfen.

Felix

Man kann noch ergänzen, dass Rust eine sehr junge Sprache ist. Dabei muss man im Hinterkopf behalten, dass die Community und die Standardbibliothek von Rust täglich wachsen und ausgebaut werden. Es gibt viele Entwickler, die sehr zufrieden mit Rust sind. Google hat 2022 eine Studie mit 1.000 Entwicklern aus anderen Programmiersprachen wie C, Python, Java und Go durchgeführt. Sie wurden in Rust ins kalte Wasser geworfen, und zwei Drittel der Entwickler gaben an, dass sie sich in unter zwei Monaten sicher im Programmieren mit Rust fühlten. Sie meinten, dass die Software eher das macht, was sie soll, im Vergleich zu den Programmiersprachen, die sie vorher benutzt haben.

Vielen Dank, dass du es angesprochen hast. Wenn ihr das noch nicht kennt oder ausprobieren wollt, schaut euch das mal an. Felix, kannst du mir die Studie im Nachgang schicken? Dann packe ich sie in die Show Notes. Was muss ich machen, wenn ich das umsetzen will? Ich würde eure Kontaktdaten in den Show Notes verlinken. Habt ihr noch weitere Links oder Informationen?

Felix

Ich kann das offizielle Rust Wiki empfehlen. Wir können dir den Link weitergeben, dann kannst du ihn in die Show Notes packen. Im Rust Book wird gut erklärt, wie man mit Rust umgeht und wie die einzelnen Teile funktionieren, z.B. Borrowing und Referenzen. Das kann ich empfehlen.

Cool. Sehr schön. Ich habe noch weitere Fragen, aber das würde den Podcast heute sprengen. Wir wollten auch mitgeben, was Rust ist, welche Vorteile es bietet und dazu aufrufen, sich damit zu beschäftigen. Es ist eine wichtige Programmiersprache, nicht nur für jetzt, sondern auch für die Zukunft, sowohl für die Embedded Software Entwicklung als auch für die Nicht-Embedded Software Entwicklung. Herzlichen Dank, dass ihr dabei wart und euer Wissen geteilt habt. Wenn ihr Fragen habt, richtet euch an Felix oder Matthias. Von meiner Seite aus herzlichen Dank und das letzte Wort geht an euch.

Matthias

Vielen Dank für die Einladung. Rust ist noch relativ jung. Vielleicht haben wir in ein paar Jahren die Möglichkeit, uns wiederzusehen oder zu hören und über die Entwicklung von Rust zu sprechen. Das würde mich persönlich freuen.

Felix

Da würde ich mich anschließen, das würde mich auch sehr freuen. Wie heute würden wir uns dann noch mal über eine Einladung freuen. Es hat sehr viel Spaß gemacht. Vielen lieben Dank.

Vielen Dank an euch. Einladung folgt gerne mit einem Update, wie Rust in der Praxis Anwendung findet. Vielen Dank und noch eine schöne Restwoche. Macht’s gut. Ciao!

Felix

Ciao!

Matthias

Ciao!

Für Rückfragen stehe ich Ihnen gern zur Verfügung.

Questions? Contact Madeleine Mickeleit

Ing. Madeleine Mickeleit

Host & Geschäftsführerin
IoT Use Case Podcast