Mozilla hat ein Interface entwickelt, um die Verwendung von WebAssembly (Wasm) außerhalb des Browsers zu standardisieren. Das noch experimentelle WebAssembly System Interface (WASI) soll Wasm eine Plattform bieten, um plattform-unabhängig zu laufen. Dabei sollen die Vorteile von Wasm erhalten bleiben: Portabilität und Sicherheit. Daneben stehen auch schon ein Compiler und eine Laufzeit mit WASI-Support in Form von Lucet zur Verfügung.
WASI
WebAssembly hat als Assembly-Sprache für eine virtuelle Maschine noch kein System Interface. An dieser Stelle setzt Mozilla an: WASI, ein Interface für ein virtuelles Betriebssystem, soll einen neuen Standard für Wasm außerhalb des Browsers darstellen. Es liegt noch in einem experimentellen Zustand vor. „Entwickler beginnen, WebAssembly außerhalb des Browsers zu betreiben, weil es eine schnelle, skalierbare, sichere Art darstellt, den gleichen Code über alle Maschinen hinweg auszuführen“, so die Mozilla-Mitarbeiterin Lin Clark auf Mozilla Hacks.
Dabei soll WASI die Schlüsselfunktionen von Wasm beibehalten: Portabilität des Codes sowie Sicherheit innerhalb und außerhalb des Browsers. Der WASI-Standard soll zum sicheren Low-Level-Interfacing von WebAssembly-Programmen mit dem Dateisystem, Netzwerken und anderen Systemfunktionen beitragen – sei es in der Cloud, auf Edge-Geräten oder Browsern sowie nativ auf Smartphone oder Laptop. Mozilla führt die Portabilitäts- und Sicherheitsfunktionen im Video weiter aus:
Derzeit gibt es drei Implementierungen von WASI:
- wasmtime, Mozillas WebAssembly-Laufzeit
- einen Browser-Polyfill
- Lucet, Fastlys WebAssembly-Laufzeit
Lucet
Lucet ist ein von Fastly Open Source gestellter nativer WebAssembly-Compiler und eine native WebAssembly-Laufzeit. In Lucet ist Laufzeit-Support für WASI enthalten. Fastly zeigt in einer Demo ein entsprechendes Codebeispiel zur Anwendung nach WASI-Standard. Darin wird ein in C geschriebenes Programm durch Clang zu WebAssembly und dann mithilfe des WASI-konfigurierten Lucet-Compilers zu nativem Code kompiliert. Durch die WASI-konfigurierte Lucet-Laufzeit wird schließlich der native Code ausgeführt.
Die Unterstützung von WASI wurde durch eine mehrjährige Zusammenarbeit von Fastly und Mozilla ermöglicht. Lucet ist auf Ahead-of-Time (AOT) Compilation ausgelegt, was Vorteile gegenüber der JIT (Just-in-Time) Compilation in Browser Engines bieten soll. Die Wasm-Laufzeit Lucet soll dazu dienen, nicht vertrauenswürdige WebAssembly-Programme innerhalb einer Anwendung sicher ausführen zu können.
WebAssembly
WebAssembly oder Wasm ist ein vom World Wide Web Consortium (W3C) entwickelter Bytecode für eine virtuelle Maschine, der innerhalb einer Sandbox läuft. Wasm wird von allen gängigen Desktop- und mobilen Browsern unterstützt. C, C++, Rust und Go kompilieren nativ nach WebAssembly, und durch das experimentelle Projekt Blazor auch C#.
Weitere Informationen zu WASI bietet der Eintrag auf Mozilla Hacks. Fastly hält weitere Details zu Lucet bereit.