More Related Content Similar to WebAssemblyのWeb以外のことぜんぶ話す (20) More from Takaya Saeki (6) WebAssemblyのWeb以外のことぜんぶ話す5. Web外wasmってやつがあります
• Wasmer
• Wasmをネイティブで動かすランタイム (Emscripten, WASI)
• Envoy
• パケットやHTTPリクエストの許諾や改変をwasmプラグインで書ける
• Krustlet
• Kubernetes上でwasmコンテナを実現する
• Kernel-wasm
• Linuxカーネル内でコンテキストスイッチ無しでWasmバイナリを動かす
• Nabulet
• Wasmでmicrokernelを高速に実現する
=> 一発ギャグではない! アツいフロンティアがある
9. Wasmをアツくする特徴
Fast, safe, and
portable semantics:
• Fast
• Safe
• Well-defined
• Hardware-independent
• Language-independent
• Platform-independent
• Open
Efficient and
portable representation:
• Compact
• Modular
• Efficient
• Streamable
• Parallelizable
• Portable
10. Wasmをアツくする特徴
• Safe
Untrustedなコードを安全に動かすことができる (like eBPF, NaCl)
• JVMでは厳しい
• Language-Independent
低レベルな言語を含め、言語を選ばない (like NaCl. CLIもやや実現
• JVM/eBPFでは現実的には厳しい
• Portable/Platform-Independent
環境/OSを選ばない (like JVM
• NaClでは厳しい
• Open
ホスト環境とのAPIインターフェースがオープンである (like Lua, NaCl
• 今まで決定的な選択肢が存在しなかった
Design Goalsの13個のGoalsから、注目する4つを抜粋
11. Wasmがなぜアツいのか(改
• Wasmが目指す世界は複合的な側面をもつ
+ Javaが目指したもの (Portable/Platform-Independent)
+ CLIが目指したもの (Language-Independent)
+ NaClが目指したもの/eBPF (Safe)
+ Lua (Open)
=>WasmのことをJVM againやeBPF againだと理解すると、
ほかの側面のアツさを見逃す
=>しかもそれぞれの需要のための投資が集中するからエコシス
テムの発展が速いのも魅力
13. Wasmの基礎言語仕様:
1. Language / 2. Platform Independent
• 低レベルなスタックマシンのバイナリバイトコード
• JVMやCLIとは違い、GCもオブジェクトのようなOOPの概念もない
• ハーバードアーキテクチャ
• 基本VMランタイムで動く
• 言語仕様が小さいのでコンパイルも可能
様々なコンパイラが第1ターゲットとしてサポートできる
(Like: NaCl / Unlike: JVM (Graal含む))
ホストアーキテクチャに依存しない
(Like: JVM / Unlike: NaCl)
14. Wasmの基礎言語仕様:
3. Safe
• ホストランタイムから隔離された単一メモリ空間を持つ
• そしてハーバードアーキテクチャである
• デフォルトでは外界に副作用を行えない
• Structuredな言語構造しかない (block, loop…
• ジャンプや条件付ジャンプ、CallなどはBasic Blockにしか飛べない
• ローカル変数の存在
• CallスタックはVMが管理するのでVM上はControl Flow Integrityがある
• VMの上の言語レベルでCFIがあるかどうかは話は別だけど..
• 構造化プログラミング以後のアセンブリ言語だとでも思ってください
UntrustedなコードをWasm VM上/AOTで動かすことができる
(Like: NaCl, eBPF / Unlike: JVM)
参考資料:カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15 (slideshare.net)
20. WAI APIの例
• FS, processなどのインターフェースを定義
• ここにAPIがドドーンとある:WASI/docs.md at main · WebAssembly/WASI (github.com)
Standardizing WASI: A system interface to run WebAssembly outside the web - Mozilla
Hacks - the Web developer blog
21. WASI セキュリティ
• 独自のセキュリティ機構をもつ(予定)
• WasmはSafeでIsolated! …本当?
語弊がある. ホストが提供するAPI (systemcall)の安全性に依存する
• Capability Baseのセキュリティ機構
• 例えばFSのアクセスはディレクトリごとにcapabilityを
取得する必要がある
• 多くのMicrokernelを想起させる機構
• まだまだ策定中
• イメージとしては、スマホアプリのようなセキュリティモデルが
実現できるようになる(かも)
• ネイティブみたいにSeccompでガチガチに固めたりしなくていい
WASIはPortableな実行ランタイムであり、
しかもセキュリティ的にexecutableとしても先進性がある
22. Proxy-wasm
WebAssembly for Proxies
• Portable/Safe/Openさを利用
• Envoyがリファレンス実装
• Nginxなども試験実装がある
• L4/L7 リクエスト/レスポンスを
自由にこねくり回すロジックをWasmが
発行するためのEmbedding Interface
• Envoyまわりの人たちが中心のコミュニティ
主導でメンテされている
• Google, Tetrate…
24. Proxy-wasmはなぜうれしい?
• Envoyで言えば、同じ仕組みを前からC++ static libraryを
プラグインとして差し込むことで実現できた
• 比較してwasmの利点
• Safe
• Untrustedなコードを実行できる
• Wasm側がクラッシュしてもProxy側に影響がない
• Portable
• アーキテクチャ/CPU非依存に実現できる
• Language Independent
• C++だけでなく、RustやGoでproxy pluginを実装できる
これはかなり便利な一般化できる話.
現在だとLuaのフィールド
27. Proxy-wasm
WebAssembly for Proxies
• Portable/Safe/Openさを利用
• Envoyがリファレンス実装
• Nginxなども試験実装がある
• L4/L7 リクエスト/レスポンスを
自由にこねくり回すロジックをWasmが
発行するためのEmbedding Interface
• Envoyまわりの人たちが中心のコミュニティ
主導でメンテされている
• Google, Tetrate…
28. Proxy-wasm
WebAssembly for Proxies
• Portable/Safe/Openさを利用
• Envoyがリファレンス実装
• Nginxなども試験実装がある
• L4/L7 リクエスト/レスポンスを
自由にこねくり回すロジックをWasmが
発行するためのEmbedding Interface
• Envoyまわりの人たちが中心のコミュニティ
主導でメンテされている
• Google, Tetrate…
29. Proxy-wasm
WebAssembly for Proxies
• Portable/Safe/Openさを利用
• Envoyがリファレンス実装
• Nginxなども試験実装がある
• L4/L7 リクエスト/レスポンスを
自由にこねくり回すロジックをWasmが
発行するためのEmbedding Interface
• Envoyまわりの人たちが中心のコミュニティ
主導でメンテされている
• Google, Tetrate…
Tetrate
34. Wasm Runtimes
※ざっと見ただけなので不正確な紹介になっている可能性があります
• Wasmtime
• Bytecode alliance project
• リファレンス実装的側面がある
• JITネイティブコード生成バックエンドはCranelift
• Wasmer
• Wasmer社が開発している
• バックエンドはCranelift, singlepass, LLVM
• Lucet
• Bycode alliance project. Fastly社由来
• CDNで使われている. AOTができる. Wasmtimeと多くのコンポーネントを共有
• WAVM
• LLVMをつかってコードを生成するらしい
• Wasm3
• JITをしない代わりに組み込みやすく、高速なインタプリタ
• V8
• 言わずと知れたやつ. みなさんが思ってるよりは組み込みやすい
ほかにもいっぱいあるはず
37. Summary
• Wasmは複合的なアツさをもつ
+ Javaが目指したもの (Portable/Platform-Independent)
+ CLIが目指したもの (Language-Independent)
+ NaClが目指したもの/eBPF (Safe)
+ Lua (Open)
• 特にOpenさが多様な応用先を生む
• 例えば以下のようなspecがある
• WASI
• Proxy-wasm
• これから色々な分野で応用されていくはず
• あなたも君だけのWasm Embedding Interfaceを考えよう