WaveOS

WaveOS는 Wave로 개발되고 있는 운영체제이다. Wave 생태계에서 운영체제 커널과 장치 드라이버, 시스템 라이브러리, 사용자 공간 소프트웨어까지 하나의 언어를 중심으로 구축할 수 있는 독립적인 시스템 환경을 목표로 한다.

분류운영체제, 시스템 소프트웨어
개발자전영재
개발 상태개발 중
개발 언어Wave
소스 공개 상태비공개
향후 공개 계획일정 수준의 완성도와 안정성에 도달한 뒤 오픈 소스로 공개 예정
커널 구조모듈형 모놀리식 커널
부팅 환경UEFI
자원 모델커널 객체, 핸들, capability
메모리 모델단일 주소 공간 지향, 객체 기반 격리
멀티코어 구조per-core 자원 관리, 메시지 전달 중심
대상 환경AMD64

WaveOSWave로 개발되고 있는 운영체제이다. Wave 생태계에서 운영체제 커널과 장치 드라이버, 시스템 라이브러리, 사용자 공간 소프트웨어까지 하나의 언어를 중심으로 구축할 수 있는 독립적인 시스템 환경을 목표로 한다.

WaveOS는 기존 UNIX 계열 운영체제를 그대로 재현하는 대신, 운영체제의 자원과 권한, 메모리, 프로세스 간 통신을 객체 중심으로 구성하는 방향을 따른다. 메모리 영역과 장치, 프로세스, 스레드, 통신 endpoint 등의 시스템 자원은 커널 객체로 표현되며, 실행 주체는 object table에 직접 접근하지 않고 권한 정보가 연결된 핸들을 통해 객체를 사용한다.

커널은 핵심 기능을 커널 주소 공간에서 실행하면서도 장치 드라이버와 파일 시스템, 네트워크 스택 등의 기능을 명확한 인터페이스를 가진 모듈로 분리하는 모듈형 모놀리식 커널 구조를 지향한다. 스케줄러와 메모리 관리자, object table과 같은 기반 기능은 커널 core에 포함하고, 독립적인 갱신이나 확장이 필요한 기능은 커널 모듈로 구성한다.

메모리 구조는 장기적으로 단일 주소 공간과 capability 기반 객체 격리를 결합하는 것을 목표로 한다. 커널과 사용자 공간 사이의 데이터 이동은 가능한 경우 반복적인 메모리 복사보다 공유 메모리, zero-copy와 소유권 이전을 사용하며, 객체별 접근 권한은 핸들에 연결된 capability bit를 통해 관리한다.

멀티코어 환경에서는 모든 CPU가 하나의 전역 실행 큐와 잠금에 의존하는 구조보다 CPU 코어별 스케줄러 큐와 메모리 자원을 사용하는 구조를 지향한다. 코어 사이의 작업 전달과 상태 변경에는 공유 변수뿐 아니라 메시지 전달과 IPI를 사용하며, 반드시 공유해야 하는 상태는 객체와 capability 경계에서 명시적으로 관리한다.

WaveOS의 개발 과정은 Boot Layer, Kernel Foundation, Advanced OS의 세 단계로 구분된다. Boot Layer는 UEFI에서 필요한 시스템 정보를 수집하고 커널을 실행하는 역할을 담당한다. 현재 중심 개발 단계인 Kernel Foundation에서는 물리·가상 메모리 관리, 커널 힙, object table, handle table과 capability 모델을 구축한다. 기반 구조가 안정된 뒤에는 시스템 호출, 사용자 모드, 스케줄러, 커널 모듈 로더, 장치 드라이버 프레임워크와 hotpatch 등의 고급 운영체제 기능을 추가할 예정이다.

WaveOS는 전용 가상 머신 환경인 WVM뿐 아니라 실제 UEFI 기반 컴퓨터에서 실행되는 것을 목표로 한다. 부트 계층은 UEFI에서 framebuffer와 memory map 등의 정보를 수집해 WaveBootInfo로 정리한 뒤 firmware 환경을 종료하며, 이후 커널이 메모리와 장치를 직접 관리한다.

현재 WaveOS의 소스 코드는 개발 안정성과 내부 구조 정립을 위해 비공개로 관리되고 있다. 운영체제로서 일정 수준의 기능과 안정성, 개발 기반이 갖추어진 뒤에는 소스 코드를 공개하고 오픈 소스 프로젝트로 전환할 예정이다.

WaveOS는 현재 개발 중인 운영체제이다. 문서에 설명된 구조와 명칭, 인터페이스는 실제 구현과 개발 단계에 따라 변경될 수 있다. 소스 코드는 현재 비공개이지만 일정 수준의 완성도와 안정성에 도달한 뒤 오픈 소스로 공개될 예정이다.

역사와 개발 배경

개발 배경

초기 구상

Wave와의 관계

커널 개발의 시작

개발 단계의 변화

현재 개발 상태

목표와 설계 원칙

Wave 중심의 시스템 환경

최소 커널 core

객체 중심 자원 관리

명시적인 권한 모델

복사 비용의 최소화

멀티코어 확장성

가상 환경과 실제 하드웨어 지원

