# WebAssembly
## 定義
WebAssembly(Wasm)は、スタックベースの仮想命令セットと対応するバイナリ形式を持つポータブルな実行フォーマットである。ブラウザでの高効率なコード実行を目的として策定されたが、そのアーキテクチャ中立性・サンドボックス化・軽量性から、エッジデバイスからクラウドサーバまでをまたぐサーバーサイド実行環境としても利用されている。Wasmバイナリは高レベル言語(C/C++/Rust/Goなど)からコンパイルされ、対応するランタイム上で実行される。(Source: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]] §1, §2)
## 横断的知見
- **Wasmの標準化は命令セットとランタイム構造の概略までに留まり、内部実装(命令のオブジェクト化形式、スタック要素サイズ、ジャンプ表現など)は各ランタイムに委ねられている。この実装の多様性が、異なるWasmランタイム間でのステートフルなVMマイグレーションの主要な障壁になっている。(Source: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]] §3)
- **Wasm ランタイム間には性能とリソース消費のトレードオフが存在し、動的に切り替えることでリソース制約を緩和できる**: CANDARW 2025 は、WasmEdge のような高性能ランタイムと WAMR のようなメモリ効率型ランタイムを、ランタイム中立チェックポイントを介して動的に切り替えることで、Pod 退避なしにメモリ圧力を緩和する。これは、Wasm を単なる軽量実行環境ではなく、性能とコストを適応制御するリソース管理基盤として扱う新しい方向性を示す。(Source: [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]])
- **Wasm の軽量な実行状態は、ホットリスタートによる高速な障害回復にも適する**: CANDARW 2025 は、ランタイム中立チェックポイントからの復元を用いて、Wasm コンテナの障害時にコールドスタートを回避し、状態を保持したままサービスを再開する。これは、従来のコンテナ再起動では困難だったステートフルなセルフヒーリングを可能にする。(Source: [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]])
- **自己ホスト型ランタイムは、ランタイム中立化のために Wasm 自身の抽象レイヤーを活用する**: Mid4CC 2025 の Chiwawa は、Wasm にコンパイルした自己ホスト型ランタイムを中間層とし、ホストランタイムの改変やバイトコード改変を行わずに実行状態を統一する。これは、Wasm が単なるポータブル実行形式を超えて、異種ランタイム間の C/R やマイグレーションを実現するためのメタランタイム基盤として使えることを示す。ただし、二重ランタイム実行のオーバーヘッドは I/O 集約型ワークロードで顕著になる。(Source: [[@2025__Mid4CC__Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint-Restore in Edge-Cloud Continuum]])
- **standard interpreter と fast interpreter の間では、命令ポインタやスタックレイアウトの変換が C/R の核心となる**: APSys 2024 の予備研究は、WasmEdge (standard interpreter) と WAMR・Wasm3 (fast interpreter) を対象に、プログラムカウンタ・コントロールスタック・バリュースタックの相互変換を試みた。fast interpreter はスタックベース命令をレジスタベースに変換するため、standard interpreter と等価な実行点であっても異なる内部状態を持つ。これを解決するため、カスタムコード上の実行点を Wasm バイトコード上の相対アドレスに対応づけ、スタック要素の型情報を管理するデータ構造を導入する。(Source: [[@2024__APSys__A Checkpoint-Restore Mechanism with Interoperability Among Distinctive WebAssembly Interpreters]])
## 未解決の問い
- 異なるWasmランタイム間で共通の「ランタイム中立」なVM状態表現を標準化できるか。標準化の範囲は命令アドレス・スタック・メモリ・グローバルに留まるか、それ以上か。
- JIT/AOTコンパイルやランタイム独自の最適化が適用された状態を含むマイグレーションはどこまで実現可能か。
- WASIを介してOSカーネルや外部リソース(ソケット、ファイルディスクリプタ)に依存する状態を、マイグレーションにどう統合するか。
- エッジクラウド協調において、Wasmマイグレーションの判定ポリシー(いつ、どのワークロードを、どのランタイムへ移すか)をどう設計するか。
- 動的ランタイム切り替えの判定閾値(メモリ使用率、性能指標)と、切り替え時の一時的な性能低下の許容範囲をどう設計すべきか。
- fast interpreter のカスタムコードと standard interpreter の Wasm バイトコード間で、全ての実行点を正確に対応づける方法は一般化できるか。特に最適化により命令順序が変化する場合はどう扱うか。
## 関連
- ソース: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]] / [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]]
- エンティティ: [[WasmEdge]] / [[WAMR]]
- 概念: [[VM Migration]] / [[Edge Computing]] / [[Application Checkpointing]] / [[Edge-cloud Collaboration]] / [[ランタイム中立チェックポイント]] / [[ホットリスタート]] / [[動的ランタイム切り替え]] / [[セルフヒーリング]] / [[Self-Hosted WebAssembly Runtime]]
- 関連 MOC: [[Software Engineering - MOC]] / [[System Engineering - MOC]]
## 出典
- [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]](§1, §2, §3)
- [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]]
- [[@2025__Mid4CC__Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint-Restore in Edge-Cloud Continuum]](§1, §3, §5)