WebAssembly-Laufzeitumgebung Wasmtime gilt mit Version 1.0 als stabil

Die in Rust geschriebene Runtime zum Ausführen von WebAssembly-Anwendungen außerhalb des Browsers ist laut Bytecode Alliance reif für den produktiven Einsatz.

Lesezeit: 4 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 16 Beiträge
Digital,Contents,Concept.,Social,Networking,Service.,Streaming,Video.,Nft.,Non-fungible

(Bild: metamorworks / Shutterstock.com)

Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Die Bytecode Alliance hat Wasmtime 1.0 veröffentlicht. Mit dem Erreichen der ersten Hauptversion gilt die Laufzeitumgebung für WebAssembly-Anwendungen als reif für den Einsatz im produktiven Betrieb. Laut dem Blogbeitrag zur Freigabe ist die Runtime technisch bereits seit über einem Jahr stabil, aber die Initiative wollte sie zunächst bei einigen ihrer Mitglieder testen. Demnach läuft Wasmtime unter anderem bei Fastly seit sechs, bei Microsoft seit elf und bei Shopify seit vierzehn Monaten im produktiven Einsatz.

Die ursprünglich bei Mozilla gestartete und in Rust geschriebene Runtime ermöglicht das Ausführen von WebAssembly-Code außerhalb des Browsers. WebAssembly, das 2019 vom World Wide Web Consortium (W3C) zum Standard erklärt wurde, definiert Bytecode zum Ausführen von Anwendungen vor allem im Browser. Es zielt vor allem auf (Web)-Anwendungen, bei denen die Performance eine große Rolle spielt. Für diverse Sprachen wie C, C++, Rust und Go existieren Compiler.

Die Runtime Wasmtime deckt Anwendungen außerhalb des Browsers ab. Als ein Musterbeispiel gelten Microservices-Anwendungen und Serverless Computing. In dem Bereich zeichnet sich die Laufzeitumgebung durch geringe Startzeiten aus. Laut der Bytecode Alliance benötigt eine WebAssembly-Instanz lediglich 5 Mikrosekunden zum Starten.

Durch die Sandbox hat Code von Drittanbietern keinen Zugriff auf Systemressourcen wie den Speicher oder das Dateisystem.

(Bild: Bytecode Alliance)

Da alle WebAssembly-Anwendungen auf der Runtime standardmäßig in einer Sandbox laufen, bietet sie sich zudem als Plug-in-Plattform an, um potenziell unsicheren externen Code auszuführen. Daneben kann Wasmtime WebAssembly-basierte User Defined Functions (UDFs) für Datenbanken ausführen, womit Entwicklerinnen und Entwicklern ein breites Spektrum an Programmiersprachen zum Schreiben der Datenbankoperationen offensteht.

Wasmtime ist in Rust geschrieben ist und nutzt somit das Memory-Safety-Konzept der Sprache. Damit vermeidet sie weitgehend Speicherzuweisungsfehler, die nach wie vor die häufigste Ursache für Schwachstellen in Code sind. Da jedoch Rust in anderen Bereichen durchaus angreifbar ist, wie auch die Rust Foundation kürzlich erklärt hat, setzt die Bytecode Alliance auf zusätzliche Sicherheitsmaßnahmen.

Zum einen prüft das Wasmtime-Team mit dem Unterbefehl cargo vet die externen Dependencies. Das Tool untersucht, ob zu den Abhängigkeiten die benötigten Audits existieren. Damit will das Team das Risiko von Angriffen auf die Software Supply Chain verringern.

Darüber hinaus setzt das Team auf Fuzzing, um Fehler aufzuspüren, die bei der klassischen statischen und dynamischen Codeanalyse durchrutschen. Für sicherheitskritische Codeteile setzt das Team zudem auf formale Verifikation, um zu beweisen, dass diese Abschnitte tatsächlich so arbeiten wie sie sollen.

Neben der Security steht die Startzeit und Performance im Fokus von Wasmtime. Die Runtime setzt unter anderem auf Lazy Initialisiation: Beim Laden eines Moduls initialisiert sie nur die Funktionstabellen der direkt verwendeten Funktionen. Das verkürzt zum einen die Startzeit und zum anderen entfällt das Initialisieren für ungenutzte Funktionen vollständig. Daneben nutzt Wasmtime wohl einige Speicheroptimierungen, um möglichst viel Speicher zwischen Instanzen zu teilen. Eine neue Speicherseite fordert die Laufzeit erst an, wenn eine der Instanzen die geteilten Daten ändert.

Für die allgemeine Performance setzt die Laufzeitumgebung auf Cranelift, der den Bytecode in Maschinencode übersetzt. Der Open-Source-Codegenerator ist ebenfalls ein Projekt der Bytecode Alliance.

Wasmtime entstand ursprünglich bei Mozilla, und nach den Masenentlassungen bei dem Unternehmen im Jahr 2020 wechselte das gesamte WebAssembly-Team und damit auch die Laufzeitumgebung von Mozilla zu Fastly.

Die Bytecode Alliance war ein Jahr zuvor als gemeinsame Initiative von Mozilla, Fastly und Red Hat entstanden. Erklärtes Ziel der Initiative ist die Standardisierung der auf WebAssembly aufsetzenden Softwareentwicklung. Außerdem steht die Security für das Ausführen von wasm-Anwendungen im Fokus der Bytecode Alliance.

Für die Zukunft plant die Bytecode Alliance monatliche Releases von Wasmtime, die jeweils als neue Hauptversion erscheinen. Damit sind durchaus jeden Monat Inkompatibilitäten möglich, da nach dem Prinzip der semantischen Versionierung eine neue Hauptversion potenziell Breaking Changes mitbringt. Letztere sollen laut der Dokumentation allerdings nicht zu häufig auftreten. Bestandteil der Releases ist die Rust-Crate, also das Package, wasmtime und das zugehörige Kommandozeilentool im wasmtime-cli-Paket sowie die zugehörige C-API für Wasmtime.

Laut der Ankündigung der Bytecode Alliance gingen dem offiziellen Release mehrere Tests im produktiven Einsatz voraus.

(Bild: Bytecode Alliance)

Weitere Details lassen sich der offiziellen Ankündigung der Bytecode Alliance entnehmen. Der Sourcecode findet sich auf GitHub.

(rme)