WebAssemblyをあらゆるプラットフォームでセキュアに実行できるようにする「Bytecode Alliance」発足。インテル、Mozilla、Red Hatなど

2019年11月19日

WebAssemblyは、Webブラウザ上でネイティブコードのように高速に実行できるバイナリフォーマットして策定された標準仕様で、すでにChromeやFirefox、Edge、Safariなどの主要ブラウザでサポートが実現されています。

このWebAssemblyをWebブラウザだけでなく、デスクトップPCやサーバ、IoTデバイスなどあらゆる環境で、セキュアに実行することを目指した団体「Bytecode Alliance」が発足しました。

Bytecode Allianceの創立メンバーは、インテル、Mozilla、Red Hat、Fastlyの4社。

fig

前述したように、WebAssemblyはもともと、Webブラウザで実行可能で高速なバイナリフォーマットの実現を目指して開発がスタートし、2017年11月にはChrome/Firefox/Edge/Safariの主要ブラウザで実装が出そろいました

そして2019年4月に、CDNプロバイダのFastlyはWebAssemblyの汎用ランタイム「Lucet」をオープンソースで公開

と同時に同社とMozillaは、WebAssemblyにファイルやネットワーク、メモリなどのシステムリソースへ安全にアクセス可能にするAPIの標準仕様「WASI」(WebAssembly System Interface:ワズィ)の策定を開始します。

これによりWebAssemblyはWebブラウザだけでなく、さまざまなプラットフォームで実行可能な汎用バイナリフォーマットになるという方向性が示されました。

あらゆるプラットフォームでWebAssemblyをセキュアに実行する

今回設立が発表されたBytecode Allianceは、このWebAssemblyの方向性を推し進めるために、あらゆるプラットフォームでWebAssemblyのバイトコードを高速かつ効率的に実行できるようにするだけでなく、セキュアに実行されることを確立することを目指しています。

Bytecode AllianceのWebサイトによる説明を引用します。

The Bytecode Alliance is committed to establishing a capable, secure platform that allows application developers and service providers to confidently run untrusted code, on any infrastructure, for any operating system or device, leveraging decades of experience doing so inside web browsers.

バイトコードアライアンスは、アプリケーション開発者やサービスプロバイダーが、あらゆるインフラストラクチャ、あらゆるオペレーティングシステムやデバイスにおいて、信頼できないコードであっても自信を持って実行可能な、高性能で安全なプラットフォームの確立に、これまで何十年ものWebブラウザでの実績を活かして取り組んでいきます。

この背景には、アプリケーションの多くがさまざまな既存のフレームワークやライブラリ、モジュール、コンポーネントなどを積極的に組み合わせて構築されるという現実があります。

これからのソフトウェア開発において、そうしたソフトウェアの再利用はますます増えていくことになるはずです。そしてそのすべてについて、脆弱性はないのか、データの不整合を起こさないのか、悪意のある動作はしないのか、といったこと、つまりセキュアであることを開発者が責任をもっていちいち確認することは事実上不可能です。

Bytecode Allianceはこうした課題に対して、WebAssemblyプラットフォームとして解決策を提示することを目指しているのです。

Nanoprocess:ナノプロセスによる解決

そしてBytecode Allianceが提案している解決方法が、「Nanoprocess」(ナノプロセス)機能です。

Nanoprocessを手短に説明するとすれば、モジュールごとに小さな仮想マシンのようなものを用意して、すべてを安全に分離して実行させる、という仕組みです。

Announcing the Bytecode Alliance: Building a secure by default, composable future for WebAssembly」から説明を引用します。

WebAssembly can provide the kind of isolation that makes it safe to run untrusted code. We can have an architecture that’s like Unix’s many small processes, or like containers and microservices.

WebAssemblyは信頼されていないコードを安全に実行するための分離機能を提供することができます。Unixの小さなプロセスやコンテナやマイクロサービスのようなものを実現できるのです。

But this isolation is much lighter weight, and the communication between them isn’t much slower than a regular function call.

しかしこの分離機能はずっと軽量で、しかも相互の通信機能は通常のファンクションコールよりも大幅に遅いわけではありません。

This means you can use them to wrap a single WebAssembly module instance, or a small collection of module instances that want to share things like memory among themselves.

つまり、ひとつひとつのWebAssemblyモジュールインスタンスあるいはメモリの共有を望む少数のモジュールをまとめたインスタンスごとにラップできる、ということです。

詳しい説明は「Announcing the Bytecode Alliance: Building a secure by default, composable future for WebAssembly」をご参照ください。

バイトコードのレベルでセキュアな動作を確保できるというのは、プログラマにとって非常に期待が大きいはずです。Bytecode AllianceはこのNanoprocessの実装を、まずFirefoxで実装するとしています

WebAssemblyはバイトコードであるため、C/C++、Rust、Go、AssemblyScript(TypeScriptをWebAssembly対応にしたもの)、LLVMなど、さまざまな高級言語やコンパイラなどで利用できるようになっています。

WebAssemblyがプラットフォームとしてセキュアであることを確立するBytecode Allianceの動きは、こうした言語やコンパイラの世界にも大きな影響を与えることになるのではないでしょうか。

参考

このエントリーをはてなブックマークに追加
follow us in feedly




カテゴリ

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed


最新記事10本