Begriff
Component Model (Wasm)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Bisher war Wasm wie eine .exe Datei. Ein monolithischer Block.
Wenn du eine Library (z. B. openssl) nutzen wolltest, musstest du sie in dein Wasm hineinkompilieren.
Das Modul wurde riesig.
Das Component Model macht Wasm zu Lego.
Du hast einen Component "Logger".
Einen Component "Crypto".
Einen Component "Business Logic" (in Python).
Du steckst sie zur Laufzeit zusammen.
"Business Logic" importiert "Crypto".
Egal in welcher Sprache sie geschrieben sind! (Python ruft Rust auf, Rust ruft Go auf).
Über ein Standard-Interface (WIT). Ohne dass sie voneinander wissen müssen.
Das ist die Zukunft von Serverless und Plugins.
Merksatz: Ein Standard, der definiert, wie WebAssembly-Module (Komponenten) sprachunabhängig miteinander interagieren und zusammengesetzt werden können, um modulare, wiederverwendbare Softwarearchitekturen zu schaffen.
Tools wie wasm-tools oder cargo component.
Du definierst ein Interface (world.wit): "Ich brauche eine Funktion log(msg: string)."
Deine App läuft nur, wenn ihr jemand einen Component gibt, der log kann.
Plattformen wie Fermyon Spin oder WasmCloud basieren darauf.
1. Shared Nothing
Komponenten teilen KEINEN Speicher. (Anders als DLLs oder Shared Libraries). Daten werden kopiert (oder per Handle übergeben). Das garantiert absolute Isolation. Wenn der "Crypto"-Component abstürzt oder gehackt wird, ist dein Speicher sicher.
2. Canonical ABI
Wie übergibt man einen String von Rust nach Python? Rust nutzt UTF-8, Python Objekte. Die Canonical ABI definiert genau, wie High-Level-Typen (Strings, Listen, Records) in Wasm-Basistypen (i32) zerlegt und wieder aufgebaut werden ("Lifting/Lowering").
1. WIT (Wasm Interface Type) und Canonical ABI
Der Kern des Component Models ist WIT. Es agiert wie Protobuf, aber speziell für Wasm-Speichermodelle.
Wenn Wasm von einer JavaScript-Host-Engine aufgerufen wird, müssen Pointers auf Heaps transformiert werden. Wasm kennt nativ nur primitive Integer (i32, i64). Die Canonical ABI automatisiert das "Lifting and Lowering". Gibt der Python-Component den String "Hallo" zurück, nimmt das Lowering den Python-String, rechnet ihn in UTF-8 Bytes in den Wasm-Speicher des Rust-Aufrufers um und pusht den Pointer dorthin, streng koordiniert ohne Copy-Overhead, wenn möglich (oder per sicheren Handles).
2. Shared-Nothing Memory und Capability-based Security
Das Wasm Component Model erlaubt absichtlich keinen Shared Memory zwischen Komponenten. Zwar kostet das Kopieren beim Aufruf minimal CPU-Zeit, aber das isoliert "Software-Supply-Chain-Attacks".
Wasm nutzt ein Capability-basiertes Sicherheitsmodell. Wenn der Image-Resizing Component aufgerufen wird, darf er weder Netzwerk-Sockets öffnen noch auf das /etc/passwd Dateisystem zugreifen, es sei denn, der Host injiziert explicit die wasi:http oder wasi:filesystem Component Handles. Die bösartige Komponente ist im Shared-Nothing-Space physikalisch gefangen, was Serverless-Plattformen (Cloudflare Workers) unschlagbare Multi-Tenant Sicherheit bietet.
3. Linked Components (Composition)
Components können statisch oder dynamisch verlinkt werden.
Man nutzt oft wasm-tools compose. Component A braucht einen Logger (import log). Component B bietet einen Logger (export log). Man baut die beiden zusammen zu Component C.
Dem Hostsystem ist völlig egal, in welchen 5 Sprachen die Interna programmiert wurden, nach außen präsentiert sich Component C mit strikten Endpunkten. Dieses Lego-Paradigma könnte Microservices in einigen Domänen (als Nano-Services) ersetzen, da man Netzwerk-Latenzen (gRPC) durch In-Process Function-Calls in Memory eintauscht, bei identischer Developer-Trennung.
Quick-Check
Wie Docker?
Ähnlich, aber feingranularer. Docker komponiert Prozesse (über Netzwerk). Component Model komponiert Funktionen (über Function Calls). Viel schneller (Nanosekunden vs Millisekunden).WASI?
WASI (WebAssembly System Interface) ist jetzt selbst eine Menge von Komponenten (Filesystem, Network, Clock), die man importieren kann.Status?
Noch sehr neu (Preview 2/3). Tooling ist im Aufbau. Aber es ist der wichtigste Trend im Wasm-Ökosystem 2024/2025.