第 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 第一階段的設計按以下優先級排序:

  1. 可移植性優先。BuF 編譯一次,在任何已適配宿主中都可以執行;執行層與適配層之間透過穩定的 Universal_Instruction 解耦。
  2. 多語言實作。執行層暴露語言中立的 Runtime_Interface,允許 Rust / Go / TypeScript 等多種實作共存與替換,不綁定單一語言生態。
  3. 可證明的正確性。BuF 解析與序列化必須滿足往返一致性,生命週期狀態機必須滿足合法遷移性質,跨平台行為必須滿足序列一致性。這些性質以可被屬性測試(PBT)驗證的形式表達。
  4. 安全可觀測。預設安全(強制簽章模式可開),預設靜默(除錯事件預設關閉),錯誤結構化(統一錯誤模型 + 來源層標註 + 錯誤鏈)。

1.4 三層結構概覽

Fayger 在體系結構上劃分為三層:

  • 載入層(Loader Layer):BuF 與外部世界之間的邊界,負責讀、寫、檢核與版本協商。
  • 執行層(Runtime Layer):BuF 語意的執行者,支援多種語言實作,透過統一介面契約互換。
  • 適配層(Adapter Layer):宿主與 Fayger 之間的邊界,負責通用指令與系統呼叫之間的雙向轉譯。

每一層都有清楚的對外契約與對內分工。詳細職責見下一章。

1.5 與現有體系的對照

現有體系Fayger 對應物
JVM ClassLoader → Verifier → ExecutionEngineLoader Layer → Runtime Layer
JVM class file(magic / version / constant pool)BuF 製品(Header / Manifest / Sections / Trailer)
OCI Image Manifest + LayersBuF_Manifest + Sections
OCI Runtime SpecRuntime_Interface
containerd vs runcRuntime_Layer 編排 vs Runtime_Implementation 執行
WASI capability-based securityAdapter_Layer 能力裁剪
JNI / extism host functionsUniversal_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 章:演進路線