11 smarte Wege, WebAssembly zu nutzen

19.06.2024 von Peter Wayner
WebAssembly ist vielschichtig und hat die Grenzen des Browsers längst gesprengt – wie diese elf Anwendungsfälle demonstrieren.
WebAssembly setzt kreativen Entwicklern kaum Grenzen.
Foto: SvetaZi | shutterstock.com

Trotz Java, JavaScript und CSS waren Browser-basierte Applikationen lange Zeit vor allem langsam und ressourcenhungrig. Doch dann trat WebAssembly (Wasm) auf den Plan: Vorkompilierter Code machte "Just in Time" überflüssig und die überschaubare Größe des Tools sorgte für sinkende Bandbreitenkosten sowie weniger Verzögerungen innerhalb der Netzwerke. Seither ermöglicht der Standard es Entwicklern, Code über den Browser auszuliefern, ohne dazu in JavaScript-Gefilde abtauchen - oder ihren Code transpilieren - zu müssen.

Doch damit endet die Erfolgsstory von Wasm nicht: Die Technologie kann weit mehr realisieren, als animierte Webseiten zu erstellen. Die Developer dieser Welt finden zunehmend neue Wege, sie in neue Tools und Infrastrukturen einzubinden - wie die folgenden elf Beispiele für innovative WebAssembly-Anwendungsfälle veranschaulichen.

1. Applets

Das waren noch Zeiten, als Java-Code in Form eines Applets im Browser lief. Diese native Funktionalität konnte sich allerdings nicht durchsetzen und ist deswegen schon vor Jahren in der Versenkung verschwunden.

Mit CheerpJ - einer in Wasm kompilierten JVM-Version - können Sie diese Oldschool-Magie nun wieder aufleben lassen. Das ist ein bisschen so, als würde man in der Zeit zurückreisen, um sich "Matrix" oder "Good Will Hunting" auf VHS zu Gemüte zu führen. Allerdings ohne die technologischen Anstrengungen, die die realen 1990er Jahre aufgeworfen haben - etwa Bänder zurückzuspulen.

2. Sprachdekodierung

Falls Sie Code im Browser nur für geeignet halten, um Spielzeug-Projekte zu realisieren oder angestaubte <blink>-Tags zu bedienen, beweist Ermine AI das Gegenteil: Dieses Tool bietet ein vollständiges KI-Modell für Spracherkennung, das lokal ausgeführt wird.

Das resultiert beim ersten Start in einigen Minuten Ladezeit, geht danach allerdings deutlich schneller. Aktuell unterstützt dieses WebAssembly-KI-Tool nur die englische Sprache.

3. Modularitätsregeln

Wenn es darum geht, Software an Server auszuliefern, sind Container eine gute Lösung. Aber was, wenn es dabei nicht um Server geht?

Das experimentelle WebAssembly-Projekt Container2Wasm verspricht, sämtliche Dateien in "Wasm-fähig" zu konvertieren. Dazu hat es unter anderem x86- und RISK-V-Emulatoren an Bord.

4. Wasm-Notebooks

Viele Data Scientists stellen ihre Ergebnisse in Form von Notebooks bereit - etwa im Rahmen von Projekten wie Jupyter. Diese Notebooks vereinen Code, Daten und Text zu einer offenen, dynamischen Umgebung, die es den Rezipienten vereinfachen, die beschriebene Software auszuprobieren. Dazu genügt im Regelfall ein Klick auf den richtigen Button. Die Konfiguration solcher Notebooks läuft für gewöhnlich über einen Server - der wiederum eingerichtet werden und auf Python laufen muss.

Diese Aufgabe gestaltet sich mit Wasm-basierten Toolkits wie Marimo oder Sphinx inzwischen noch einfacher: Sie ermöglichen es, Python-Code direkt im Browser auszuführen. Alles was Sie dazu brauchen ist Pyodide - eine WebAssembly-Version von Python.

5. Datenanalysen

Um Daten zu analysieren, nutzen Datenwissenschaftler gerne R in Kombination mit Tools wie Sweve. Die Programmiersprache muss dazu lokal auf dem Rechner oder einem Server installiert sein.

Es sei denn, Sie setzen auf WebAssembly-basierte Tools wie WebR oder R-universe, die R-Code direkt in Wasm umwandeln und damit Browser-fähig machen. So kann jJeder den R-Code ausführen, ohne die Sprache installieren zu müssen (und sicherzustellen, dass es sich um die richtige Version handelt).

6. Retro Games

Falls Sie auch manchmal die Sehnsucht nach Retro-Game-Klassikern heimsucht, müssen Sie sich nicht mehr die Mühe machen, alten C- oder Pascal-Code neu zu kompilieren.

