- WebAssembly (Wasm) wird weiterhin als Kerntechnologie in verschiedenen realen Produkten eingesetzt und spielt eine wichtige Rolle in Game-Engines, Design-Tools und Web-Containern
- Die Sprache selbst besitzt eine Struktur, die sich effizient auf Hardware abbilden lässt, und wurde mit Fokus auf Sicherheit und Portabilität entworfen
- Das Sicherheitsmodell folgt dem Prinzip „deny-by-default“ und ermöglicht Isolierung auf Prozessebene sowie hohe Ausführungsgeschwindigkeit
- Durch ein Plugin-Ökosystem und Cross-Language-Unterstützung wird Wasm in vielen Umgebungen genutzt, doch eine Verbreitung auf dem Niveau eines Ersatzes für das gesamte Browser-Ökosystem gibt es bislang nicht
- Derzeit ist WebAssembly tief auf Bibliotheks- und Runtime-Ebene integriert; zugleich schreiten Standardisierung und Funktionserweiterungen schnell voran
Praxisbeispiele
- WebAssembly übernimmt Kernfunktionen in Godot, Figma, Stackblitz, Squoosh.app, Zellij, Ruffle usw.
- Godot nutzt es für Web-Game-Builds, Figma zur Umwandlung von C++-Code in eine Form, die im Browser ausgeführt werden kann
- Stackblitz verwendet Wasm für Web-Container, Ruffle als Flash-Emulator
- Allerdings sind große Websites, die vollständig auf Wasm basieren, selten; meist wird es für einzelne Funktionsbereiche eingesetzt
Definition und Geschwindigkeit von WebAssembly
- WebAssembly ist eine Sprache, deren Geschwindigkeit nicht eigenständig definiert ist, sondern von der Engine-Leistung abhängt
- Wie bei JavaScript bestimmen Runtime-Engines (V8, SpiderMonkey usw.) die Ausführungsgeschwindigkeit
- WebAssembly besitzt eine Struktur, die sich effizient auf moderne Hardware abbilden lässt, und kann sowohl kompiliert als auch interpretiert werden
Struktur für effizientes Mapping
- Wasm ist ein Bytecode nahe an Assemblersprache, der sich für die meisten Hardwareplattformen ohne Verluste kompilieren lässt
- WAT (WebAssembly Text) ist die Textdarstellung von Wasm und lässt sich nahezu 1:1 umwandeln
- Ähnlich wie JVM-Bytecode, aber mit kleiner API und starken Sicherheitsgarantien
- Speicherzugriffe sind explizit, und es können nur Ressourcen verwendet werden, die von der Host-Umgebung erlaubt wurden
Wasm als Compile-Target
- Viele Sprachen wie Rust, C, Zig, Go, Kotlin, Java, C# lassen sich nach Wasm kompilieren
- Auch interpretierte Sprachen wie Python, PHP, Ruby können als Wasm-Builds ausgeführt werden
- Browser enthalten standardmäßig eine Wasm-Engine; außerdem gibt es eigenständige Runtimes wie Wasmtime, WasmEdge, Wasmer
- Ein einzelnes Wasm-Artefakt kann hardwareunabhängig ausgeführt werden
Sicherheitsarchitektur und Einsatz
- WebAssembly verwendet ein „deny-by-default“-Sicherheitsmodell; externer Zugriff ist nur über explizite Imports erlaubt
- Verborgener Control-Flow-Stack, linearer Speicher und eingeschränkter Befehlssatz sorgen für starke Isolierung
- Cloudflare isoliert die Ausführung von Wasm-basiertem Code mithilfe von V8-Isolates, Fermyon bietet Startzeiten im Submillisekundenbereich
- Ruffle stellt Flash-Inhalte sicher wieder her, Pyodide führt Python in Wasm aus, Figma führt Plugins mit einem Wasm-basierten QuickJS aus
Portabilität und Embedding
- Wasm-Runtimes sind leichtgewichtig, und Zellij, Envoy, Lapce setzen Wasm für ihre Plugin-Systeme ein
- Selbst in Umgebungen mit JavaScript-Engine können verschiedene Wasm-Bibliotheken für Bildverarbeitung, OCR, Physik-Engines, Rendering, Media-Toolkits, Datenbanken und Parser genutzt werden
- In den meisten Fällen merken Nutzer gar nicht, dass Wasm verwendet wird, da es transparent innerhalb von Bibliotheken arbeitet
Neubewertung von Geschwindigkeit und Größe
- Browser führen Wasm über dieselbe Pipeline wie JS aus; durch die Engine-Architektur bestehen Leistungsgrenzen
- Je nach Typsystem der Sprache und Grad der Compiler-Optimierung ergeben sich Unterschiede bei der Effizienz
- Kosten an der Host-Programm-Grenze und größere Binärdateien werden als Nachteile genannt
- Der WASI-Standard soll dies abmildern, doch die Standardisierung eines String-Typs ist noch nicht abgeschlossen
- Zig erzeugt die kleinsten Wasm-Binärdateien
- In nativen Umgebungen kann es durch Threading, IO und Speichernutzung zu Leistungseinbußen kommen
Entwicklungen bei Sprachen und Standards
- Die Standardisierung von Wasm wird parallel von der W3C Working Group und der Bytecode Alliance vorangetrieben
- Letztere treibt vor allem toolorientierte Entwicklungen wie WIT und das Component Model voran
- Vorschläge für neue Funktionen werden schnell übernommen, auch wenn es teils Debatten über Tempo und Richtung gibt
- Wasm verbreitet sich weniger als Ersatz für JavaScript als vielmehr als interne Integrationstechnologie
- Frameworks wie Blazor und Leptos nutzen Wasm, ohne JavaScript direkt zu behandeln
- Derzeit wird Wasm vor allem von Bibliotheksentwicklern übernommen; gewöhnliche Entwickler können es nutzen, ohne die internen Abläufe zu kennen
- Die Komplexität von Lernmaterialien gilt als Hürde, weshalb Lernprojekte wie „watlings“ vorgestellt werden
Noch keine Kommentare.