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 에 건네주면 Fayger 가 실행시켜 줍니다.
1.3 설계 원칙
Fayger 1 단계의 설계는 다음 우선순위를 따릅니다:
- 이식성 우선. BuF 는 한 번 컴파일하면, 적응이 끝난 어떤 호스트에서도 실행할 수 있습니다. 런타임 계층과 어댑터 계층은 안정된 Universal_Instruction 으로 분리됩니다.
- 다중 언어 구현. 런타임 계층은 언어 중립적인 Runtime_Interface 를 노출하여, Rust / Go / TypeScript 등의 구현이 공존하고 교체 가능하게 합니다. 단일 언어 생태계에 묶이지 않습니다.
- 증명 가능한 정확성. BuF 의 파싱·직렬화는 라운드트립 동치성을 충족하고, 라이프사이클 상태 기계는 합법 전이 성질을 충족하며, 크로스 플랫폼 동작은 시퀀스 동치성을 충족합니다. 이러한 성질은 속성 기반 테스트(PBT) 로 검증 가능한 형태로 표현됩니다.
- 기본적으로 안전·관측 가능. 기본 안전(서명 강제 모드 가능), 기본 무음(디버그 이벤트 기본 꺼짐), 구조화 오류(통일 오류 모델 + 발생 계층 태그 + 원인 체인).
1.4 3 계층 구조 개관
Fayger 는 체계상 3 계층으로 나눕니다:
- 로더 계층(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 오케스트레이션 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 의 3 계층.
- 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 장 로드맵
