본문으로 건너뛰기
피드

PatchworkOS: C와 어셈블리로 밑바닥부터 만든 x86_64 운영체제

open-source 약 7분
vote
0
댓글
북마크

POSIX를 따르지 않는 모듈형 OS로, Plan9 영감의 'everything is a file' 철학을 극단까지 밀어붙인 설계. EEVDF 스케줄러, 페이지 테이블 임베딩 메모리 관리(Linux 대비 5배 빠른 map/unmap), 네임스페이스 기반 보안 모델 등 독자적 설계가 특징이며 실제 하드웨어에서 DOOM까지 구동됨.

  • 1

    Linux과 동일한 EEVDF 스케줄러를 Augmented Red-Black Tree로 구현, O(log n) 보장

  • 2

    메모리 map/unmap 벤치마크에서 1500 페이지 기준 Linux 대비 약 5배 빠른 성능(7.5초 vs 37.7초)

  • 3

    소켓, 프로세스 제어, 시그널 등 모든 것을 파일 경로 기반 API로 통일

  • 4

    ACL/UID 없이 프로세스별 마운트포인트 네임스페이스로 보안 구현, Box 컨테이너화 시스템 제공

  • 5

    POSIX 시그널 대신 문자열 기반 Notes 시스템으로 상세한 오류 정보 전달

  • PatchworkOS는 POSIX를 따르지 않는 x86_64용 모듈형 운영체제임. Plan9에서 영감받아 "everything is a file" 철학을 극단적으로 밀어붙인 설계가 특징
  • 교육용 OS(xv6)와 프로덕션 OS(Linux) 사이의 중간 지점을 목표로 하며, 실제 하드웨어(ThinkPad E495)에서 돌아감. DOOM도 돌아감
  • MIT 라이선스, C와 어셈블리로 작성. 커스텀 ACPI 구현, AML 파서, 프레임버퍼 이미지 포맷, 폰트 포맷, 쉘 유틸리티, 데스크톱 환경까지 전부 자체 구현

커널 아키텍처

  • 모듈형 커널 설계로, 커널을 여러 작은 모듈로 분리해 런타임에 로드/언로드 가능. SMP 부트스트래핑까지 모듈로 분리되어 있음
  • 스케줄러는 Linux 최신 커널과 동일한 EEVDF 알고리즘 사용. Augmented Red-Black Tree로 구현해서 O(log n) 보장. 선점형(preemptive) + 틱리스(tickless) 방식
  • 멀티스레딩 + SMP 지원, fine-grained locking 적용. RCU, 뮤텍스, R/W 락, 시퀀셜 락, futex 등 동기화 프리미티브 구비
  • 메모리 관리는 페이지 테이블에 메타데이터를 직접 임베딩하는 방식으로 물리/가상 메모리 매니저 모두 페이지당 O(1) 달성

"Everything is a File" 철학

  • 소켓 생성: /net/local/seqpacket 파일을 open하면 소켓이 만들어지고 ID가 문자열로 반환됨. /net/local/[id]/data로 데이터 송수신, /net/local/[id]/ctl로 bind/listen 같은 명령 전달
  • 파일 플래그를 경로에 포함시키는 방식: open("/path:nonblock")처럼 사용. POSIX의 flags 인자가 필요 없음
  • 퍼미션도 경로로 지정: open("/path/rw") 식으로 read/write 권한 명시
  • spawn() 시스템콜로 프로세스를 suspended 상태로 생성한 뒤, /proc/[pid]/ctl 파일에 명령을 써서 stdio 리다이렉션, 환경변수 설정 등을 처리. fork()/vfork()의 COW 문제나 CreateProcess()의 비대함을 피한 설계
  • 시그널 대신 "Notes" 시스템 도입. 정수 대신 문자열을 보내기 때문에 "pagefault at 0x40013b due to stack overflow at 0x7ffffff9af18" 같은 상세 정보가 그대로 전달됨. POSIX의 "SIGSEGV"만 던져주는 것과는 차원이 다름

ℹ️참고

> 핵심 설계 원칙은 "조합 가능성(composability)". 작은 파일 기반 빌딩블록들이 결합되면서 복잡한 동작이 자연스럽게 만들어지는 구조임. 예: /proc/[pid]/wait 파일을 poll()하면 여러 프로세스 동시 대기가 가능해지는 식.

보안 모델

  • ACL이나 사용자 ID가 없음. 대신 프로세스별 마운트포인트 네임스페이스를 이용한 pseudo-capability 모델 채택
  • 프로세스가 볼 수 있는 파일/디렉토리 자체가 곧 권한이 되는 구조. 소켓을 차단하고 싶으면 /net 디렉토리를 네임스페이스에서 빼면 됨
  • "Box"라 불리는 컨테이너화 시스템 제공. 매니페스트 파일(ini 스타일)로 접근 가능한 디렉토리를 선언
  • DOOM box 예시: 딱 4개 디렉토리만 바인딩(실행파일, WAD 데이터, 소켓, /dev/const/zero). 사용자 파일, 디바이스, 파이프, 공유 메모리 전부 접근 불가
  • share()/claim() 시스템콜로 일회용 키 기반 fd 전달 구현. UNIX의 SCM_RIGHTS 대체

