Wasmerは先頃、サーバサイドWebAssemblyランタイムのバージョン 1.0をリリースして、現在一般提供されている。
Wasmerは、WebAssembly (略してWasm) に基づく超軽量コンテナを可能にする。バージョン 1.0は、2年以上前にバージョン 0.1.0で始まったジャーニーの重要なマイルストーンを示している。これは、サーバサイド Wasmへの関心が高まっていることを示している。
Wasmerのバージョン 1.0の重要な機能は次のとおり:
- さまざまなパフォーマンスの向上: 以前のバージョンよりも最大9倍高速なコンパイル時間。
- プラグ可能なインフラストラクチャ: 複数のコンパイラと複数のコンパイルエンジンのサポート。すぐに使用できるWasmerには、Singlepass、Cranelift、およびLLVMがサポートされている。また、生成されたコードをメモリに直接プッシュするJITエンジンと、ディスク上にネイティブコードを生成するネイティブエンジンの2つの操作モードもサポートしている。
- ネイティブオブジェクトエンジン: Wasmモジュールをネイティブオブジェクトにプリコンパイルする。これらのオブジェクトは、完全にサンドボックス化された環境を提供して、コンパイルされたモジュールを実行するために最小限のランタイムを必要とする。
- ヘッドレス Wasmer: 特に軽量IoTデバイスを対象としたユーザは、重量がわずか数百キロバイトの「ヘッドレス」バージョンのWasmerを実行でき、プリコンパイルされたWasmバイナリを任意のデバイスで実行できる。
- クロスコンパイル: Wasmを任意のCPUアーキテクチャから任意のターゲットCPUアーキテクチャにプリコンパイルする。
Wasmは、スタックベースの仮想マシン用のバイナリ命令フォーマットだ。プログラミング言語が可搬性のあるコンパイルターゲットとなるよう設計されており、クライアントおよびサーバアプリケーションのWebへのデプロイメントを可能にする。Wasmは、Webアプリケーションを実装するために多くの注目を集めている。開発者は、従来のJavaScriptコードの代わりに、またはそれに加えてWasmを使用でき、最新のブラウザのほとんどは、Wasmをすぐに実行できる。Wasmを対象とする言語の数は、C/C++、Rust、C#などを含め増え続けている。
ブラウザでのWebAssemblyの人気に続いて、いくつかのサーバサイドのWasm実装が登場した。Wasmer Inc.のCEOであるSyrus Akbary氏は、サーバサイドのWasmランタイムの重要性について説明する:
WebAssemblyは、ソフトウェアの実行とコンテナ化の将来にとって重要なコンポーネントになると信じています (ブラウザの内部だけでなく外部でも)。
ソフトウェアのコンテナ化にWasmを活用することで、Linux、macOS、WindowsなどのオペレーティングシステムとWebブラウザを含め、変更なしでどこでも機能するユニバーサルバイナリを作成します。Wasmは、安全に実行するためにデフォルトでアプリケーションを自動的にサンドボックス化し、実行するソフトウェアの悪意のあるコード、バグ、および脆弱性からホスト環境を保護します。Wasmは、無駄のない実行環境も提供し、Dockerコンテナが重すぎて機能しない場所でWasmerコンテナを実行できるようにします。
Wasmサーバランタイムは、WebAssemblyのモジュラーシステムインターフェイスであるWebAssembly System Interface (WASI) を実装している。WASIの実装により、WasmコードはOS固有のサービスにアクセスできる。これらのサービスは、通常、ブラウザ (ファイルシステム、ネットワークなど) では利用できない。Dockerの共同創設者であるSolomon Hykes氏は、2019年にツイッターに返した:
2008年にWASM+WASIが存在していたら、Dockerを作成することはありませんでした。これがどれほど重要かということです。サーバ上のWebAssemblyは、コンピューティングの未来です。標準化されたシステムインターフェイスは、欠落しているリンクでした。WASIがその任を果たすことを願いましょう!
Wasmerは、Rustで記述されたWasmサーバサイドランタイムの一般的なオープンソース実装だ。これを支援する会社であるWasmer Inc.は、WebAssembly Package Manager (WAPM) も作成した。これにより、開発者はWasmコードのパッケージ化されたモジュールを簡単に共有できる。Wasmerの代替には、Second State Virtual Machine (SSVM) やLucetなどのランタイムがある。