← 목록
기타 2026-06-11 12KB 읽기 12분

원크라우니 스택 심층 적대감사 (딥리서치 대체)

작성일 2026-06-11 · 트랙 F4-심층적대감사 방법: 웹 딥리서치가 이 환경에서 미작동 → 코드베이스 심층 리서치로 대체. 읽기 위주 + 실제 컴파일·실행 재현(헤드리스 FB_STAT/PPM 증거). 원칙: 추측 금지. 코드/실행 증거만. 과장 적발이 핵심 가치. 환경: macOS arm64, hanseonc_high → TOAU → crownyc run (CROWNY_STD=libs).

0. 한 줄 결론 (정직)

핵심 엔진(웹엔진·타이포·컴포지터)의 fb_rgb 레벨 주장은 대체로 진짜다 — 실행으로 검증됨. 그러나 "한선씨 크롬 브라우저 배선"은 부분 과장이다: 실제 보이는 브라우저 픽셀은 100% Cocoa(NSFont/NSBezierPath/NSRectFill)로 그려지며, 검증된 한선씨 AA/컴포지팅 opcode(788/789/804)는 오프스크린 fb_rgb 버퍼에만 그려지고 화면에 배선되어 있지 않다.

헌법위반은 1건(하드코딩 경로). Rust/외부엔진/JSON DB 신규 위반은 없음(JSON DB는 .celdb로 교체 완료).


1. 검증된 주장 (티 — 실행 증거 있음)

