1P by GN⁺ | ★ favorite | 댓글 1개
  • Fusion OS는 x86-64용 취미 운영체제로, 구현 언어로 Nim을 사용함
  • 현재 구현된 기능은 UEFI 부트로더, 메모리 관리, 작업 관리, 시스템 호출, IPC, 하드웨어 지원으로 나뉨
  • 메모리와 작업 관리에는 demand paging, 선점형 멀티태스킹, 우선순위 기반 스케줄링, ELF 로더가 포함됨
  • 실행 환경은 현재 QEMU이며, 빌드에는 Nim, LLVM의 clang·lld, Just가 필요함
  • 향후 계획에는 capability 기반 보안, 디스크 I/O, 파일 시스템, 셸, GUI, 네트워킹이 포함됨

Fusion OS 개요

  • Fusion은 x86-64용 취미 운영체제이며 Nim으로 구현됨
  • 개발 과정은 0xc0ffee.netlify.app에 문서화되어 있음
  • 스크린샷 항목에는 UEFI 부트로더, 커널 부팅 및 실행 화면이 포함됨
  • GUI 스크린샷은 graphics 브랜치의 화면이며, 해당 브랜치는 아직 작업 중임

현재 구현된 기능

  • 부트

    • UEFI Bootloader 구현됨
  • 메모리 관리

    • Single Address Space 구조의 Higher Half Kernel
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • 작업 관리

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • Demand Paged 및 Relocation을 지원하는 ELF Loader
  • 시스템 호출

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • 하드웨어

    • PCI Device Enumeration
    • ACPI Configuration
    • Local APIC Timer
    • I/O APIC Interrupts
    • PS/2 Keyboard Driver
    • Bochs Graphics Adapter Driver

계획된 기능

  • Capability-based Security
  • Event-based Task State Machines
  • Disk I/O
  • File System
  • Shell
  • GUI
  • Networking

빌드와 실행

  • 빌드에는 Nim, LLVMclang·lld, Just가 필요함
  • clanglld 바이너리는 PATH에 있어야 함
    • PATH에 없으면 .env 파일에서 해당 바이너리 경로를 지정할 수 있음
  • 빌드 명령은 다음과 같음
just build
  • Fusion은 현재 QEMU에서 실행됨
  • 실행 명령은 다음과 같음
just run

라이선스

  • 라이선스는 MIT

댓글과 토론

