BLUEPRINT
第 1 章 引言
1.1 背景
Fay 生態需要一個能夠遮蔽終端與宿主差異、讓同一份 Fay 製品在桌面、伺服器、瀏覽器與嵌入式宿主中一致執行的執行底座。這個底座就是 Fayger。
類比已有體系:
- 之於 Java 位元組碼,Fayger 之於 BuF,相當於 JVM。
- 之於容器映像檔,Fayger 之於 BuF,相當於 Docker / OCI Runtime。
Fayger 不規定 Fay 本身的語意如何被作者寫出,它只規定 Fay 製品如何被載入、檢核、調度、執行,以及它與宿主之間如何互不汙染。
1.2 定位
Fayger 是一個虛擬執行環境(Virtual Runtime Environment):
- 接收一種被稱為 BuF(Built-up Fay) 的封裝實體作為輸入。
- 完成 BuF 的讀取、結構檢核、版本協商、簽章驗證、載入。
- 在多種語言實作的執行層中之一裡把 BuF 直譯執行起來。
- 透過適配層把執行過程中的「通用指令」轉譯為目標終端的系統能力。
使用者視角下的體驗是:把 BuF 交給 Fayger,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 vs runc | Runtime_Layer 編排 vs 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:適配層中針對某一終端 / 作業系統的具體適配器。
- Universal_Instruction:執行層與適配層之間的、與平台無關的指令。
- BuF_Instance:被載入到執行層中、可執行或執行中的 BuF 執行時實體。
- Lifecycle_State:BuF_Instance 的生命週期狀態。
- Host_Environment:Fayger 實際執行所在的終端、作業系統或宿主應用程式行程。
- BuF_Source:BuF 的儲存後端抽象(本機檔案、網路、物件儲存、使用者自訂後端),最低要求暴露隨機存取讀取能力。
- LoadProfile:載入時由呼叫方提供的執行環境畫像,驅動 Section 選擇,至少包含目標終端類別、能力集、體積上限與執行時特徵位。
- SectionVisibility:Section 的可見性等級,取值
Required(缺失即失敗)或Optional(缺失則降級)。 - LoadStrategy:載入層的取數策略,取值
Eager(一次性讀完所有被選中 Section)或Lazy(僅讀標頭 + 索引,段體首次存取時再讀)。
1.7 藍圖組織
後續章節按下列順序展開:
- 第 2 章:總體架構
- 第 3 章:載入層
- 第 4 章:執行層
- 第 5 章:適配層
- 第 6 章:錯誤與可觀測性
- 第 7 章:安全模型
- 第 8 章:演進路線
