Categories: ニュース

NASAが「SpaceWasm」公開、Wasm 1.0を宇宙機の組み込みで動かす

NASAジェット推進研究所(JPL)が、探査機に載せる組み込みソフトウェア向けのWebAssemblyインタープリター「SpaceWasm」をオープンソースで公開した。Apache 2.0ライセンスのもと、Rust言語で実装している。

WebAssembly(Wasm)は、もともとWebブラウザー上でプログラムを高速に動かすために作られた実行形式だ。特定のハードウェアやOSに依存せず、外部から与えられたプログラムを隔離された環境(サンドボックス)で動かせる。SpaceWasmは、この仕組みを宇宙機の飛行ソフトウェアに持ち込むための実装で、Wasm 1.0仕様に沿った命令列を機上で解釈して実行する。

JPLが挙げる狙いは4つある。1つは指令列の標準化だ。火星探査車を走らせる、アームを操作する、温度が正常範囲にあるか確認するといった高度な活動は、通常、飛行ソフトウェア本体の外側に指令列として書かれる。ただその形式や能力はミッションごとにばらばらで、実装が分断されてきた。産業界の標準規格を使うことで、この分断を解消する。

2つ目は隔離実行だ。飛行ソフトウェアは要求も適用範囲も厳しく、開発に費用と時間がかかる。新しい機能を1つ検証するにも、システム全体との相互作用を確かめる必要があり、検証期間が延びて試験設備の取り合いも起きる。結果として、新しい自律制御ソフトウェアを実際に飛ばすまでの障壁が高くなっていた。Wasmを使えば、信頼度の低い実行ファイルでも、飛行ソフトウェア側がアクセス範囲と計算時間を制限しながら、健全性と安全性を監視した上で機上に載せられる。残る2つは、別のプラットフォームへの移植が容易になる可搬性と、標準規格を採用することで既存の開発ツール群や研究成果を活用できる点だ。

宇宙機向けならではの制約も設計に織り込んでいる。動的なメモリー確保は、ページと呼ぶ固定サイズのブロック単位に限る。解放が確保に先行することはなく、ページ内の領域は途中で伸縮させず、メモリー使用量は決定論的でなければならない。確保に失敗しても処理を中断させない。Rustの標準的なメモリー確保ではこれらを満たせないため、独自のデータ構造を用意した。

小型の宇宙機ではメモリーの上限も厳しい。多くのWasmインタープリターは、実行ファイル全体を1つの連続した領域に読み込む必要がある。しかし飛行ソフトウェアはメモリーの用途を固定的に割り当てるため、この前提が成り立たない。SpaceWasmは、ファイルシステムから読み出した断片を順次渡していく「ストリーミング」方式に対応し、ピーク時のメモリー使用量を抑えた。

処理速度への配慮もある。Wasmのバイトコードは、小さく検証しやすい形になっている代わりに、そのまま解釈すると実行が遅い。SpaceWasmは復号の過程でバイトコードを独自の中間表現に変換し、解釈に適した形にしてから実行する。性能の劣化を追跡するため、組み込み向けの定番ベンチマーク「Coremark」で計測している。

要求仕様はドイツ航空宇宙センター(DLR)の類似研究をもとにしており、実装の一部もDLRのWasmインタープリターやWasmtime、WABTといった既存のオープンソースから取り入れている。

関連情報

FabScene編集部

FabScene編集部