Hacker News 의견들
  • 작성자입니다. 질문 있으면 답하겠습니다

    • Nim의 가비지 컬렉터가 어려움을 만든 적이 있나요?
      없다면 Nim 특유의 stop-the-world가 아닌 GC 덕분이라고 보시나요?
      https://nim-lang.org/1.4.0/gc.html
    • 프로젝트에서 가장 골치 아팠던 부분은 무엇이었나요? 그리고 운영체제를 처음부터 작성하려는 사람에게 조언이 있을까요?
    • 스크린샷은 어디 있나요?
    • Nim을 쓰지는 않지만 흥미로운 언어라고 봅니다. 예전 프로젝트를 다시 컴파일할 때마다 수정이 필요했다는 불평을 본 적이 있어서, 호환성 깨지는 변경이 얼마나 자주, 얼마나 심하게 일어나는지 궁금합니다
    • Swift 대신 Nim을 선택했나요?
      지금은 둘이 꽤 비슷해 보이는데, Swift가 더 실전 검증은 많이 된 것 같아서요
  • 블로그와 문서가 훌륭합니다. 보여주는 것과 설명하는 것의 균형이 아주 좋고, 이렇게 공유해줘서 고맙습니다

    • 글을 쓰는 과정이 설계와 구현을 개선하는 데 여러 번 도움이 됐습니다. 글쓰기는 내가 가진 가정을 의심하게 만들고, 독자가 왜 이런 결정을 했는지 이해할 수 있을지 스스로 묻게 합니다
      하는 모든 일을 정당화해야 하니 불필요한 복잡성을 제거하고 더 중요한 부분에 집중하는 데 도움이 됩니다
  • Fusion 작성자의 개발 일지:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • 이런 걸 보니 좋습니다. 몇 년 동안 Nim 생태계에 간헐적으로 관여해 왔는데, 이 작고 즐거운 프로젝트가 계속 굴러가고 있다니 반갑네요

  • 멋지네요. ELF 모듈을 열어봤는데 읽기 쉬워서 재미있었습니다
    언젠가 Nim으로 실시간 운영체제를 작성해보고 싶습니다. Nim으로 임베디드 프로그램을 작성하는 걸 좋아해서 RTOS를 만드는 것도 재미있을 것 같습니다

    • RTOS를 만들기로 한다면 꼭 따라가 보고 싶습니다
    • ELF는 매우 단순한 파일 형식입니다. 읽기 어려웠다면 오히려 놀랐을 것 같네요
  • Nim이 무엇이고, Fusion의 전반적인 설계 목표는 무엇인가요?
    너무 기초적인 질문이 아니길 바랍니다. 배경지식이 전혀 없어서 누가 설명해주면 좋겠습니다

    • 다른 분들이 말했듯이 Nim은 정적 타입 프로그래밍 언어이고 C, C++, JavaScript로 컴파일됩니다. C와의 상호 운용성이 좋아서 시스템 프로그래밍을 쉽게 해줍니다
      왜 Nim인지에 대해서는 함께 만든 사이트에서 이렇게 설명했습니다:

      왜 Nim인가? Nim은 결정적 메모리 관리, 소멸자, 이동 의미론을 갖춘 저수준 시스템 프로그래밍을 가능하게 하는 몇 안 되는 언어 중 하나입니다. 가비지 컬렉터는 선택 사항입니다. 정적 타입이라 타입 안전성도 더 높습니다. 운영체제 개발에 필수인 인라인 어셈블리도 지원합니다. 다른 선택지로는 C, C++, Rust, Zig가 있습니다. 모두 훌륭한 언어지만, 단순함과 우아함, 성능 때문에 Nim을 골랐습니다.
      Fusion의 전체 설계 목표는 꽤 야심적이며, 같은 페이지에 나열해 두었습니다. 또 하나의 Unix 계열 운영체제를 만들고 싶지는 않고, 단일 주소 공간과 보호를 위한 능력 기반 보안 같은 운영체제 설계의 근본 문제를 실험해보고 싶습니다
      또 탐구하려는 부분은 프로세스와 작업을 어떻게 모델링할지입니다. 저는 이것들이 정적으로 타입이 지정된 채널로 서로 통신하는 상태 기계로 모델링되어야 한다고 봅니다. 새 아이디어는 아니고 Singularity OS에서 이미 시도된 바 있습니다
      커널에는 채널과 사용자 공간에서 채널을 쓰는 기초 지원이 있지만, 아직 초기 단계입니다
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim은 Ada와 Python에서 영감을 받은 느낌의 멋진 언어입니다
    • 프로젝트 문서에 나와 있습니다:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Nim 프로젝트가 더 많이 보이면 기쁩니다. 주로 Python과 JavaScript를 쓰지만, 현대적이고 빠른 정적 타입 언어를 하나 더 아는 이점에 관심이 있습니다
    Go, Rust, Zig, Nim 중에서는 Nim이 가장 마음에 듭니다. 코드를 읽을 때 문법 잡음이 적다는 의미에서 가장 Python스럽게 느껴집니다
    새 코드를 시제품으로 만들 때 REPL을 쓰는 걸 아주 좋아하는데, INim이 그걸 잘해줍니다
    현재 Nim의 가장 큰 문제는 커뮤니티 규모가 작다는 점입니다. 그래서 사용 가능하고 유지보수되는 라이브러리의 세계가 다른 언어 커뮤니티보다 작습니다. 닭과 달걀 문제지만, 더 많은 개발자들이, 저를 포함해, “세상에서 보고 싶은 변화가 되기”로 해결할 수 있습니다

    • 솔직히 커뮤니티 규모가 문제라고 느껴본 적은 없습니다. Nim 포럼은 활발하고, 도움을 구하러 가면 보통 빠르고 정확한 답을 받습니다
      언어도 신중하게 발전하고 있고, Araq가 이끄는 만큼 장기적으로 더 좋아질 것 같습니다
      생태계는 Python이나 Rust만큼 크지 않지만, 놀랍게도 표준 라이브러리에 대부분 필요한 것이 들어 있습니다. 뭔가를 하려고 서드파티 패키지를 찾는 일이 드뭅니다
      물론 Nim이 덜 알려진 언어 축에 속한다는 점은 인정합니다. 그래도 해야 할 일을 아주 잘하는 유망한 언어라는 장점이 사라지지는 않습니다
      커뮤니티가 더 집중해야 할 부분은 IDE 지원이라고 봅니다. VSCode 확장은 괜찮지만 거친 부분이 있습니다. 저는 JetBrains IDE를 더 선호하는데, 공식 Nim 플러그인은 좋게 말해도 많이 부족합니다
      Nim용 JetBrains 플러그인을 만드는 사이드 프로젝트도 있습니다만, 아직 많이 진행하지는 못했습니다
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nim은 훌륭한 시스템 프로그래밍 언어이고, 더 인기 있어져야 합니다

    • 나이가 들어서 그런 건지도 모르겠지만, 들여쓰기를 공백 두 칸으로 강제하면 Nim 코드를 읽기가 어렵습니다. 코드 블록이 거의 눈에 잘 안 들어오고, 언어를 읽기 쉽게 만들기 위해 IDE에 의존하고 싶지는 않습니다