WebAssembly-Runtime: Major Release 1.0 von Wasmer erschienen

Wasmer soll das Bereitstellen und Ausführen containerisierter Software browser- und plattformübergreifend vereinfachen sowie schneller und sicherer machen.

In Pocket speichern vorlesen Druckansicht 29 Kommentare lesen

(Bild: wasmer.io)

Lesezeit: 3 Min.
Von
  • Matthias Parbel

Mit dem Ziel, eigenständige, plattformabhängige Anwendungen auf jeder Plattform ausführen zu können, hat das Wasmer-Team vor rund zwei Jahren mit der Entwicklung einer Wasm-Laufzeitumgebung begonnen, die mit Emscripten kompilierte WebAssembly-Module unabhängig vom Host-System – Linux, macOS, OpenBSD, Windows, Android, iOS – ausführen kann. Die nun veröffentlichte Version Wasmer 1.0 verspricht Entwicklerinnen und Entwicklern die für den produktiven Einsatz notwendige Reife und Performance.

Seit der offiziellen Vorstellung von Wasmer 0.16 im Frühjahr 2020 hat das Team die Laufzeitumgebung in mehrfacher Hinsicht aufgerüstet. Neben der als produktionsreif eingestuften Leistung, zu der unter anderen parallel arbeitende Compiler beitragen sollen, wartet die Wasm Runtime mit wichtigen Neuerungen und Verbesserungen auf. Neu sind beispielsweise der Support für die Wasm-C-API, eine Native Object Engine sowie Erweiterungsfähigkeit zum Einbinden verschiedener Compiler wie LLVM, Cranelift und Single-pass.

Auf dem Weg zum ersten Major Release hat sich das Team hinter der Laufzeitumgebung nach eigener Aussage vor allem darum bemüht, auch Entwicklerinnen und Entwicklern, die nicht im Detail mit dem WebAssembly-Ökosystem und dessen Konzepten vertraut sind, die Arbeit mit der API so einfach wie möglich zu gestalten. Während die dazu ursprünglich entworfene Wasmer-C-API auch weiterhin unterstützt werden soll, sind Nutzer von Wasmer 1.0 jedoch aufgerufen, künftig bevorzugt die inzwischen gereifte standardmäßige Wasm-C-API zu verwenden.

use wasmer::{Store, Module, Instance, Value, imports};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let module_wat = r#"
    (module
    (type $t0 (func (param i32) (result i32)))
    (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32)
        get_local $p0
        i32.const 1
        i32.add))
    "#;
    
    let store = Store::default();
    let module = Module::new(&store, &module_wat);
    let import_object = imports! {};
    let instance = Instance::new(module, &import_object)?;

    let add_one = instance.exports.get_function("add_one")?;
    let result = add_one.call([Value::I32(42)])?;
    assert_eq!(result[0], Value::I32(43));

    Ok(())
}

Wasmer setzt nicht nur den von WebAssembly verfolgten Cross-Plattform-Ansatz um, sondern lässt Entwicklern auch bei der Wahl der bevorzugten Programmiersprache größtmögliche Freiheiten. Die Laufzeitumgebung lässt sich dazu mit unterschiedlichsten Compilern erweitern. Bereits fest im Lieferumfang von Wasmer 1.0 verankert sind die Compilerinfrastruktur LLVM, der aus dem Bytecode-Alliance-Projekt hervorgegangene und in Rust geschriebene Code Generator Cranelift sowie das Single-pass Back-end, das sich für den Einsatz im Umgebungen mit begrenzten Ressourcen empfiehlt, wie IoT-Geräte oder Blockchain-Anwendungen.

Mehr zum Thema

Speziell für IoT- und Edge-Computing-Umgebungen lässt sich Wasmer ab Version 1.0 auch Headless einsetzen. Die nur wenige KByte große Version kann dank AOT-Support (Ahead Of Time) vorkompilierte Wasm Binaries auf beliebigen Geräten ausführen. Darüber hinaus profitieren Entwicklerinnen und Entwickler von den erweiterten Fähigkeiten der Laufzeitumgebung zur Cross-Compilation. Bisher war das Ausführung von kompilierten Wasm-Applikationen auf die jeweilige Plattform beschränkt, nun lassen sich Anwendungen übergreifend einsetzen – eine auf x86_64-Rechnern kompilierte App beispielsweise auch auf der aarch64-Architektur und umgekehrt. Die Wasmer-Entwickler beanspruchen für sich zudem, die erste nicht-interpretierte serverseitige WebAssembly-VM anzubieten, die Wasm auf den neuen Apple-Silicon-Systemen unterstützt.

Eine komplette Übersicht aller Neuerungen und Funktionen in Wasmer 1.0 bietet der Blogbeitrag zur Ankündigung der produktionsreifen Version der Wasm Runtime. Detaillierte Informationen finden sich in der Dokumentation des Open-Source-Projekts. Wer Wasmer ausprobieren möchte, kann die Wasm Runtime über die Kommandozeile von der Wasmer-Homepage als eigenständige Laufzeitumgebung installieren oder in seine bevorzugte Programmiersprache integrieren.

(map)