제로OS 범용 모듈형 라이브러리 OS for zkVM
초록
제로OS는 zkVM 위에서 실행되는 검증 가능한 애플리케이션(vApp)을 위한 모듈형 라이브러리 OS이다. 언어‑특정 툴체인 대신 시스템 콜 샤임을 가로채는 단일 인터페이스를 제공해, 기존 리눅스 ABI의 필요한 부분만 정적 링크한다. 이를 통해 버전 관리 복잡성(버전 헬)과 불필요한 TCB를 크게 줄이고, zkVM 생태계 전반에 걸친 보안·감사 비용을 통합한다.
상세 분석
제로OS는 기존 zkVM이 언어별 런타임을 포크하고 표준 라이브러리를 직접 패치해 unikernel을 만드는 방식을 근본적으로 바꾼다. 핵심 아이디어는 “시스템 콜 샤임”을 OS 수준에서 가로채어, 표준 libc가 호출하는 POSIX‑like 인터페이스를 그대로 사용하도록 하는 것이다. 따라서 개발자는 기존의 GNU‑toolchain(예: riscv64‑unknown‑linux‑musl)이나 Rust, C++ 등 어떤 언어든 수정 없이 컴파일하고, 링커 단계에서 제로OS 커널과 부트로더만 정적으로 연결하면 된다.
이 설계는 두 가지 중요한 효과를 만든다. 첫째, Trusted Computing Base(TCB) 축소이다. 언어별 런타임을 포크하고 유지보수해야 하는 비용이 사라지고, 보안 취약점이 발생할 경우 단일 커널 모듈만 패치하면 된다. 둘째, 모듈식 “pay‑for‑what‑you‑use” 모델이다. 메모리 할당, 파일 I/O, 스케줄러 등 각각을 독립 모듈로 제공해, 애플리케이션이 필요로 하는 기능만 컴파일 타임에 포함한다. 이렇게 하면 바이너리 크기와 zkVM이 기록하는 실행 트레이스가 최소화돼, 증명 생성 비용이 크게 낮아진다.
제로OS는 세 부분으로 구성된다. Build Config는 기존 툴체인과 제로OS 커널 사이의 브릿지 역할을 하며, 별도 패치를 요구하지 않는다. Bootloader는 플랫폼‑특화 초기화(__platform_bootstrap)만 구현하면 되므로 zkVM마다 유지해야 하는 코드가 극히 제한된다. Kernel은 트랩 핸들러와 시스템 콜 래퍼, 그리고 실제 동작을 수행하는 primitive 집합으로 이루어진다. 각 래퍼는 compile‑time 플래그로 켜고 끌 수 있어, 예를 들어 I/O가 전혀 필요 없는 서비스는 ioctl·read·write 등을 완전히 제외한다.
zkVM 특성상 **결정론(determinism)**이 필수적인데, 제로OS는 모든 상태 변이를 커널 수준에서 관리하고, 엔트로피·시간 같은 외부 입력을 명시적 인터페이스를 통해 제한한다. 따라서 증명 생성 시 트레이스가 예측 가능하고, 악의적인 prover가 임의로 트레이스를 변조할 여지를 최소화한다.
보안 관점에서 보면, 기존 “버전 헬”은 각 언어·플랫폼마다 별도 포크가 존재해 패치가 지연되고, 동일한 버그가 여러 곳에 복제되는 위험이 있었다. 제로OS는 단일 코드베이스에 모든 zkVM이 의존하게 함으로써, 하나의 감사·패치가 전체 생태계에 즉시 적용된다. 이는 특히 메모리 할당자나 스케줄러와 같이 복잡하고 취약하기 쉬운 부분에 큰 이점을 제공한다.
마지막으로, 제로OS는 오픈소스이며 GitHub에 공개돼 커뮤니티 기여와 독립적인 검증이 가능하다. zkVM 팀은 최소한의 부트로더 구현만으로 제로OS를 채택할 수 있어, 기존에 유지하던 언어‑별 툴체인 인프라를 폐기하고 개발·감사 비용을 크게 절감할 수 있다.
댓글 및 학술 토론
Loading comments...
의견 남기기