벤치마크

  • ThinkPad E495(Ryzen 5 3600X, 32GB RAM)에서 실제 하드웨어 벤치마크 수행. 비교 대상은 Fedora 40, Linux 커널 6.14.5
  • 메모리 map/unmap 테스트에서 PatchworkOS가 전 구간에서 Linux보다 빠름
  • 1500 페이지 기준: PatchworkOS ~7.5초 vs Linux ~37.7초. 대략 5배 빠른 성능
  • 이유: 페이지 테이블에 메타데이터를 직접 임베딩해서 별도 구조체 없이 O(1) 접근. 페이지 테이블이 이미 CPU 캐시에 있을 확률이 높아서 캐시 효율도 좋음
  • 단, Fedora 쪽이 백그라운드 프로세스와 보안 기능이 훨씬 많으니 완전한 사과 대 사과 비교는 아님

ℹ️참고

> 스케줄러는 아직 정식 벤치마크 전이지만, 1000개 이상 스레드가 CPU 100%로 돌아가는 중에도 DOOM이 플레이 가능한 수준이라고 함.

기타 특징

  • 커스텀 ACPI 구현: AML 파서 포함, PS/2 드라이버 예시처럼 하드코딩 대신 ACPI에서 디바이스 리소스를 동적으로 가져오는 방식
  • 쉘 유틸리티들은 POSIX 이름을 빌려왔지만 drop-in replacement는 아님. 파일 플래그 시스템에 의존해서 유틸리티 자체는 최대한 단순하게("dumb") 유지
  • GRUB 루프백 디바이스 설정으로 USB 없이 듀얼부팅처럼 테스트 가능
  • 현재 제한사항: RAM 디스크만 지원(USB 지원 대기 중), x86_64만 지원
  • TODO: 비동기 I/O(io_uring 스타일), 9P 파일 서버, LUA 포팅, USB 지원 등

xv6와 Linux 사이의 교육적 중간 지점을 목표로 하면서도, 페이지 테이블 메타데이터 임베딩이나 파일 경로 기반 플래그 등 실용적으로 흥미로운 설계 실험들이 포함되어 있어 OS 설계에 관심 있는 개발자에게 좋은 참고 자료가 될 수 있음.

댓글

댓글

댓글을 불러오는 중...

open-source

위키피디아에도 빅테크식 반노조 플레이북이 들어왔다

위키미디어 재단이 5월 열흘 사이 MediaWiki 장기 핵심 개발자를 해고하고, 자원봉사 편집자 요청을 처리하던 Community Tech 팀을 해산했다는 비판 글이다. 해고된 인력 상당수가 노조 조직 활동과 연결돼 있었고, 위키피디아 편집자들은 연대 파업까지 거론하고 있다. 재단은 2억9660만 달러의 준비금과 빠르게 성장하는 AI 대상 API 매출을 갖고 있어, 이 사안이 단순 비용 절감으로 보기 어렵다는 게 글의 핵심이다.

open-source

캘리포니아, 연령 확인법에서 리눅스 빼려는 수정안 추진

캘리포니아가 운영체제에 사용자 나이 확인을 요구하는 법안에서 대부분의 오픈소스 운영체제를 제외하는 수정안을 추진 중이다. 데비안, 페도라, 우분투, 아치, 리눅스 민트 같은 배포판은 빠질 가능성이 커졌지만, 스팀OS처럼 독점 앱 생태계와 연결된 플랫폼은 여전히 애매한 상태다.

open-source

마이크로소프트, 45년 전 86-DOS 소스코드를 오픈소스로 공개

마이크로소프트가 86-DOS 1.00 출시 45주년에 맞춰 지금까지 발견된 것 중 가장 오래된 DOS 소스코드를 공개했어. 팀 패터슨의 차고에 있던 도트 매트릭스 출력물을 스캔하고 옮겨 적어, 원본 바이너리와 바이트 단위로 동일하게 다시 컴파일되는 수준까지 복원한 게 포인트야.

open-source

밤부 랩, AGPLv3 위반 논란으로 오픈소스 커뮤니티와 충돌

3D 프린터 제조사 밤부 랩이 AGPLv3 라이선스 위반 논란에 휘말렸고, Software Freedom Conservancy가 두 건의 위반 사례를 확인했다는 내용이야. Louis Rossmann과 Gamers Nexus는 관련 개발자의 법적 방어를 위해 2만달러를 기부했고, 갈등의 핵심은 오픈소스 기반 생태계를 클라우드와 DRM으로 점점 닫아가려는 움직임이야.

open-source

플리퍼, 리눅스 기반 확장형 기기 '플리퍼 원' 공개

플리퍼가 기존 플리퍼 제로를 대체하는 후속작이 아니라, 리눅스 기반 네트워킹·확장형 기기인 플리퍼 원을 공개했어. RK3576 8코어 ARM 칩, 와이파이 6E, 듀얼 이더넷, NVMe, HDMI 4K 120Hz까지 넣으면서 장난감 같은 해킹 도구에서 훨씬 범용적인 리눅스 장비 쪽으로 방향을 넓히는 그림이야.