aboutsummaryrefslogtreecommitdiffstats
path: root/docs/research/068-opaque-app-core.md
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-24 17:14:54 +0100
committereunhhu <[email protected]>2026-09-24 17:14:54 +0100
commitb1ce1927022d374198441afafeb27199fc8a052a (patch)
tree6021f175f4c67ed03b44240eaa2f90d846f12f6f /docs/research/068-opaque-app-core.md
parentd34f9426d5317a1948f12f229439946728bc342a (diff)
downloadpure-b1ce1927022d374198441afafeb27199fc8a052a.tar.gz
pure-b1ce1927022d374198441afafeb27199fc8a052a.zip
Establish native micro runtime checkpoint
Diffstat (limited to 'docs/research/068-opaque-app-core.md')
-rw-r--r--docs/research/068-opaque-app-core.md74
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 빌드와 실행은 아직 수행하지 않았다.