検索
ニュース

Wasmer、「Wasmer JavaScript SDK」を発表WASIXを介してあらゆるUNIXプログラムをブラウザで実行できる

WebAssembly(Wasm)ランタイムを開発するWasmerは、WASI(X)アプリケーションをブラウザで簡単に実行するための新しいライブラリ「Wasmer JavaScript SDK」を発表した。

Share
Tweet
LINE
Hatena

 WebAssembly(Wasm)ランタイムを開発するWasmerは2023年12月14日(米国時間)に公式ブログで、WASI(X)アプリケーションをブラウザで簡単に実行するための新しいライブラリ「Wasmer JavaScript SDK」(@wasmer/sdk)を発表した。2023年12月21日にリリースされた「v0.6.0」が最新バージョンとなっている。

 WASI(WebAssembly System Interface)は、WebAssemblyでネットワークやファイル、メモリなどのシステムリソースを抽象化するAPI仕様。WASIXは、WASIを拡張してPOSIX(Portable Operating System Interface)の機能を利用可能にする仕様だ。

 Wasmer JavaScript SDK(以下、Wasmer JS SDK)を使えば、あらゆるWASIパッケージやWASIXパッケージをブラウザで簡単に実行できる。Python、Bash、FFmpegなど、Wasmer Registry(Wasmerパッケージのレジストリ)で公開されている任意のパッケージがシームレスに実行可能だ。

 ブラウザでスレッド、シグナル、サブプロセスなどの機能を使用して、あらゆるUNIXプログラムを(WASIX経由で)実行できる。目的のWasmerパッケージを指定すれば、Wasmer JS SDKが全てのファイル(.wasmと必要なファイルシステム)をダウンロードする仕組みが用意されている。

Wasmer JS SDKの使用例

 Wasmerは、Wasmer JS SDKの使用例を紹介した。

  • マルチメディアフレームワークの「FFMpeg」のWASIXバージョンをブラウザで使用
  • C言語で開発されたPython処理系である「CPython」のWasmerパッケージを、Wasmer JS SDK以外の追加パッケージなしでブラウザで実行(ブラウザでCPythonを使えるようにするプロジェクトとして、「Pyodide」もあるが、PyodideはEmscriptenをベースにしているため、ブラウザでしか動作しない。また、スレッドをサポートしていない。Wasmer CPythonパッケージは、ブラウザとサーバの両方でシームレスに実行できる)
  • 「bashパッケージを取得し、Wasmer JS SDKを使ってxterm.jsにパイプする」というシンプルな実装により、Webサイトで独自のターミナルエミュレータを簡単に実行できる(Wasmerの「Wasmer.sh」サイトの例を挙げて紹介)

 Wasmerは、Wasmer.shを公開するために、Rustの1000行のコードとJavaScriptのグルーコードを手作業で書く必要があったが、50行以下のJavaScriptコードで書けるようになったとしている。

Wasmer.shサイト(提供:Wasmer)
Wasmer.shサイト(提供:Wasmer)

Wasmer JS SDKの特徴

 Wasmerは、Wasmer JS SDKの技術的な特徴として、以下を紹介している。

マルチスレッドをサポート

 JavaScriptはシングルスレッドで実行されるが、JS Workersを使用して、ブラウザでマルチスレッドを実現した。

ブラウザでforkを実行

 Asyncifyを使って現在のスタックでプログラムをフリーズさせ、後で新しく作成したWorkerで再開することで、プロセスをフォークできるようにした。

ユニバーサルコンテナフォーマット

 Wasm資産とファイルシステム資産の両方に対応した特別なコンテナフォーマットにより、特定のパッケージを、そのファイルシステムの全ての依存関係とともに一度にダウンロードできるようにした。

ファイルシステムAPI

 開発者ニーズに対応するには、ファイルシステムを扱えるようにすることが重要だとの認識から、Wasmer JS SDK Filesystem APIでファイルシステムを操作できるようにした。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る