WebAssemblyをWin/Mac/Linuxで実行可能なランタイム「Wasmer 1.0」正式リリース。事前コンパイルによる高速起動やクロスコンパイルなどにも対応
米Wasmer社はオープンソースのWebAssemblyランタイム「Wasmer 1.0」の正式リリースを発表しました。
Windows、Mac、Linux、FreeBSDに対応。Apple M1チップのMacにも対応します。
Wasmer v1.0.0 released!https://t.co/95zx1K7QAu
— Wasmer (@wasmerio) January 5, 2021
WebAssemblyはもともとWebブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットとして開発され、2019年10月にW3Cの勧告に到達しました。
その後、WebAssemblyをWebブラウザだけでなく、あらゆるプラットフォームで実行可能にすることを推進する団体「Bytecode Alliance」をMozillaやRed Hat、Fastlyなどが設立。
すでに2019年4月にはFastlyがWebブラウザからWebAssemblyのランタイムを切り離し、スタンドアロンで実行可能なWebAssemblyランタイムの「Lucet」などを公開していました。
参考:WebAssemblyが50マイクロ秒以下で起動する「Lucet」。コンパイラとランタイムをFastlyがオープンソースで公開
今回リリースされた「Wasmer 1.0」もLucetのようにスタンドアロンで実行可能なWebAssemblyランタイムです。Windows、Mac、Linux、FreeBSDに対応するため、デスクトップやサーバでWebAssemblyアプリケーションを実行できます。
WebAssemblyの標準に準拠しているほか、WebAssemblyからOSの主要なAPIを呼び出すWASIもサポートしています。
ユニバーサルバイナリの実現、セキュアな実行
Wasmer 1.0の発表のなかで同社はWebAssemblyの重要性について3つのポイントを挙げています。
それはユニバーサルバイナリであること、実行環境のサンドボックス化が行われセキュアであること、そしてDockerコンテナよりも軽量であることです。以下、その部分を引用しましょう。
By leveraging Wasm for software containerization, we create universal binaries that work anywhere without modification, including operating systems like Linux, macOS, Windows, and also web browsers.
Wasm(WebAssembly)をソフトウェアのコンテナ化に活用することで、Linux、macOS、WindowsなどのOSやWebブラウザ上でそのまま何の変更もなしに動作するユニバーサルバイナリを実現できます。
Wasm automatically sandboxes applications by default for secure execution, shielding the host environment from malicious code, bugs and vulnerabilities in the software it runs.
そのうえ、セキュアな実行のためにWasmはアプリケーションをデフォルトで自動的にサンドボックス化し、悪意のあるコードやバグ、実行されるソフトウェアの脆弱性からホスト環境を保護します。
Wasm also provides a lean execution environment enabling Wasmer containers to run in places where Docker containers are too heavy to work.
Wasmはまたコンパクトな実行環境を提供するため、WasmerコンテナはDockerコンテナでは重すぎる環境であっても実行可能です。
参考:WebAssemblyが目指していること。ナノプロセスモデルの実現、システムインターフェイス、実行時リンクの実装など
参考:KubernetesのノードとしてWebAssemblyランタイムを用いる「Krustlet」、マイクロソフトが公開
Wasmer 1.0はこうした特長を実現しつつ、本番環境で利用可能な品質に到達しているわけです。
プラガブルなコンパイラ、事前コンパイルも可能
Wasmerはプラガブルなコンパイラや事前コンパイルなどいくつかの特徴も備えています。
Wasmerは、WebAssembly形式のバイナリを内部でネイティブなバイナリにコンパイルし、それをメモリに展開して実行していますが、このコンパイラをプラガブルにしています。対応しているのは「Singlepass」「Cranelift」「LLVM」の3種類。
説明では、Singlepassはブロックチェーンの処理に適しており、Craneliftはコンパイルが高速なため何度もコンパイルが発生する開発環境に適しており、LLVMは高速なネイティブバイナリを生成できるため本番環境に適しているとのこと。
さらにWasmerではWebAssemblyエンジンとして、コンパイラが生成したネイティブバイナリを扱うエンジンを2種類備えています。
1つは「JITエンジン」で、これはコンパイラが生成したネイティブバイナリをそのままメモリ展開して実行するエンジンであり、WebAssemblyバイナリをそのままリアルタイムに実行するときに使います。
もう1つは「Nativeエンジン」です。これは、「wasmer compile」コマンドを用いてあらかじめWebAssemblyのバイナリをネイティブバイナリにコンパイルしておき、そのコンパイル済みのネイティブバイナリを読み込んで実行するためのエンジンです。
あらかじめコンパイル済みのネイティブバイナリを実行するため、わずか数マイクロ秒で起動すると説明されています。
これは高速なアプリケーションの起動が要求されている場合に適しているだけでなく、IoTデバイスやエッジデバイスのようなコンピューティングリソースが小さなコンピュータで実行する場合にも、Wasmerにコンパイラの搭載と実行が不要なために適しています。
このコンパイラを持たない軽量な形式のWasmerランタイムは「Headless Wasmer」と呼ばれています。
また「wasmer compile」による事前コンパイルでは、実際にそのプロセッサのマシン上でなくともターゲットとなるプロセッサのネイティブコードが生成できるクロスコンパイルが可能となっています。
関連記事
あわせて読みたい
AWSが生まれたのは、Amazonが経費削減のためにSunのサーバからHP/Linuxサーバへ切り替えたことがきっかけ。当時の社員が振り返る
≪前の記事
PythonやR対応の統合開発環境「JupyterLab 3.0」正式リリース。ビジュアルデバッガー搭載、レスポンシブ対応でモバイルデバイスの狭い画面でも使いやすく