diff options
Diffstat (limited to 'docs/research/068-opaque-app-core.md')
| -rw-r--r-- | docs/research/068-opaque-app-core.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/docs/research/068-opaque-app-core.md b/docs/research/068-opaque-app-core.md new file mode 100644 index 0000000..419338f --- /dev/null +++ b/docs/research/068-opaque-app-core.md @@ -0,0 +1,74 @@ +# 068 — 문서 해석을 떼어낸 마이크로 실행 코어 + +2026-09-24. Linux AArch64, GCC 14.2, C17 `-O2`. [066](066-application-boundary.md)의 +첫 경계 수정이다. 목적은 새 운영체제 기능을 늘리는 것이 아니라, 모든 앱이 +링크해야 하는 실행 코어에서 문서 전용 연산을 제거하는 것이다. + +`PureRuntime`은 이제 앱 정의를 불투명 포인터로 보관한다. 코어는 입력 접수, +작업 슬롯·바이트 예산, 완료, 결과 대여, 취소, 영역 간 전달을 관리한다. +문서의 필드 선택·응답 구간·splice 계산은 선택형 `store-port.c`가 해석한다. +코어 아카이브는 `runtime.o` 한 개이며 `evaluate.o`나 `PureProgram`을 +포함하지 않는다. scalar 앱은 정의 포인터 없이 같은 코어를 쓴다. +비동기 효과는 원시 입력을 빌려 주고, 선택한 호스트가 문서 규칙을 적용한 +뒤 입력 내부의 응답 구간을 돌려준다. 코어는 이 대여 범위를 검사한다. + +| 비용 | 이전 067 | 이번 결과 | 차이 | +|---|---:|---:|---:| +| 기본 코어 오브젝트 `text` | 5,980 B | **4,632 B** | -1,348 B | +| 비동기 코어 오브젝트 `text` | 7,328 B | **5,724 B** | -1,604 B | +| 기본 영역 / 작업 슬롯 | 128 / 216 B | **120 / 216 B** | -8 / 0 B | +| 계측 영역 | 200 B | **192 B** | -8 B | +| 소스 CLI / HTTP 링크 `text` | 35,855 / 43,826 B | **35,743 / 43,950 B** | -112 / +124 B | +| 고정 CLI / HTTP 링크 `text` | 19,316 / 26,437 B | **19,204 / 26,625 B** | -112 / +188 B | +| 고정 / 소스 TUI 링크 `text` | 32,071 / 48,676 B | **31,959 / 48,572 B** | -112 / -104 B | +| 비동기 소스 HTTP 링크 `text` | 48,537 B | **48,241 B** | -296 B | + +기본 코어의 `text`는 약 22.5% 줄었지만, **코어 절감량을 전체 앱 절감량으로 +말할 수 없다.** 문서 해석은 선택한 호스트에 필요하고, 특히 고정 HTTP 실행물은 +188 B 커졌다. 그래서 해당 호스트의 Linux/GCC 회귀 상한을 26,624→26,880 B로 +검토해 조정했다. 코어 상한은 6,144→4,864 B, 비동기 코어 상한은 +7,680→6,144 B로 낮췄다. 두 코어의 `data`/`bss`는 각각 0 B다. +이 수치는 오브젝트·링크 섹션이고 libc, 스택, 파일 매핑, payload와 +전체 프로세스 메모리를 포함하지 않는다. + +실제 1 MiB 문서 검사에서는 소스·고정 CLI 편집 피크가 모두 2,128 KiB, +고정/소스 TUI는 3,168/3,200 KiB였다. 고정 HTTP 호스트의 테스트 중 피크는 +2,112 KiB였다. 이전 런과의 RSS 인과 차이는 주장하지 않는다. 입력의 +할당·복사 계약도 이번 변경으로 자동 최적화된 것은 아니다. + +`check-release`, `check-async`, `check-async-server`, `check-fixed-server`, +`check-mirror`, `check-tui`, `check-source-tui`, `check-portable`을 통과했다. +동기 고정·소스 HTTP와 선택형 비동기 소스 HTTP는 각각 1,024개 실제 +8 KiB 문서, 8개 동시 클라이언트, 4,096개 작업에서 같은 최종 문서 해시를 +만들었다. 각 호스트는 종료 시 활성 작업·보존 payload가 0이었고, +측정 피크 RSS는 고정 1,680 KiB, 소스 1,712 KiB, 비동기 소스 1,760 KiB였다. +이는 기능·자원 회귀 검사이며 처리량 우위의 증거는 아니다. +선택형 TLS 피어와 서버 전용 피어도 인증·외부 클라이언트·1 MiB 문서· +재시작 검사를 통과했다. 링크 `text`는 각각 46,894 / 43,422 B이고, +OpenSSL 공유 라이브러리의 코드·메모리는 이 섹션 크기에 포함되지 않는다. +ASan/UBSan을 적용한 C 계약 검사도 통과했다. 이 환경의 ptrace 아래에서는 +LeakSanitizer가 실행되지 않아 해당 검사에서는 누수 탐지를 끄고 실행했다. +기존 해시의 Zig scalar 정적 라이브러리를 현재 C 호스트와 다시 링크한 +세 인스턴스 입력·저장·복원 검사와 고정 정의 두 인스턴스 검사도 통과했다. +Zig 자체를 새로 빌드한 +증거는 아니다. + +[새 소스 묶음](../../prototypes/connections/results/2026-09-24-opaque-core/pure-source-preview.tar.gz)은 +171개 파일, 334,682 B다. [깨끗한 추출 검사](../../prototypes/connections/results/2026-09-24-opaque-core/source-package-check.json)는 +C·TUI·문서 RSS·수정한 `.pure` 동작·1 MiB 영역 간 전달·선택형 저장 형식 +내보내기·Linux 릴리스 경로를 다시 실행했다. +[소스 CLI](../../prototypes/connections/results/2026-09-24-opaque-core/pure-document-source-cli-linux-aarch64.tar.gz), +[고정 CLI](../../prototypes/connections/results/2026-09-24-opaque-core/pure-document-fixed-cli-linux-aarch64.tar.gz), +[고정 CLI+TUI](../../prototypes/connections/results/2026-09-24-opaque-core/pure-document-fixed-cli-tui-linux-aarch64.tar.gz), +[소스 CLI+TUI](../../prototypes/connections/results/2026-09-24-opaque-core/pure-document-source-cli-tui-linux-aarch64.tar.gz)는 +각각 이동 후 실제 문서 작업을 통과했다. 압축 크기는 순서대로 +22,655 / 12,886 / 31,965 / 51,005 B다. 압축 크기는 RSS가 아니다. + +이 변경으로 하나의 작성 가능한 앱 모델이 생긴 것은 아니다. 코어에는 여전히 +문서에서 물려받은 64 B ASCII 키와 `READ`/`WRITE` 두 입력 종류가 있다. +scalar 규칙과 문서 효과는 서로 다른 작성 모델이며, 네트워크/RPC와 UI의 +일반 연결도 아직 합쳐지지 않았다. 다음 검증은 실제 앱의 숫자 정책이 문서 +수정을 허용·거절하는 한 경로를 동일한 작성 정의에서 실행하는 것이다. +그때도 문서·네트워크·UI 코드를 기본 코어에 넣지 않고, 선택한 앱의 +전체 링크 비용·프로세스 RSS·작업별 보존 바이트를 함께 비교해야 한다. +macOS arm64 빌드와 실행은 아직 수행하지 않았다. |
