0.1.0-draft

0004 · 실행·빌드·배포

상태: 제안 · 명세 버전: 0.1.0-draft

초기 Rust·V8 호출 경계와 플랫폼 빌드 smoke의 비공개 범위는 내부 V8 부팅 실험을 참고한다. 내부 smoke는 이 제안 명세의 공개 런타임·번들 호환 계약을 완료한 것이 아니다.

모바일 실행 경계

모바일 앱은 V8 어댑터, 프레임워크 어댑터, 제한된 DOM façade, 별도 JavaScript 호스트 API, Rust UI 코어, 스타일·레이아웃, GPU 렌더러, Android·iOS 호스트를 별도 책임으로 둔다. DOM 작업은 Rust 문서 트리로, fetch 같은 네트워크 API는 별도 NetworkHost 계약과 전송 계층으로 간다. 두 기능은 제안 단계이며 현재 공개 지원이 아니다. 첫 엔진 목표는 Android·iOS의 같은 V8 소스 리비전이며 iOS 실기기에서는 JIT 없는 실행을 확인해야 한다.

OS 호스트는 GPU 표면, 입력·IME·접근성 연결을 제공한다. 일반 요소는 GPU로 그리지만 WebView·지도·카메라 등은 명시적인 플랫폼 컴포넌트다. 화면 회전·백그라운드 복귀·GPU 표면 재생성의 복구와 실패 표시가 첫 모바일 앱의 적합성 항목이다.

빌드 산출물

대상산출물의 의미첫 구현 범위
웹같은 앱 코드의 브라우저 DOM·CSS 빌드React·Vite
모바일 JSV8에 전달할 JS와 소스맵·에셋 참조첫 수직 구현은 단일 번들, 배포 목표는 청크 그래프
모바일 스타일지원 CSS만 담은 버전 있는 스타일 데이터카운터 화면 최소 집합
앱 바이너리V8, Rust 코어, GPU 렌더러, 플랫폼 호스트Android·iOS 실기기

단일 번들은 첫 수직 구현의 임시 범위다. 정식 모바일 배포 형식은 진입점·공유 코드·기능별 JS 청크와 CSS·에셋을 해시로 참조하는 청크 그래프를 목표로 한다. ESM 청크 로딩과 동적 import()는 별도 적합성 관문이다. Rspack, Vue·Svelte의 산출물도 각각 검증한다. 웹과 모바일은 원본 코드가 같아도 플랫폼별 산출물은 다르다.

청크 로더는 R15의 호환 모델과 S06의 단일 번들 경로를 바탕으로 최소 로컬 매니페스트를 먼저 읽는다. 이 단계의 매니페스트는 허용된 청크와 에셋을 식별하는 개발·내장 실행 형식이며 원격 배포 승인을 뜻하지 않는다. D02에서 같은 스키마에 서명·채널·롤백에 필요한 릴리스 필드를 더한다. 공통 필드와 릴리스 전용 필드의 버전 규칙은 X01 구현 전에 확정한다.

번들·호스트 호환성

릴리스 매니페스트에는 적어도 번들 형식 버전, 필요한 엔진·호스트 API 버전, 플랫폼, 채널, 진입점, 기능별 청크와 의존성, JS·스타일·에셋 해시를 기록한다. 최소 로컬·개발 매니페스트는 현재 실행에 필요한 파일과 호환 버전을 식별하며, 서명·채널·원격 롤아웃을 전제하지 않는다. 릴리스 서명 형식과 호환성 거부 오류는 미정이다. 빌드는 미지원 요소·CSS·API를 식별 가능한 위치와 함께 진단해야 한다. 빌드 도구가 발견하지 못하는 동적 참조는 런타임 오류 계약도 필요하다.

OTA

OTA는 React Native 앱의 JS·스타일·이미지 변경 배포 수준을 기본 목표로 하며, 스피논은 변경된 청크·에셋만 전송하고 기능별 진입점을 선택해 배포하는 것을 추가 목표로 한다. 기능별 배포라도 공유 청크가 바뀌면 영향을 받는 진입점의 의존성 검사를 거쳐야 한다. 다운로드와 기능별 공개 범위는 부분적으로 진행할 수 있지만, 기기에서 활성화하는 청크 조합은 서명된 하나의 일관된 릴리스 스냅샷이어야 한다. 누락된 청크나 혼합 버전으로 화면을 실행하지 않는다.

업데이트는 개발 HMR과 별개다. 네이티브 코드·V8·GPU 렌더러·호스트 API·권한이 바뀌면 새 앱 바이너리가 필요하다. 실행 중인 V8 모듈을 임의로 교체하는 것은 첫 배포 목표가 아니며, 기본 활성화 시점은 다음 앱 시작 또는 안전한 전체 재시작이다. 기능별 지연 로딩은 활성 스냅샷 안의 청크만 읽는다. 서명·해시·호환 버전 확인, 원자적 활성화, 실패 감지, 이전 스냅샷 또는 내장 버전으로 롤백을 제공한다. 플랫폼 정책과 앱 기능 변경 범위가 허용된 경우에만 출시하며, 스토어 심사 승인이나 모든 JS 기능 변경의 허용을 주장하지 않는다. 상세 경계는 OTA 설계에 둔다.