4P by GN⁺ 1일전 | ★ favorite | 댓글 1개
  • Rust로 개발된 64비트 DOS 스타일 운영체제로, 일부 x86 어셈블리도 커널 로딩에 사용
  • VGA 텍스트 모드(80x25), FAT12 파일시스템, SLIP을 통한 IPv4 네트워크 스택(ICMP/UDP/TCP/HTTP) 구현
  • QEMU 기반 가상머신에서 실행 및 개발이 이루어지며, 일부 실물 플로피 미디어도 지원
  • 간단한 텍스트 에디터, TAB 파일/디렉토리 자동완성, Snake 게임 등 기본 유틸리티 포함

아키텍처 및 부트로더

  • 대상 CPU는 x86_64이며, 향후 ARM(aarch) 아키텍처 지원 예정
  • 초기 버전은 직접 작성한 부트로더로 커널을 메모리에 올리고 실행
  • 64비트 커널에서는 GRUB2 부트로더를 활용해 Long Mode 진입과 Protected Mode 전환 처리
  • stage2 부트로더가 GDT, IDT, 페이징 세팅 및 Multiboot2 포인터 할당 등 수행
  • 커널은 쉘 명령어 처리기 및 다양한 커스텀 컴포넌트로 구성됨

QEMU에서의 에뮬레이션 및 이미지

  • QEMU를 통한 가상 머신 환경에서 개발 및 테스트 진행
  • ISO 이미지 생성: grub2-mkrescue와 xorriso 사용
  • FAT12 플로피 이미지 생성 및 마운트 지원, 실제 장치 또는 QEMU 플래그(-fda fat.img)로 활용 가능

초기화 절차

  • 커널 진입 시 Long Mode, Multiboot2 태그, FAT12 파일시스템, VGA 상태 등 확인
  • ASCII 아트 로고 출력 후, 쉘 루프에 제어 이관

파일시스템

  • FAT12 파일시스템 지원: 파일 읽기/쓰기/검색/삭제, 디렉토리 생성/삭제 등 지원
  • 텍스트 파일 생성 및 덮어쓰기, 하위 디렉토리 지원
  • fsck 툴로 파일시스템 일관성 점검 기능 포함
  • 추후 FAT32 지원도 계획

네트워크 스택

  • SLIP 프로토콜 기반 IPv4 패킷 송수신
  • 이더넷 프레임 처리 지원(테스트 미완료)
  • ICMP Echo(Request/Reply), UDP, TCP(SYN/SYNACK 상태 머신) 등 지원
  • 간단한 HTTP 서버: 정적 HTML 페이지 제공

Snake 게임

  • Snake 게임 내장, 향후 멀티플레이(P2P TCP) 버전도 계획
  • 게임 데이터(레벨, 점수)는 텍스트 파일로 저장 및 불러오기 가능
  • ESC로 게임 종료, 점수에 따라 High Score 저장

프로젝트 가치 및 활용 포인트

  • Rust로 작성된 운영체제 예제로, 저수준 소프트웨어 개발의 안전성과 생산성 향상 효과 체감 가능
  • SLIP/ICMP 테스트, 간편한 배포 및 실기기 지원 등으로, OS 실험 및 커스텀 구현 학습에 적합
  • Rust와 x86 어셈블리가 결합된 DOS 유사 시스템 구조를 직접 경험할 수 있음
