Munal OS - WASM 샌드박싱이 적용된 그래픽 기반 실험용 운영체제

2 days ago 2

  • Rust로 완전히 구현되어 있으며, unikernel 설계WASM 기반 샌드박싱 보안 모델을 사용하는 그래픽 기반 실험용 운영체제
  • EFI 바이너리에 커널, WASM 엔진, 모든 앱이 내장되어 최소화된 구조와 독특한 시스템 호출 인터페이스를 제공
  • VirtIO 기반 드라이버를 통해 QEMU에서 동작하며, 입력 및 네트워크, GPU 관리가 인터럽트 없이 폴링 방식으로 구현
  • 전역 이벤트 루프와 협동 스케줄링을 통해 단순화된 동작 구조와 애플리케이션별 자원 모니터링 기능을 지원
  • 자체 UI 툴킷 Uitk와 내장 앱(웹브라우저, 텍스트 에디터, Python 터미널) 제공, 다양한 언어로 WASM 앱 개발 가능

Munal OS란

  • Munal OS는 Rust로 완전히 개발된 실험용 운영체제로, unikernel 기반 아키텍처와 WASM 샌드박싱을 조합해 새로운 OS 설계를 탐구하기 위해 만들어진 프로젝트
  • 복잡성을 줄이고 필수 요소만 적용해, 현대적 도구로 간소화된 시스템 구조 실현을 목표로 함

주요 특징

  • 풀 그래픽 환경HD 해상도 지원, 마우스 및 키보드 인터페이스 탑재
  • 샌드박스 방식 앱 실행, 사용자 애플리케이션의 커널 메모리 접근 차단
  • 네트워크 드라이버 및 자체 TCP 스택 내장
  • 커스터마이즈 가능한 UI 툴킷(Uitk) 포함, 다양한 위젯과 유연한 레이아웃, 텍스트 렌더링 지원
  • 기본 제공 앱: 웹 브라우저(DNS, HTTPS, 기초 HTML 지원), 텍스트 에디터, Python 터미널

아키텍처

  • EFI 바이너리 기반 구조

    • 부트로더 없이 EFI 바이너리 형태로 구동, 커널/WASM 엔진/앱이 한 파일에 내장됨
    • UEFI 부트 서비스는 최단시간 내 종료, 시스템 시계 외에는 추가 활용 없음
  • 주소 공간 관리

    • 가상 주소 공간 미사용, UEFI가 남긴 identity-mapped 주소 그대로 사용
    • 페이지 테이블 변경 없음. 커널 메모리 직접 보호는 WASM 샌드박싱으로 보완
  • 드라이버와 하드웨어 지원

    • PS/2나 VGA 대신, VirtIO 1.1 사양을 활용하는 PCI 드라이버 직접 구현
      • 키보드, 마우스, 네트워크, GPU용 드라이버 제공
    • 인터럽트 미사용, 모든 드라이버는 폴링 방식으로 설계
    • QEMU 이외의 실물 하드웨어 실행은 미지원, 향후 추가 개발 필요
  • 이벤트 루프와 스케줄링

    • 멀티코어/인터럽트 미지원, 전체 동작은 단일 전역 이벤트 루프에서 선형적 실행
      • 각 루프마다 네트워크/입력 드라이버 폴링, 데스크탑 UI 및 앱 실행, GPU 프레임버퍼 갱신
    • 성능 분석 용이, 각 루프 사이클별 타임 측정 가능
    • 앱은 직접적으로 CPU 점유 해제 필요, 장기 작업은 명시적으로 양보 필요
    • 협동 스케줄링 기반이나, Wasmi 엔진의 fuel limit 기능을 통한 오작동 앱 강제 종료 지원 가능(미구현)

응용 프로그램 실행 구조

  • [Wasmi WASM 엔진] 내장, 앱 실행시 완전 샌드박싱과 커널 분리 제공
  • 커널 차원에서 시스템 콜 API 제공, 앱에서 마우스/키 이벤트 조회, TCP 소켓 사용, 프레임버퍼 출력 등 가능
  • 앱의 렌더링 결과는 OS가 데스크탑에 합성하여 출력
  • Rust 이외의 언어로도 앱 제작 가능, WASM 빌드만 지원하면 사용 제한 없음
  • WASI 호환성은 부분 지원. 완전 준수 아님, 주요 외부 종속성 활용을 위한 최소 구현만 포함
  • 앱별 전용 로그 스트림(stdout 유사) , 데스크탑 ‘감사’ 뷰에서 리소스 사용량과 함께 확인

UI 툴킷(uitk)

  • Munal OS와 WASM 앱 모두에서 사용하는 자체 즉시모드 UI 킷
  • 기본 위젯(버튼, 프로그레스바, 텍스트 에디트, 스크롤 캔버스) 및 삼각형 래스터라이저 제공
  • 글로벌 스타일시트 기반 통일 스타일링, 개별 요소별 오버라이드 지원
  • 효율적인 캐싱 시스템으로 불필요한 리렌더링 방지
    • 각 영역별 “타일” 구분, Rust 뮤터빌리티 규칙 기반 변경 감지 알고리듬

빌드 및 실행 환경

  • Rust Nightly 2025-06-01 및 QEMU 10.0.0 이상에서 빌드 및 실행 가능

주요 참고 자료 및 크레딧

  • Philipp Oppermann의 Rust OS 튜토리얼 및 OSDev Wiki 문서
  • Wasmi, smoltcp, Rustls, RustPython 등 주요 오픈소스 활용
  • 다양한 오픈 소스 폰트 및 아이콘, 월페이퍼 자료 사용

Munal OS의 의의 및 장점

  • 단일 EFI 바이너리 구조와 혁신적 샌드박싱 결합으로, 기존 OS 설계 패러다임 재고
  • QEMU 환경 최적화 및 독특한 폴링 기반 드라이버 구조, 실 시스템 하드웨어 의존성 최소화
  • 시스템 리소스 관리 투명성, 단순 구조에서 얻는 학습 및 실험적 가치가 큼
  • 언어나 환경 제약 없이 WASM 앱 생태계 확장 가능성이 큼

Read Entire Article