8月25日、The New Stackに「WebAssemblyの3つの柱」が公開された。
この記事はWebAssemblyの3つの柱であるセキュリティ、ポータビリティ、パフォーマンスについて説明し、なぜ注目されているのかを説明している。
WebAssemblyの特徴、注目すべき理由、今後数年間にわたって新世代のソフトウェアを強化すると確信している理由について、高いレベルで述べている。
セキュリティ
最近では、サプライチェーンの問題、暗号化された攻撃、データ漏洩などが一般的なニュースになっており、多くの人が関心を寄せている。
WebAssemblyは、セキュリティサンドボックスを始めとする様々な方法で、セキュリティ対策に大きな力を発揮する。
WASMが実行されるとき、コードはネットワークやファイルシステムなど、何にもアクセスできないようになっている。
これはDeny-by-Defaultセキュリティモデルと呼ばれる。
WASMサンドボックス内で実行されているコードが外の世界と対話するためには、ホスト機能へのアクセスを明示的に許可する必要がある。
Webブラウザは、fetch APIやDOMへのアクセスなど、WASMモジュールに特定の能力を与えることができる。
クラウド環境のような他のホストは、WASI (WebAssembly System Interface) を使用して、モジュールにファイルシステム、ランダム(/dev/urandomなど)およびシステム時刻のような一般的なものへのアクセスを与えることができる。
これらにより、WASM モジュール内のコードは、動作に必要なリソースへのアクセスのみが与えられ、それ以上は与えられないようになっている。
サプライチェーン攻撃の増加に対抗するために、WebAssemblyモジュールの暗号署名を仕様の標準とするための努力も行われている。
信頼できる鍵でモジュールに署名し、システムがそのモジュールを実行しようとするたびにその署名が検証される機能は大きな勝利であり、WebAssembly を使ってアプリケーションを構築する際の “Defense in Depth” の考え方を定着させるのに役立つ。
ソフトウェアベンダーがAPIライブラリをWASMモジュールとして配布し始めたら、特に重要になるだろう。
クロスランゲージモジュールリンク(異なる言語で作成されたモジュールがメモリや機能を共有する機能)を利用できるだけでなく、モジュールがベンダーによって作成され、改ざんされていないことを検証できる。
移植性
モジュールをリンクするという考え方は、2つ目の柱である「移植性」につながる。
WASMの移植性については、「言語の移植性」と「プラットフォームの移植性」の2つの観点から考える。
言語の移植性とは、Rustのようなある言語で書かれたモジュールが、Goのような別の言語で書かれたシステムの中で動作する能力のことである。
WASMランタイムは他のソフトウェアに組み込むことができるため、チームの主要言語では実現できない特殊なコンポーネントを導入することができる。
この概念は、異なる言語で書かれた複数のWASMモジュールを組み合わせて1つのソフトウェアを構成するアプリケーションにも適用できる。
例えば、SuborbitalがメンテナンスしているAtmoフレームワークが挙げられる。
プラットフォームの移植性については、WebAssemblyはハードウェアのアーキテクチャに縛られないため、再コンパイルの必要なく複数の異なるプラットフォームで実行することができる。
これにより、例えば1つのWASMファイルを作成して、IoTデバイスとクラウドの仮想マシンの両方で実行することができる。
WASMモジュールの実行時には、AOT(Ahead-of-Time)またはJIT(Just-in-Time)により、マシンネイティブコードにコンパイルされる。
ChromeのV8やWasmtime、WasmerなどのWASMランタイムは、このコンパイルを自動的に実行するので、どんなモジュールでもとても簡単に実行できる。
例えば、トラフィックの急増により特定のモジュールにリクエストが殺到した場合に、コードをクラウドインスタンスからエッジコンピューティングネットワークに自動的に移動させるようなシナリオで、この機能が役立つことが期待される。
パフォーマンス
最後の柱はパフォーマンスである。
WebAssemblyは、ネイティブまたはネイティブに近い速度でコードを実行することを目的としている。
アプリケーションのパフォーマンスには、言語、ハードウェア、ガベージコレクション、仮想化など、さまざまな要素が関係している。
WebAssemblyは、実行時に各プラットフォームに最適化することで、簡単に高性能で実行できるコードの表現である。
WebAssemblyはまだ始まったばかりだが、数え切れないほどの年月をかけて最適化されたV8 JavaScriptエンジンのパフォーマンスに、すでに匹敵するものとなっている。
WebAssemblyをコンパイルするすべての言語は、WASMランタイムにもたらされる将来のパフォーマンス向上の恩恵を受けることができ、これは誰にとっても大きなメリットだ。
自分が作っているソフトウェアについて考え、開発プラットフォームのどの部分が最も重要なのかを自問してみてほしい。
ここで説明した3つの柱のうち、少なくとも2つはあなたのビジネスにとって重要な要素であり、WebAssemblyを技術として採用することで、コードの重要な属性を向上させることができると考えている。
WASMが開発者の手を煩わせることなくソフトウェアのワークフローを支える基盤技術となることを期待している。
WebAssemblyには最初から優れた特性が組み込まれており、コードの安全性、移植性、パフォーマンスが保証されている。