Projekte wie Wasm-4 lassen sämtliche Ihrer alten Lieblingsvideospiele im Browser wiederauferstehen.

7. Functions as a Service

Diverse Cloud-Serviceanbieter, die Microservices und Serverless-Lösungen unterstützen, haben ein natürliches Interesse daran, auch Support für WebAssembly zu bieten: Es ist ein sinnvoller Weg, um kleine Code-Stücke zu verpacken, die sich besonders schnell starten lassen, weil sie bereits nahezu vollständig kompiliert sind.

Cloud-Anbieter wie Fermyon, Cloudflare oder Wasmer unterstützen Wasm-Module auf unterschiedliche Art und Weise. Einige andere Anbieter bündeln diese Module auch mit Tools wie WasmEdge und bringen WebAssembly-Code mit Hilfe der Node.js-Runtime zum Laufen.

8. Datenbanken

Die Datenbank ist traditionell sakrosankt und läuft im Regelfall als separater Prozess - oft innerhalb eines besonders geschützten Bereichs. Bislang wurde die Vorstellung, eine vollständige Datenbank mit reichhaltigen Funktionen in den Browser "pressen" zu können, damit der Code direkt auf Datenbankfunktionen zugreifen kann, durch die Limitationen von Projekten wie WebStorageAPI oder IndexedDB durchkreuzt.

Neue Projekte wie PGLite, DuckDB oder SQLite 3 ermöglichen allerdings inzwischen, wesentlich größere Datenmengen zu speichern und mit einer breiten Palette von SQL-Funktionen zu analysieren. Dabei zeichnen sich diese Tools nicht nur durch Geschwindigkeit, sondern auch durch die Möglichkeit aus, sie mit anderen WebAssembly-Projekten verknüpfen zu können.

9. Embeddable Functions

Wasm ist aber nicht nur ein Delivery-Mechanismus, der Webseiten um größere, fähigere Datenbanken ergänzt: Einige Entwickler stellen die Vision schlicht auf den Kopf und betten WebAssembly-Code in Datenbanken ein, um benutzerdefinierte Funktionen (user-defined functions; UDFs) zu verwirklichen.

SingleStore ermöglicht es Entwicklern darüber hinaus auch, "table-valued functions" einzubetten. Andere Streaming-Tools wie InfinyOn oder Redpanda erlauben es ihnen zudem, Wasm-Funktionen auf Daten anzuwenden, die sich im Fluss befinden. Diese Entwicklung könnte dazu führen, dass sich WebAssembly künftig als das vorherrschende Format etabliert, wenn es darum geht, neue Compute-Fähigkeiten dahin zu tragen, wo die Daten gespeichert werden.

10. Künstliche Intelligenz

WebAssembly eignet sich zwar weniger, um in Large Language Models (LLMs) oder neuronale Netze eingebettet zu werden - hat im KI-Stack aber dennoch seine Daseinsberechtigung.

WasmEdge sorgt beispielsweise mit Plugin-Systemen für TensorFlow und PyTorch dafür, dass Ihr Code nahtlos mit KI-Berechnungen interagieren kann. Projekte wie Dylibso experimentieren indes damit, GenAI-Chatbots wie ChatGPT mit Extism-Modulen zu verbinden. WebAssembly könnte als künftig das Tool der Wahl sein, um Code mit KI zu verbinden.

11. Plugins

Viele Softwarepakete sind darauf ausgelegt, es ihren Benutzern möglichst leicht zu machen, den standardmäßigen Funktionsumfang zu erweitern. Das erfordert in der Regel, eine entsprechende API zu entwickeln, die neuen und alten Code zusammenbringt - ohne dabei Sicherheitslücken aufzureißen oder die Effizienz zunichte zu machen. Wasm hat sich für diese Aufgabe als gut geeignet erwiesen - schließlich wurde es vor einem ähnlichen Hintergrund nur eben mit Blick auf Webseiten entwickelt.

Diverse Softwarelösungen unterstützen diesen Ansatz bereits - von Apache-Projekten bis hin zur Datenmigration mit Zendesk. Um Support für alle gängigen (und einigen weniger gängigen) Programmiersprachen sicherzustellen, verlassen sich Softwareentwickler auf Basis-Tools wie Extism sowie SDKs und PDK-Bibliotheken. Eine weitere Tool-Option stellt in diesem Bereich Wasmi dar, das seinen Fokus auf limitierte und eingebettete Systeme legt. In Sachen Bindings greifen Devs in aller Regel auf fp-bindgen, wasm-bindgen oder wit-bindgen zurück. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.