Mozilla、Fastly、Intel、Red Hat
WebAssembly 形式で提供され、ブラウザの外部で実行できる移植可能なプログラムを作成するには、API を使用することをお勧めします。
のXNUMXつ
保護のために、ナノプロセスの概念を使用することが提案されています。ナノプロセスでは、各依存関係モジュールが個別に分離された WebAssembly モジュールに分割され、その権限はこのモジュールにのみ関連して設定されます (たとえば、文字列を処理するライブラリは、ネットワークソケットまたはファイルを開くことができます)。 プロセスの分離とは異なり、WebAssembly ハンドラーは軽量で、追加のリソースをほとんど必要としません。ハンドラー間の対話は、通常の関数を呼び出すよりもそれほど遅くありません。 分離は、個々のモジュールのレベルだけでなく、たとえば共通メモリ領域を操作する必要があるモジュールのグループのレベルでも行うことができます。
要求された権限は、依存関係自体のレベルで決定することも、親モジュールによってチェーンに沿って依存関係に委任することもできます (WASI のリソースは、特別なタイプのファイル記述子 (機能) に関連付けられています)。 たとえば、特定のディレクトリとシステム コールにアクセスする機能をモジュールに委任することができ、攻撃中にモジュールの開発インフラストラクチャが侵害された場合、または脆弱性が特定された場合、アクセスはこれらのリソースにのみ制限されます。 モジュール作成者によるリソース宣言は、テキスト処理モジュールがネットワーク接続を開く許可を要求する場合など、不審なアクティビティの指標となる可能性があります。 最初に設定されたアクセス許可がチェックされ、変更された場合は、ローカル モジュールの署名が更新されるまで依存関係の読み込みが拒否されます。
Bytecode Alliance の傘下での共同開発の場合
-
ワスムタイム — WASI 拡張機能を備えた WebAssembly アプリケーションを通常のスタンドアロン アプリケーションとして実行するためのランタイム。 特別なコマンド ライン ユーティリティを使用した WebAssembly バイトコードの起動と、既製の実行可能ファイルのリンク (wasmtime はライブラリとしてアプリケーションに組み込まれています) の両方をサポートします。 Wasmtime は、さまざまなアプリケーションに合わせてランタイムを拡張できる柔軟なモジュール構造を備えています。たとえば、リソースが限られているデバイス向けに必要最低限のバージョンを作成できます。 -
ルセット — WebAssembly 形式のプログラムを実行するためのコンパイラおよびランタイム。 特徴的な特徴 Lucet は、直接実行に適したマシン コードへの JIT の代わりに、本格的な予測コンパイル (AOT、事前) を使用します。 このプロジェクトは Fastly によって開発され、最小限のリソースを消費し、新しいインスタンスを非常に迅速に起動するように最適化されています (Fastly は、各リクエストで起動されるハンドラーに WebAssembly を使用するクラウド エッジ コンピューティング エンジンで Lucet を使用します)。 共同プロジェクトの一環として、Lucet コンパイラは Wasmtime をベースとして使用するように変換される予定です。 -
ワム (WebAssembly Micro Runtime) は、WebAssembly を実行するためのもう XNUMX つのランタイムで、元々はモノのインターネット デバイスで使用するために Intel によって開発されました。 WAMR はリソース消費を最小限に抑えるように最適化されており、少量の RAM を搭載したデバイスで使用できます。 このプロジェクトには、WebAssembly バイトコードを実行するためのインタープリターと仮想マシン、API (Libc のサブセット)、および動的アプリケーション管理のためのツールが含まれています。 -
クレーンリフト — ハードウェア アーキテクチャに依存しない中間表現を、特定のハードウェア プラットフォームに最適化された実行可能なマシン コードに変換するコード ジェネレーター。 Cranelift は、非常に高速な結果生成のための関数コンパイルの並列化をサポートしており、JIT コンパイラーの作成に使用できます (Cranelift ベースの JIT は Wasmtime 仮想マシンで使用されます)。 -
WASI共通 — オペレーティング システムとの対話を整理するための WASI (WebAssembly System Interface) API の別個の実装。 -
カーゴワシ — ブラウザ外で WebAssembly を使用するための WASI インターフェイスを使用して、Rust コードを WebAssembly バイトコードにコンパイルするコマンドを実装する Cargo パッケージ マネージャーのモジュール。 -
ワット иワスパーサー — テキスト (WAT、WAST) および WebAssembly バイトコードのバイナリ表現を解析するためのパーサー。
要約すると、WebAssembly は Asm.js によく似ていますが、
出所: オープンネット.ru