Hacker News 의견
  • 메모리 안전성이 보장되는 언어 사용, x86_64 기반에 Arm 지원도 계획, 자체 네트워킹 스택 보유, CD 및 multiboot로 부팅 가능, 내 취미 프로젝트가 DOS를 압도하는 경험 제공
    • DOS와 경쟁하려면 Doom과 BASIC 실행 지원 필수, 이게 공식적으로 DOS 스타일의 기준선 역할
    • Rust와 x86 어셈블리 조합, 그래서 메모리 안전성 추구라면 과연 실용적 가치가 있냐는 생각, 오늘날 Rust는 한때 3D 프린팅처럼 과도하게 마케팅되는 느낌, 대중화 과정에서 실질적인 이득은 제한적이고 프로젝트도 구식 소프트웨어와 호환성 있으면 좋지만, 그렇지 않으면 교육용이나 매니아성 프로젝트에 가까움, 실사용까지는 갈 길이 멀게 느껴짐
  • 네트워킹 스택에서 SLIP과 slattach(1) 사용하는 점이 정말 마음에 듦, 직접 간단한 TCP/IP 스택을 만들 때도 Linux에서 pty로 SLIP 연결해 커널과 연동한 적 있음, macOS에도 예전에 slattach(1)이 존재했지만 지금은 제거된 걸로 보임, 혹시 macOS에서 SLIP 써서 크로스플랫폼 네트워킹 API 만든 분 있는지 궁금, 대안으로는 Linux에서는 tun/tap, macOS에서는 utun이 있지만 SLIP이 훨씬 간단함
  • 왜 x86을 선택한 건지 궁금, 리소스가 많아서인지, 독특한 명령어 포맷 때문인지, 부트 시퀀스의 복잡성 때문인지, 혹시 DOS를 그대로 따라하려는 전략인지, ARM 아키텍처도 곧 지원 예정이라고 했는데, DOS 자체가 하드웨어와 소프트웨어가 긴밀하게 연결되어 있는데도 여러 아키텍처로 지원하는 방식이 궁금
    • 이 프로젝트를 직접 보지는 않았지만 내 예상은, x86 플랫폼은 역사적으로 레거시 호환성 덕분에 정말 다양한 인터페이스가 내장되어 있어서 아주 얇고 심플한 ‘DOS류 OS’ 구현이 쉬움, 디바이스 트리 파싱, MMU 셋업, PCI(e) 같은 복잡한 버스 처리 등이 필요 없어 단순하게 시작 가능, ARM은 부트스트랩 자체가 어려워 심플함을 유지하려면 더 제약을 감수해야 하고, MMU 없이 할 수 있는 것이 제한적이고, 바이오스 인터페이스도 없어서 x86처럼 간단하게 섹터 읽기, 키 입력 대기가 어려움
    • x86을 선택한 이유는 이 시스템이 Turbo C에서 BIOS 인터럽트와 인라인 어셈블리를 기반으로 만든 첫 번째 버전에서 파생되었기 때문, MS-DOS만을 모방하려는 건 아니고 영감을 많이 받았음, 여러 아키텍처 지원은 Rust 컴파일러가 타겟 아키텍처 지정 기능 덕분에 가능성 있음, 빌드 전에 타겟만 정해주면 빌드 과정에서 바로 적용 가능
  • 현재의 UEFI 환경과 셸 대신 이렇게 FLOSS 기반 64비트 DOS 형식 솔루션이 더 좋았을 것 같음, 복고풍 부트 매니저나 시스템 진단 도구로 멋질 듯, 이게 efi 시스템 파티션에서 실행 가능할지 궁금, fat12 지원은 확인되는데 gpt 지원은 어떤지, 비디오 하드웨어를 곧장 제어하는 방식인지 아니면 터미널 형태 출력인지 궁금
    • 아직 EFI 시스템 파티션에서의 부팅은 테스트 전, FAT12 파일시스템만 공식 지원 중이고(메모리 디스크 기능은 있으나 현재 동작 안 함), gpt는 현재 미지원, FAT32 지원을 우선순위로 고려 중(보통 플래시 디스크는 FAT32 사용), 마지막 질문에 대해선 OS가 VGA 메모리 버퍼에 직접 쓰는 방식, GRUB에서 80x25 해상도 제공
  • 이번 프로젝트 멋지게 생각, “그냥 취미일 뿐, Linux처럼 크고 전문적으로 되지는 않을 거예요”라는 명대사를 놓친 게 아쉬움
  • 체코어 발음 부호 지원 계획이 있는지 궁금
    • 이번 버전에서는 영어만 지원 계획, 첫 번째 버전은 처음에 체코어로 만들어졌었음
  • Rust로 완전히 새로 만든 VGA 드라이버 사용 여부 궁금
  • DOS 스타일이지만 DOS와 호환성은 없는 게 맞는지 질문
    • 맞는 분석, 첫 번째 버전은 16비트로 MS-DOS와 거의 호환되게 설계, 그리고 간단한 디스크 I/O만 처리 가능하면 넓은 의미에서 DOS 시스템에 포함시킬 수도 있다 봄
    • 즉 MS-DOS 호환성, Alley Cat이나 Dune 2, Doom 실행 지원이 되는 수준 의미
  • 비동기 런타임 지원을 위해 이벤트 큐 필요 의견
    • 완성도 있는 이벤트 루프 구현은 어떤지 의견
  • Crysis 실행 가능성에 대한 유쾌한 질문