Mozilla、Fastly、Intel、Red Hat は WebAssembly を汎用プラットフォームとして推進しています

Mozilla、Fastly、Intel、Red Hat ユナイテッド WebAssembly を、あらゆるインフラストラクチャ、オペレーティング システム、デバイスにわたって安全にコードを実行するためのユニバーサル プラットフォームにするためのテクノロジの開発における取り組みです。 Web ブラウザだけでなく WebAssembly を利用できるランタイムとコンパイラを共同開発するコミュニティが形成されました バイトコードアライアンス.

WebAssembly 形式で提供され、ブラウザの外部で実行できる移植可能なプログラムを作成するには、API を使用することをお勧めします。 ワシ (WebAssembly システム インターフェイス) は、オペレーティング システム (ファイル、ソケットなどを操作するための POSIX API) と直接対話するためのソフトウェア インターフェイスを提供します。 WASIを使用したアプリケーションの実行モデルの特徴は、アプリケーションがメインシステムから隔離されたサンドボックス環境で実行され、各リソース(ファイル、ディレクトリ、ソケット、システムコール)に対するアクションに対して機能管理に基づくセキュリティメカニズムを使用することです。など) アプリケーションには適切な権限を与える必要があります (宣言された機能へのアクセスのみが提供されます)。

のXNUMXつ ゴール 作成されたアライアンスは、多数の依存関係を持つ最新のモジュラー アプリケーションを配布する際の問題に対する解決策です。 このようなアプリケーションでは、あらゆる依存関係が脆弱性や攻撃の潜在的な原因となる可能性があります。 依存関係を制御すると、それに関連付けられたすべてのアプリケーションを制御できるようになります。 アプリケーションに対する信頼は、自動的にすべての依存関係に対する信頼を意味しますが、依存関係は多くの場合、アクティビティを制御できないサードパーティ チームによって開発および維持されます。 Bytecode Alliance のメンバーは、本質的に信頼できない WebAssembly アプリケーションを安全に実行するための総合的なソリューションを提供する予定です。

保護のために、ナノプロセスの概念を使用することが提案されています。ナノプロセスでは、各依存関係モジュールが個別に分離された WebAssembly モジュールに分割され、その権限はこのモジュールにのみ関連して設定されます (たとえば、文字列を処理するライブラリは、ネットワークソケットまたはファイルを開くことができます)。 プロセスの分離とは異なり、WebAssembly ハンドラーは軽量で、追加のリソースをほとんど必要としません。ハンドラー間の対話は、通常の関数を呼び出すよりもそれほど遅くありません。 分離は、個々のモジュールのレベルだけでなく、たとえば共通メモリ領域を操作する必要があるモジュールのグループのレベルでも行うことができます。

要求された権限は、依存関係自体のレベルで決定することも、親モジュールによってチェーンに沿って依存関係に委任することもできます (WASI のリソースは、特別なタイプのファイル記述子 (機能) に関連付けられています)。 たとえば、特定のディレクトリとシステム コールにアクセスする機能をモジュールに委任することができ、攻撃中にモジュールの開発インフラストラクチャが侵害された場合、または脆弱性が特定された場合、アクセスはこれらのリソースにのみ制限されます。 モジュール作成者によるリソース宣言は、テキスト処理モジュールがネットワーク接続を開く許可を要求する場合など、不審なアクティビティの指標となる可能性があります。 最初に設定されたアクセス許可がチェックされ、変更された場合は、ローカル モジュールの署名が更新されるまで依存関係の読み込みが拒否されます。

Bytecode Alliance の傘下での共同開発の場合 翻訳済み WebAssembly に関連するいくつか プロジェクト、以前はアライアンスの創設会社によって個別に開発されていました。

  • ワスムタイム — 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 によく似ていますが、 異なる これは、JavaScript に関連付けられていないバイナリ形式であり、さまざまなプログラミング言語からコンパイルされた低レベルの中間コードをブラウザーで実行できるという点です。 WebAssembly は明示的なメモリ管理を使用するため、ガベージ コレクターを必要としません。 WebAssembly に JIT を使用すると、ネイティブ コードに近いパフォーマンス レベルを達成できます。 WebAssembly の主な目標の XNUMX つは、移植性、予測可能な動作、および異なるプラットフォーム上での同一のコードの実行を保証することです。

出所: オープンネット.ru

コメントを追加します