1.1 순수 한선씨 웹엔진 — WebKit 0건, 실제 렌더 (진짜)

  • 소스 한선씨웹엔진.한선에 WKWebView 호출 0건. "WebKit" 문자열은 전부 "없음" 명시 주석.
  • 실측 재현(2026-06-11): 컴파일 OK → 자가검증 5종 전부 통과(티).
  • cmd 줄수 22, DOM 노드 15, cmd 길이 898 바이트.
  • 인라인 wrap 실동작 확인: 긴 한국어 문단이 y=334 / y=358 두 TEXT 줄로 정확히 분할 발행됨(글자단위 폭누적). 이 wrap 동작은 코드 주장과 실행이 일치.
  • 증거: /tmp/웹렌더.cmd (TEXT 18줄, RECT 등 포함).
  • ⚠️ 문서 스테일: 2026-06-11-한선씨웹엔진-vs-webkit.md는 "20줄 / 13 노드 / 702 바이트 / 36ms"로 기록. 현재 엔진은 wrap 추가로 "22줄 / 15 노드 / 898 바이트". 방향은 일치하나 수치는 갱신 필요(과장 아님, 단순 스테일).

    1.2 타이포.한선 AA 폰트 — stb_truetype 진짜 배선 (진짜)

    • opcode 753(폰트로드)/754(텍스트폭)/755(폰트높이)/788(텍스트AA) 모두 crownyc.c에 실제 case 핸들러 구현 + crowny_media.c에 stb_truetype 백엔드 정의 확인.
    • crowny_text_draw_fb(crowny_media.c:250): UTF-8 디코드 → stbtt_GetGlyphBitmap 글리프 래스터 → 0~255 그레이커버리지를 fb_blend_pixel로 알파블렌딩. 커닝(stbtt_GetGlyphKernAdvance)까지 적용. 5x7 비트맵 폴백이 아니라 진짜 AA.
    • 실측 재현: 폰트핸들=0 준비=1, "크라우니 한글 AA Test" 28px → 폭 240, FB_STAT 비배경 1608/48000 픽셀 fb_rgb 채움. AA 글리프가 실제 프레임버퍼에 그려짐.

    1.3 컴포지터.한선 진짜 알파합성 — opcode 789/804 (진짜)

    • 789(RGB알파사각형): fb_blend_pixel per-pixel, 임의 배경 위 반투명 합성. 배경색 사전지식 불필요(CALayer 동급 주장 근거 성립).
    • 804(RGB그림자): fb에 직접 검정 알파 다중링 페이드. (단 "링 근사"임을 코드/문서가 정직히 명시 — 진짜 박스섀도 아님.)
    • 실측 재현: HiDPI 2x 검증 통과, 2겹 레이어(골드 불투명 + 코랄@128) + 그림자 합성 → FB_STAT 비배경 98752/307200(32.1%) fb_rgb 채움. 알파합성이 cmd 발행만이 아니라 실제 픽셀로 검증됨.

    1.4 fb_blend_pixel 경계검사 — OOB 회귀 없음 (안전)

    • crownyc.c:442 fb_blend_pixel은 px/py/idx 3중 경계검사. 788/789/804 및 글리프 래스터가 모두 이 함수 경유 → OOB SIGSEGV/SIGTRAP 회귀 없음. (789의 al>=255 분기만 기존 fb_fill_rect 사용.)

    1.5 라이브러리 top-level 호출 오염 — 없음 (깨끗)

    • 타이포.한선/위젯.한선/컴포지터.한선 전부 정의만, 끝에 top-level 실행 호출 없음("가져오기 오염 방지" 주석대로). 가져오기 시 부작용 없음.
    • 한선씨웹엔진.한선은 top-level 코드 있으나 환경변수("CROWNY_WEB_MODE") 게이트의 독립 실행 진입점이며 라이브러리로 import되지 않음 → 허용 범위.

    1.6 JSON DB 폐기 — 헌법 준수 (교체 완료)

    • 브라우저 영속화는 .celdb(27셀코어 평면 테이블)로 교체됨(crowny-browser.m:197~234, 794). 한선씨 동반(브라우저기록.한선·피드백수집.한선) 존재.

    2. 과장 / 미배선 (적발 — 핵심 가치)

    2.1 [심각도 高] "한선씨 크롬 브라우저 배선"은 부분 과장 — 보이는 픽셀은 100% Cocoa

  • 증거: crowny-browser.m CrownyChromeView -drawRect:(651~681)
  • RECT → NSRectFill
  • ROUND → NSBezierPath bezierPathWithRoundedRect
  • TEXT → [NSFont systemFontOfSize:weight:Medium] + drawAtPoint (670~678)
  • 즉 한선씨가 기여하는 것은 cmd 레이아웃 지오메트리(좌표/색/문자열) 뿐이고, 래스터화(특히 글자)는 전부 AppKit이다.
  • 검증된 한선씨 AA opcode 788과 컴포지팅 789/804는 화면 NSView에 연결되어 있지 않다. 그것들은 오프스크린 fb_rgb 버퍼 / PPM 덤프에만 그린다.
  • 두 평행 세계:
  • 1. crownyc VM fb_rgb 경로(타이포/컴포지터) — 진짜 한선씨 AA·알파, FB_STAT로만 검증, 헤드리스 오프스크린. 2. 실제 보이는 브라우저(crowny-browser.m) — Cocoa 래스터.
    • 결론: "Cocoa 동급 한선씨 GUI 툴킷"(엔진)은 성립하나, "한선씨 크롬 브라우저 배선"은 지오메트리 한정. 텍스트/도형 픽셀은 미배선. 과장.
    • 권고: (a) 주장 문구를 "한선씨 cmd 지오메트리 → Cocoa 래스터(현행) / fb_rgb 직접 래스터(헤드리스 검증, 미배선)"으로 정정. (b) 배선하려면 CrownyChromeView가 crowny_text_draw_fb/789/804로 채운 fb_rgbCGImage로 drawRect에 blit하는 경로 신설.

    2.2 [심각도 高] 하드코딩 절대경로 — 헌법위반 + 배포 불능

    • crowny-browser.m:202 kCellDataDir = @"/Users/ef/CrownyBrowser/native/data"
    • :208 kCrownycBin = @"/Users/ef/CrownyOS/crownyc/crownyc"
    • :209 kFeedbackToau = @"/Users/ef/CrownyBrowser/native/data/피드백수집.toau"
    • 헌법 스캔 항목 "하드코딩 경로" 직접 위반. 다운로드/배포된 브라우저는 다른 머신에서 이 경로를 못 찾아 히스토리/북마크/피드백 영속화·피드백 컴파일 폴백이 깨진다.
    • 다운로드→실행 검증(태스크 #4 "맥 다운로드→실행 검증" 완료 표기)이 개발 머신에서만 성립했을 가능성. 정직히 "동일 경로 머신 한정"으로 한정 필요.
    • 권고: ~/Library/Application Support/CrownyBrowser/ + [[NSBundle mainBundle] resourcePath] 기반으로 치환. 우선순위 1.

    2.3 [심각도 中] 스테일 주석 — 헤더가 폐기된 JSON DB를 광고

    • crowny-browser.m:7-8 헤더 주석이 여전히 "history.json / bookmarks.json" 영속화로 기술. 실제 구현은 .celdb(197~). 코드는 헌법 준수지만 주석이 거짓을 광고 → 감사·인수인계 혼동 유발.
    • 권고: 헤더 주석을 .celdb로 정정.

    2.4 [심각도 中] 시각 픽셀은 전 구간 헤드리스 미실측 (정직하나 한계)

    • 웹엔진·타이포·컴포지터 자가검증 모두 "시각 표시는 디스플레이 필요·미실측"이라 스스로 정직 보고(과장 아님). 검증은 cmd 구조 / FB_STAT 비배경 픽셀수 / PPM 덤프까지.
    • 단 "보인다"는 최종 주장은 누구도 실측 안 함. PPM 픽셀 대조(글리프 모양 정합성, 색 정확도) 단계가 빠져 있음. AA "품질"은 비배경 카운트로만 간접 입증.
    • 권고: PPM을 골든 이미지와 SSIM/픽셀diff 대조하는 헤드리스 비교기 추가(디스플레이 불필요).

    2.5 [심각도 低] 누락 러너 — 컴포지터_검증.한선 부재

    • 컴포지터.한선 말미가 "검증 실행은 별도 러너 — 컴포지터_검증.한선" 이라 명시하나 그 파일이 존재하지 않음. (본 감사는 인라인 러너로 대체 실행해 통과 확인.) 위젯_검증.한선도 동일 의심.
    • 권고: 명시한 러너 파일 생성 또는 주석 정정.

    3. 미검증 영역 (헤드리스 한계 — 진짜 미확인, 정직 목록)

    1. 실제 디스플레이 GUI 시각 — fb_rgb/PPM은 채워지나 모니터 출력 시 글리프가 올바로 보이는지 미실측(태스크 #6과 동일, 여전히 열림).
    2. 다운로드→실행 (배포 머신) — 2.2 하드코딩 경로로 인해 개발 머신 외 미검증. 윈도우는 전혀 미검증.
    3. 일반 웹(임의 HTML/CSS/JS) — 한선씨 웹엔진은 wrap/박스모델/CSS선택자/이미지/표/폼/flex/JS/미디어 전부 미지원. 일반 웹은 여전히 WKWebView(Path A) 의존(웹엔진 doc가 정직 명시). "WebKit 대체 완료"는 아직 거짓이 될 주장이며 현재 doc는 그렇게 주장하지 않음(정직).
    4. WOFF2 폰트 — crowny_media.c가 "WOFF2 미지원, TTF/OTF 필요" 명시. 번들 폰트(woff2 242KB)는 타이포 AA 경로에 직접 못 들어감 → 시스템 TTF(AppleGothic) 의존. macOS 외 폰트경로 미보장.
    5. 대형 페이지 성능 — 웹엔진 36ms는 ~300자 13노드 샘플 1회. 대형 DOM 미측정.

    4. 헌법/회귀 스캔 결과 요약

    항목결과
    Rust (.rs/cargo/rustc)0건 (브라우저 .m·src/.한선)
    외부 렌더엔진(Blink/V8)0건 (WKWebView=Path A 래퍼는 별개, doc 정직 명시)
    JSON DB폐기·.celdb 교체 완료 (헌법 준수, 단 헤더 주석 스테일)
    하드코딩 경로3건 위반 (2.2 — 우선순위1 수정)
    외부 브랜드미발견 (Pretendard "모티프"는 시스템폰트 대체로 표기)
    crownyc.c 다중수정 부작용788/789/804 전부 fb_blend_pixel 경계검사 경유 → 회귀 없음
    라이브러리 top-level 오염없음
    스테일 복사본웹엔진 doc 수치 스테일(1.1), 브라우저 헤더 주석 스테일(2.3)
    빌드 타이밍 관찰: 감사 중 crownyc 바이너리가 01:18→13:35로 재빌드됨(빌드훅 추정). 재빌드 후 stbtt 19개 심볼 포함 확인. 감사 시점엔 일시적 스테일 바이너리 존재했으나 현재 해소.

    5. 우선순위 수정 권고

    우선항목근거작업
    1하드코딩 경로 3건 제거2.2 헌법위반+배포불능NSBundle/Application Support 기반 치환
    2"한선씨 크롬 배선" 문구 정정2.1 과장지오메트리 한정 명시 / 또는 fb_rgb→CGImage blit 배선
    3PPM 골든이미지 비교기2.4 미실측디스플레이 없이 글리프/색 정합성 픽셀diff
    4스테일 주석·doc 수치 갱신1.1, 2.3헤더 .celdb 정정, 웹엔진 doc 22줄/15노드/898B로
    5누락 러너 파일2.5컴포지터_검증.한선/위젯_검증.한선 생성

    6. 관련 파일 (전부 절대경로)

    • 웹엔진: /Users/ef/CrownyBrowser/src/한선씨웹엔진.한선
    • 타이포: /Users/ef/CrownyOS/crownyc/libs/타이포.한선
    • 컴포지터: /Users/ef/CrownyOS/crownyc/libs/컴포지터.한선
    • 위젯/애니입력: /Users/ef/CrownyOS/crownyc/libs/위젯.한선, .../애니입력.한선
    • AA 백엔드(C): /Users/ef/CrownyOS/crownyc/crowny_media.c (crowny_text_draw_fb:250)
    • VM opcode 788/789/804: /Users/ef/CrownyOS/crownyc/crownyc.c (8622~8692), fb_blend_pixel(442)
    • 브라우저(Cocoa): /Users/ef/CrownyBrowser/native/crowny-browser.m (drawRect:651, 하드코딩경로:202)
    • 실측 산출: /tmp/웹렌더.cmd (wrap 2줄 분할 증거)

    7. 잔여 이슈

    • 우선순위 1(하드코딩 경로)은 본 감사 범위 밖(읽기 위주). 별도 수정 세션 필요.
    • 일반 웹 WebKit 대체(태스크 #7)는 wrap만 진행, 박스모델/CSS/JS 미착수 — 장기.
    • 디스플레이 시각 검증(태스크 #6)은 여전히 열림 — PPM 비교기로 부분 대체 권고.