BLUEPRINT
第 1 章 はじめに
1.1 背景
Fay エコシステムには、端末とホストの差異を遮蔽し、同じ Fay 成果物がデスクトップ・サーバー・ブラウザ・組み込みホスト上で一貫して動作するための実行基盤が必要です。その基盤が Fayger です。
既存の体系との対比:
- Java バイトコードに対する JVM と同じ役割を、BuF に対して Fayger が果たします。
- コンテナイメージに対する Docker / OCI Runtime と同じ役割を、BuF に対して Fayger が果たします。
Fayger は Fay 自体の意味論をどう書き表すかは規定せず、Fay 成果物がどのように読み込まれ、検証され、スケジュールされ、実行されるか、そしてホストとどのように互いに汚染しないかだけを規定します。
1.2 位置付け
Fayger は 仮想実行環境(Virtual Runtime Environment) です:
- BuF(Built-up Fay) と呼ばれるパッケージ実体を入力として受け取ります。
- BuF の読み取り、構造検証、バージョン交渉、署名検証、ロードを完了します。
- 複数の言語実装からなるランタイム層のいずれかで BuF を解釈実行します。
- アダプタ層を通じて、実行中に生じた「汎用命令」を対象端末のシステム機能に翻訳します。
ユーザー視点での体験は、BuF を Fayger に渡せば動く、というものです。
1.3 設計原則
Fayger 第一フェーズの設計は次の優先順位に従います:
- 可搬性最優先。BuF は一度コンパイルすれば、適合済みのどのホストでも実行できます。ランタイム層とアダプタ層は安定した Universal_Instruction で疎結合化されます。
- 多言語実装。ランタイム層は言語非依存の Runtime_Interface を公開し、Rust / Go / TypeScript などの実装が共存・置換可能です。単一言語エコシステムへ縛られません。
- 証明可能な正しさ。BuF の解析・直列化はラウンドトリップ等価性を満たし、ライフサイクル状態機械は遷移合法性を満たし、クロスプラットフォーム動作は系列等価性を満たします。これらはプロパティベーステスト(PBT)で検証可能な形で表現されます。
- 既定で安全・観測可能。既定で安全(強制署名モードを切替可能)、既定で静か(デバッグイベントは既定オフ)、エラーは構造化(統一エラーモデル + 発生層タグ + 原因チェーン)。
1.4 三層構造の概観
Fayger は体系的に三層に分割されます:
- ロード層(Loader Layer):BuF と外界の境界。読み取り、書き込み、検証、バージョン交渉を担当します。
- ランタイム層(Runtime Layer):BuF 意味論の実行者。複数の言語実装をサポートし、統一インターフェイス契約で交換可能です。
- アダプタ層(Adapter Layer):ホストと Fayger の境界。汎用命令とシステム呼び出しの双方向翻訳を担当します。
各層は明確な対外契約と内部分担を持ちます。詳細は次章で扱います。
1.5 既存体系との対応
| 既存体系 | Fayger の対応物 |
|---|---|
| JVM ClassLoader → Verifier → ExecutionEngine | Loader Layer → Runtime Layer |
| JVM class file(magic / version / constant pool) | BuF 成果物(Header / Manifest / Sections / Trailer) |
| OCI Image Manifest + Layers | BuF_Manifest + Sections |
| OCI Runtime Spec | Runtime_Interface |
| containerd と runc | Runtime_Layer のオーケストレーションと Runtime_Implementation の実行 |
| WASI capability-based security | Adapter_Layer のケーパビリティ削減 |
| JNI / extism host functions | Universal_Instruction の host カテゴリ |
1.6 用語集
- Fayger:本ブループリントで定義する仮想実行環境。
- BuF(Built-up Fay):Fay の配布可能・ロード可能な実体。Fayger の入力単位。
- BuF_Manifest:BuF 内部のメタデータ目録(バージョン、エントリ、依存、ケーパビリティ、クォータ、署名など)。
- Loader_Layer / Runtime_Layer / Adapter_Layer:Fayger の三層。
- Runtime_Interface:ランタイム層の対外安定契約。
- Runtime_Implementation:ランタイム層の具体的な言語実装。
- Platform_Adapter:アダプタ層における特定の端末 / OS 向けアダプタ。
- Universal_Instruction:ランタイム層とアダプタ層の間で交わされるプラットフォーム非依存命令。
- BuF_Instance:ランタイム層にロードされ、実行可能または実行中の BuF ランタイム実体。
- Lifecycle_State:BuF_Instance のライフサイクル状態。
- Host_Environment:Fayger が実際に動作する端末・OS・ホストアプリプロセス。
- BuF_Source:BuF の格納バックエンド抽象(ローカルファイル、ネットワーク、オブジェクトストレージ、ユーザー定義バックエンド)。最低限ランダムアクセス読み出しを公開します。
- LoadProfile:呼び出し側がロード時に提供する実行環境プロファイル。Section 選択を駆動し、対象端末カテゴリ、ケーパビリティ集合、サイズ上限、ランタイム特性ビットなどを最低限含みます。
- SectionVisibility:Section の可視性レベル。
Required(欠落で失敗)またはOptional(欠落で縮退)。 - LoadStrategy:ロード層の取得戦略。
Eager(選択された全 Section を一括取得)またはLazy(先頭とインデックスのみ読み、本体は初回アクセス時に取得)。
1.7 ブループリント構成
以降の章は次の順で展開します:
- 第 2 章 全体アーキテクチャ
- 第 3 章 ロード層
- 第 4 章 ランタイム層
- 第 5 章 アダプタ層
- 第 6 章 エラーと可観測性
- 第 7 章 セキュリティモデル
- 第 8 章 ロードマップ
