WebAssemblyを進化させる「WASI Preview 2」が安定版に到達。OSや言語に依存しないコンポーネントモデルを実現

今回は「WebAssemblyを進化させる「WASI Preview 2」が安定版に到達。OSや言語に依存しないコンポーネントモデルを実現」についてご紹介します。

関連ワード (対応言語、普及、相互等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


WebAssembly関連仕様の標準化を行っているW3C WebAssembly Community GroupのWASI Subgroupミーティングにおいて、2024年1月25日に行われた投票で「WASI Preview 2」(もしくはWASI 0.2.0)仕様が承認され、安定版に到達したことが明らかになりました。

fig

WASI Preview 2では、WebAssemblyアプリケーションがOSなどのプラットフォームに依存せず、さまざまなプログラミング言語で開発したWebAssemblyコンポーネントを組み合わせて開発できるように、「コンポーネントモデル」とそのインターフェイスを記述するIDL(Interface Definition Language)である「WIT(WebAssembly Interface TypeもしくはWasm Interface Type)」を基盤にしたものになっています。

WASI Preview 2登場の背景

WASI Preview 2がどのような背景の下で登場したのか、簡単にこれまでのWebAssemblyの歴史を振り返ってみましょう。

プロセッサ非依存のバイナリフォーマットとして登場
WebAssemblyはもともと、Webブラウザ上で高速に実行可能なバイナリフォーマットとして登場し、2019年12月にW3Cの勧告に到達し、Google Chrome、Firefox、Safariなど事実上全てのモダンブラウザが対応しました。

これによりWebAssemblyはプロセッサのアーキテクチャに依存せず、x86プロセッサでもArmプロセッサでもRISC-Vプロセッサでも高速に実行可能な、ユニバーサルなバイナリフォーマットとして知られるようになります。

また、RustやGoなどさまざまなプログラミング言語がWebAssemblyバイナリを生成可能です。このような多言語対応もWebAssemblyの特徴の1つです。

WASIによりOS非依存のクロスプラットフォーム対応に
WebAssemblyをWebブラウザだけでなくOS上のスタンドアロンなWebAssemblyランタイムでも実行可能にしようと、OSのAPIを抽象するために登場したのがWASI(WebAssembly System Interface:現在のWASI Preview 1)です。

WASI Preview 1の登場で、例えばOSによって異なるファイルシステムへのアクセスなどが抽象化されました。WASI Preview 1に対応したWebAssemblyアプリケーションであれば、WASI Preview 1対応ランタイムを用いることでWebブラウザでもmacOSでもLinuxでもWindowsでも、そのまま実行可能になりました。

そしてWasmtimeやWasmer、Cloudflare Workers、Fastly Compute@Edgeなど主要なWebAssemblyランタイムがWASI Preview 1に対応したことで、WebAssemblyは単一アプリケーションでのクロスプラットフォーム対応を実現したのです。

ガベージコレクション機能で対応言語がさらに拡大
また2023年にはWebAssemblyのガベージコレクション機能がGoogle Chromeを始めとするWebAssemblyランタイムに実装されるようになりました。

これによりプログラミング言語をWebAssemblyに対応させる際に、プログラミング言語自身でガベージコレクタを実装する必要がなくなります。つまり以前より容易にさまざまなプログラミング言語がWebAssemblyに対応可能になりました。

このガベージコレクション機能を利用して、KotlinやDartといったプログラミング言語がWebAssembly対応を進めています。今後さらに多くのプログラミング言語がWebAssembly対応になると見られます。

こうして着実に進化してきたWebAssemblyですが、WASI Preview 1にはいくつかの課題がありました。

WASI Preview 1の課題

WASI Preview 1にはOSのAPIを抽象化するという目的があったため、UNIXをベースにしたAPIの標準規格であるPOSIX(Portable Operating System Interface)の主要なAPIを手本としてWASI Preview 1が実装されました。その後、WASIの仕様を拡張してさまざまな機能を拡充していく際にはモジュール的にAPIを追加していく予定でした。

しかしUNIXがCで実装されたOSであるという歴史的経緯からPOSIXもC言語を指向したAPIとなっています。WASI Preview 1はこのPOSIXを手本にしたことで、多言語でインターフェイスを実装するのに向いていないこと、ソケットは十分にサポートできず、インターフェイスの仮想化も困難、コンポーネントを組み合わせるためのインターフェイスとして用いるのが困難、などの課題が浮かび上がりました。

これについてはWASIの実装と普及を推進する団体であるBytecode Allianceが2月1日に公開した動画「Bytecode Alliance Community Meeting」で説明しています。下記はその動画内で説明に使われたスライドです。

fig

そこで、さまざまなプログラミング言語に対応するなどのWebAssemblyの特徴を活かすため、多言語に対応したコンポーネントによる機能拡張やアプリケーションの構築を実現すべく、WASI Preview 1を刷新して新たにコンポーネントモデルとそのためのインターフェイスであるWITをベースに開発されたのが、今回安定版となった「WASI Preview 2」(もしくはWASI 0.2.0)なのです。

コンポーネントモデル、WIT、Worlds

WASI Preview 2は前述の通り、コンポーネントモデルとそのインターフェイスを記述するIDL(Interface Definition Language)である「WIT(WebAssembly Interface TypeもしくはWasm Interface Type)を基盤にしています。

コンポーネントモデルによるコンポーネントとは、実体はWebAssemblyファイルであり、そのなかに1つから複数のWebAssemblyモジュールを含んでいます。

WITで表現されるコンポーネントのインターフェイスは、プロセッサのアーキテクチャやOS、開発に用いられたプログラミング言語に依存せず相互に通信できるようになっています。

WITは、コンポーネントのインターフェイスを主にfunction(関数)とType(型)によって記述することで、コンポーネントの入出力を定義します。

下記はそのサンプルコードです。hostというインターフェイスにはlogという関数があり、その関数はstring型の引数が1つとなっている、といったことが記述されています。

このWITを基に、さまざまなプログラミング言語に対応したコンポーネントの初期コードの生成を可能にするツールなども用意される予定です。

また、WITを複数束ねて名前を付けた「WIT Worlds」もWASI Preview 2の大きな特徴です。

WIT Worldsによってコンポーネントの外部のアプリケーションとの入出力についてより上位のレベル、例えば「HTTPプロキシ」としてのやりとりや「コマンドラインツール」としてのやりとりを記述できます。コンポーネントとは、このWIT Worldsの実装を内部定義したものとも言えます。今後さまざまなWorldを実装したコンポーネントが登場することが期待されます。

WASI Preview 2は、このコンポーネントモデルとWITを基盤に次の7つのシステムインターフェイスも公開されました。

  • wasi-io :抽象化されたI/Oのインターフェイス
  • wasi-clocks:現座時刻などを取得するインターフェイス
  • wasi-random:乱数を取得するインターフェイス
  • wasi-filesystem:ファイルシステムにアクセスするインターフェイス
  • wasi-sockets:TCPとUDPのソケット通信およびドメイン名のルックアップのためのインターフェイス
  • wasi-cli:コマンドラインインターフェイスを実装するためのインターフェイス
  • wasi-http:HTTPのリクエストとレスポンスを送受信するためのインターフェイス

WASI Preview 3へ

WASIは今後、WASI Preview 3、Preview 4と進化していく予定です。次のWASI Preview 3では、非同期コンポーネントの実現などについてフォーカスしていく予定だとされています。

参考

  • WASI 0.2.0 and Why It Matters | wasmCloud
  • WASI Preview 2 Launched · sunfishcode’s blog

関連記事

  • WebAssemblyにスレッドやコンポーネントモデルなど導入へ、Bytecode Allianceがロードマップを公開
  • WebAssemblyの「WASI Preview 2」で、WebAssemblyコンポーネントの組み合わせによるアプリケーション開発を実現へ

COMMENTS


Recommended

TITLE
CATEGORY
DATE
EUがAmazonに過去最大約971億円の罰金、ターゲット広告目的で顧客データを使用
ネットサービス
2021-08-01 18:31
「CentOS」に代わる「Rocky Linux 8.4」の一般提供が開始
IT関連
2021-06-24 07:04
バイオテック関連スタートアップのY Combinatorが次世代の治療法とツールを開発中
バイオテック
2021-04-06 05:45
量子コンピュータ活用、NECと東北大監修で外部エンジニアたちが速習 専門家が舌を巻く“猛者”も現る
PR
2021-01-22 10:37
日産、EV「アリア」限定モデルの試乗体験などをオンライン化 ARモデルやドライブシミュレーションを用意
IT関連
2021-06-05 04:58
“グーグルシリコン“搭載のPixel 6はiPhoneに勝てそう? Samsung + TPUでハイエンド復帰か :Googleさん
トップニュース
2021-04-04 08:42
マイクロソフトやセールスフォースとPaaSで真っ向勝負に挑むサイボウズの思惑
IT関連
2023-05-26 05:04
セキュリティ事故の増加で発生抑止にサービス拡大–セキュアワークス
IT関連
2021-01-19 14:08
New Relic、脆弱性管理機能を一般提供–セキュリティを可観測性に統合
IT関連
2023-02-11 17:37
ソムリエを客室に ホテルニューオータニ、宿泊客に「スーパールームサービス」 飲食店の酒類販売停止で
くらテク
2021-04-27 15:45
AMD、fTPMが有効化された「Windows 11」での不具合を認める–回避策を提示
IT関連
2022-03-12 12:25
「Windows 11」のタスクマネージャーにフィルタリング機能–プレビュー版で
IT関連
2022-11-15 23:56
リモートワークが世界中に広がる中、分散型ワークフォース向け人事プラットフォームのOysterが約21億円調達
HRテック
2021-02-17 14:56
日立製作所とNTT Com、IOWNで600km超間のリアルタイムデータ同期に成功
IT関連
2024-12-07 08:50