Rust bei Microsoft (oder die Erstellung von Security Daemon Azure IoT Edge)



Anmerkung des Übersetzers: Rust ist eine relativ junge Programmiersprache, und praktische Beispiele sind in dieser Entwicklungsphase immer interessant. Es ist bekannt, dass Intel, Dropbox, Amazon, Facebook, Google und andere Rust in ihren Projekten verwenden. Es war über die Verwendung von Rust in einem Projekt von Microsoft bekannt, aber es gab keine Details, und dies ist wahrscheinlich die erste offizielle Veröffentlichung über die Verwendung von Rust bei Microsoft. (Technische Details für das Produkt selbst werden "wie besehen" bereitgestellt, Details auf der Website des Unternehmens angeben)

Azure IoT Edge ist ein plattformübergreifendes Open-Source-Softwareprojekt, das vom Azure IoT-Entwicklungsteam bei Microsoft erstellt wurde. Azure IoT Edge “ist ein Internet of Things-Dienst, der auf dem Internet of Things Center basiert. Dieser Service richtet sich an Kunden, die Daten nicht in der Cloud, sondern auf Edge-Geräten analysieren müssen. Durch die Verlagerung eines Teils der Arbeitslast in den Grenzbereich verbringen Geräte weniger Zeit damit, Nachrichten an die Cloud zu senden und schneller auf Ereignisse zu reagieren. “ [entnommen aus der offiziellen russischsprachigen Dokumentation (1) - ca. Übersetzer]

In diesem Beitrag werden einige der Gründe erläutert, warum wir Rust als Programmiersprache für die Implementierung der Security Daemon-Komponente im Produkt ausgewählt haben.

Security Daemon lädt die Azure IoT Edge-Laufzeit. Es fungiert als Vermittler der Kommunikation zwischen der Azure IoT Edge-Laufzeit und vielen Hostdiensten wie der Container-Laufzeit und kryptografischen Hardwaregeräten. Security Security Modules (HSM) und Trusted Platform Modules (TPM).

Technische Stapelauswahl für Security Daemon


Als wir mit der Arbeit an Security Daemon (im Folgenden als Edgelet bezeichnet ) begannen, identifizierten wir die folgenden Hauptentwurfsziele:
  • edgelet muss eine native Komponente sein, für die keine Laufzeit erforderlich ist, z. B. die .NET-CLR.
  • Da das Edgelet als Kanal für den Zugriff auf die HSM / TPM-Geräte auf dem Gerät dient, muss es sicher sein.
  • edgelet kommuniziert mit dem HSM / TPM-Gerät über die C-Anwendungs-Binärschnittstelle (ABI). Daher sollte das Laden allgemeiner Objekte / DLLs und das Aufrufen von C-Funktionen einfach sein.

Entsprechend diesen Punkten mussten wir eine der folgenden Programmiersprachen auswählen: C oder C ++ oder Rust, das in nativen Code kompiliert wird. Die mangelnde Bereitschaft, den Aufwand für den Müllsammler zu tragen, führte dazu, dass Go nicht für uns geeignet war. Aufgrund der Sicherheitsanforderungen des Daemons wollten wir Speicher- und Parallelitätsfehler vermeiden. Wie sich herausstellte, ist Rust angesichts dieser Einschränkungen perfekt für uns. In einer früheren Veröffentlichung (2) in diesem Blog [dh dem Microsoft Security Response Center-Blog - Übersetzung] wurden die Vorteile der Auswahl von Rust als Programmiersprache berücksichtigt.

Was hat uns gefallen?


Bevor wir Azure IoT Edge für die Öffentlichkeit freigegeben haben, haben wir einen externen Sicherheitsanbieter beauftragt, Penetrationssoftware zu testen. Die Tatsache, dass sie keine Probleme mit der Sicherheit der Codebasis in Rust fanden, war für uns eine Bestätigung der Richtigkeit unserer Wahl. Von Anfang an haben wir beschlossen, dass der Compiler alle Warnungen als Fehler behandelt, einschließlich der von clippy verifizierten Fehler. Unser kontinuierliches Integrationssystem lehnt einen Pool von Anforderungen ab, die rustfmt nicht bestehen, wodurch eine konsistente Formatierung des Codes in der gesamten Codebasis sichergestellt wird.