개발 계층

Boot Layer

Kernel Foundation

Advanced OS

계층 사이의 인터페이스

개발 순서와 안정화 정책

부팅 과정

UEFI 진입

GOP framebuffer 정보 수집

UEFI memory map 수집

WaveBootInfo

ExitBootServices

GDT 초기화

페이지 테이블과 CR3 전환

커널 진입

초기 디버그 출력

커널 구조

모듈형 모놀리식 커널

커널 core

커널 하위 시스템

커널 모듈

내부 인터페이스

초기화 순서

오류 처리와 kernel panic

메모리 관리

UEFI memory map 해석

물리 메모리 관리

페이지 프레임 할당

가상 메모리 관리

페이지 테이블

커널 힙

Per-core heap

단일 주소 공간

메모리 객체

Zero-copy

소유권 이전

객체와 핸들

커널 객체

Object Table

Handle Table

객체 식별자

객체 타입

참조 횟수 관리

객체 수명 주기

Handle call 모델

Capability 기반 권한 관리

Capability bit

핸들과 접근 권한

최소 권한

권한 위임

권한 축소

권한 회수

커널 모듈의 권한

사용자 공간의 권한

프로세스와 실행 모델

실행 단위

프로세스 객체

스레드 객체

실행 문맥

커널 모드

사용자 모드

실행 파일 적재

프로세스 생성과 종료

시스템 호출

시스템 호출 인터페이스

핸들 기반 호출

객체 생성과 제어

인자 전달

반환값과 오류 표현

비동기 호출

ABI 안정성

스케줄러

스케줄링 모델

CPU별 실행 큐

선점

우선순위

CPU affinity

타이머와 시간 관리

부하 분산

유휴 상태

동시성과 멀티코어

Shared-nothing 지향 구조

Per-core 데이터

코어 사이의 메시지 전달

인터프로세서 인터럽트

공유 객체

동기화 기본 요소

잠금

Lock-free 구조

프로세스 간 통신

통신 endpoint

메시지 객체

핸들 전달

공유 메모리

소유권 이전

동기식 통신

비동기식 통신

코어 사이의 통신

커널 모듈

모듈 형식

모듈 적재기

심볼 관리

재배치

모듈 의존성

모듈 초기화와 종료

모듈 권한

모듈 갱신

장치와 드라이버

드라이버 프레임워크

장치 객체

장치 검색

장치 인터페이스

StorageDevice

DisplayDevice

입력 장치

인터럽트 처리

DMA

가상 장치

실제 하드웨어 지원

저장 장치와 파일 시스템

저장 장치 계층

블록 장치

파티션과 볼륨

파일 시스템 모듈

파일 객체

디렉터리 객체

캐시와 버퍼링

Namespace

경로와 핸들의 관계

그래픽과 사용자 환경

초기 framebuffer 출력

디스플레이 장치

그래픽 하위 시스템

화면 합성

입력 처리

창 시스템

사용자 인터페이스 환경

네트워크

네트워크 장치

네트워크 스택 모듈

패킷 객체

통신 endpoint

로컬 통신

원격 통신

네트워크 권한 관리

보안 모델

객체 기반 격리

Capability 기반 접근 제어

신뢰 경계

메모리 보호

실행 파일 검증

커널 모듈 검증

장치 접근 제어

공격 표면의 최소화

Hotpatch

Hotpatch의 목적

패치 모듈

심볼과 재배치 관리

코드 페이지 권한 전환

패치 metadata

실행 중인 코드의 전환

상태 이전

Rollback

가상화와 개발 환경

WVM

가상 하드웨어

커널 이미지

디버그 출력

커널 디버깅

자동화된 테스트

하드웨어 테스트

부팅 실패 분석

하드웨어 지원

x86-64

UEFI 기반 컴퓨터

ACPI

인터럽트 컨트롤러

시스템 타이머

PCI와 PCI Express

저장 장치 컨트롤러

그래픽 장치

입력 장치

다른 아키텍처 지원

Wave와 프로그래밍 환경

Wave 기반 커널 개발

커널 프로그래밍 모델

시스템 라이브러리

사용자 공간 런타임

장치 드라이버 개발

응용 프로그램 개발

패키지와 소프트웨어 배포

개발 도구

프로그래밍 인터페이스

커널 내부 API

커널 ABI

사용자 공간 ABI

시스템 호출 ABI

드라이버 인터페이스

모듈 인터페이스

시스템 라이브러리 API

호환성 정책

개발과 릴리스

Boot Layer 안정화

Kernel Foundation 구축

Advanced OS 구현

사용자 공간 구축

하드웨어 지원 확대

시험판

안정판

버전 관리

릴리스 주기

소스 코드 공개와 거버넌스

현재 비공개 개발

비공개 개발의 범위

공개 전환 조건

오픈 소스 공개 계획

라이선스

외부 기여

코드 검토

프로젝트 거버넌스

다른 운영체제와의 관계

UNIX 계열 운영체제

Linux

Windows

모놀리식 커널 운영체제

마이크로커널 운영체제

단일 주소 공간 운영체제

Capability 기반 운영체제

장점과 한계

관련 문서