Der Prozess der Aktualisierung des Rust and Cargo-Compilers [Montage- und Paketverwaltungssystem - ca. Übersetzer] arbeiten nahtlos in Azure IoT Edge. Ein Upgrade auf eine neue Version des Compilers ist fast immer eine schmerzlose Aktion.

Akzeptanz von Rost


Der nächste Schritt war das Erlernen der Sprache. Im Vergleich zu anderen gängigen Programmiersprachen hat Rust eine ziemlich hohe Einstiegsschwelle, und wir befürchteten, welche Auswirkungen diese Studie auf die Projektlaufzeit haben würde. Unser Team hatte erfahrene Entwickler in C, C ++, C # und Java, und zum Glück gab es auch einige Entwickler, die sich sehr für Rust begeisterten!

Wir haben Rust-Workshops entwickelt, in denen wir ein Team zu den Teilen der Sprache geleitet haben, die unserer Erfahrung nach ziemlich schwer zu verstehen waren. Dieser Zeitaufwand erwies sich als sehr nützlich. Wir fanden heraus, dass das Erlernen einer Sprache kein so großes Problem war, wie wir es uns vorgestellt hatten.

Fast jedes Mitglied des Teams leistete 4-6 Wochen lang einen nicht trivialen Beitrag zum Quellcode in Rust.

Schwierigkeiten


Trotz der Tatsache, dass unsere ersten Erfahrungen mit der Einführung einer Produktion mit einem Rust-basierten Produkt bei Microsoft völlig erfolgreich waren, hätten wir einige schwierige Punkte festgestellt:
  • Das Rust-Ökosystem ist im Vergleich zu einigen anderen etablierteren Sprachen noch relativ neu. Dies bedeutete, dass wir oft Teile der Infrastruktur erstellen mussten, die wir sonst wahrscheinlich nicht erstellen müssten.
  • Das Parsen von Compiler-Fehlermeldungen erwies sich manchmal als zu kompliziert, insbesondere wenn mit Code gearbeitet wurde, der häufig Kombinatoren aus Tokio (3) [einem asynchronen Framework für Rust] Futures oder std :: iter :: Iterator verwendete.
  • Teams, die es gewohnt sind, C # -Bearbeitungs- und Debugging-Tools sowie Java-Code vollständig zu unterstützen, fanden in Rust nicht dieselbe Unterstützung. Die VS Code Rust RLS-Erweiterung war in der Praxis instabil.
  • Herausforderungen in der Tokio Future Chain Analysis
  • Manchmal war es nicht einfach, die komplexen Typen zu sortieren, die in Tokio Future-Kombinatorketten unvermeidlich sind.


Was weiter


Hierbei ist zu beachten, dass Azure IoT vollständig in die Programmiersprache Rust integriert ist. Seit der Veröffentlichung von Azure IoT Edge hat die Verwendung von Rust nur zugenommen. Viele der Cloud-Service-Projekte, an denen derzeit aktiv gearbeitet wird, sind in Rust geschrieben. Die von Rust angebotene Dreifaltigkeit (Speichersicherheit, Sicherheit von Datenrennen und Leistung) ist perfekt für Azure IoT. Wir hoffen, dass wir in Zukunft noch etwas dazu zu sagen haben!

Raj Wengalil, General Manager, SWE, IoT-Plattform

Referenzen


(1) docs.microsoft.com/en-us/azure/iot-edge
(2) msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming
(3) tokio.rs

Von einem Übersetzer: Vielen Dank für die Hilfe bei der Übersetzung von Legatus88 , Funkill , der russischsprachigen Telegrammgruppe Rust (@rustlang_ru), KDPV von hier .

Source: https://habr.com/ru/post/de469961/


All Articles