3P by neo 5달전 | favorite | 댓글 1개

새로운 프로그래밍 프로젝트: Bunnix

프로젝트 배경

  • 최근 "진짜 일"에서 잠시 벗어나기 위해, 낮은 위험성과 순수하게 여가를 위한 새로운 프로그래밍 프로젝트를 시작했음.
  • 4월 21일부터 x86_64 타겟을 위한 Unix 유사 운영체제를 약 한 달 동안 얼마나 만들 수 있는지 확인해보기로 했음.
  • 결과물은 Bunnix라는 이름의 운영체제임.
  • 총 27일 동안 이 프로젝트에 시간을 투자했음.

Bunnix 데모

  • Bunnix 0.0.0 ISO 파일을 제공함.
  • QEMU를 이용해 부팅할 수 있음:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • USB 스틱에 ISO를 작성하여 실제 하드웨어에서 부팅할 수도 있음.
  • 대부분의 AMD64 기기에서 작동할 가능성이 높음.
  • 제한 사항: USB 지원이 없으므로 PS/2 키보드가 필요함.

Bunnix의 구성 요소

  • Bunnix 커널은 주로 Hare로 작성되었으며, 일부 C 구성 요소(lwext4, libvterm)를 포함함.
  • 지원하는 드라이버:
    • PCI (legacy)
    • AHCI 블록 장치
    • GPT 및 MBR 파티션 테이블
    • PS/2 키보드
    • 플랫폼 시리얼 포트
    • CMOS 시계
    • 프레임버퍼 (부트로더에 의해 설정됨)
    • ext4 및 memfs 파일 시스템
  • 지원하는 커널 기능:
    • 가상 파일 시스템
    • 다양한 /dev 장치
    • 터미널 에뮬레이터 및 termios 지원
    • 약 40개의 시스템 호출 (예: clock_gettime, poll, openat, fork, exec 등)
  • Bunnix는 단일 사용자 시스템이며, 현재 Unix 파일 모드와 소유권을 강제하지 않음.

부트로더

  • 두 개의 부트로더 포함:
    • Legacy 부트: Hare로 작성됨.
    • EFI 부트: C로 작성됨.
  • 커널을 ELF 파일로 로드하며, 필요시 initramfs도 로드함.

사용자 공간 소프트웨어

  • 주로 서드파티 소프트웨어로 구성됨:
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (man pages)
    • sbase (core utils)
    • tcc (C 컴파일러)
    • Vim 5.7
  • libc는 musl libc에서 파생되었으며, Bunnix의 필요에 맞게 수정됨.

Bunnix 개발 과정

  • Mastodon에서 개발 과정을 문서화했음.
  • Bunnix의 일부 코드는 이전 프로젝트인 Helios에서 가져옴.
  • ext4 지원과 가상 터미널 통합이 가장 어려운 부분이었음.
  • 스케줄러와 신호 처리 구현도 도전적이었음.
  • 서드파티 소프트웨어 포팅은 musl libc 기반 덕분에 비교적 쉬웠음.

배운 점

  • 파일 시스템에 대해 많은 것을 배웠음.
  • 드라이버 접근 방식이 단순해졌음.
  • 신호 처리의 복잡성을 이해하게 되었음.
  • 메모리 관리에서 bitmap 할당자가 효과적임을 확인했음.
  • 모놀리식 커널이 마이크로커널보다 구현이 훨씬 간단함을 깨달았음.

앞으로의 계획

  • Bunnix는 여가를 위한 프로젝트였으며, 현재는 더 이상 시간을 투자할 계획이 없음.
  • 향후 Helios 프로젝트로 돌아가 많은 교훈을 적용할 예정임.
  • Bunnix의 개선 우선순위:
    • 파일 시스템 캐시
    • ext4 버그 수정
    • procfs 및 top
    • mmap 파일
    • 더 많은 신호 (예: SIGSEGV)
    • 다중 사용자 지원
    • NVMe 블록 장치
    • IDE 블록 장치
    • ATAPI 및 ISO 9660 지원
    • Intel HD 오디오 지원
    • 네트워크 스택
    • 기본 시스템에 Hare 툴체인
    • 셀프 호스팅

GN⁺의 의견

  • Bunnix의 가치: Bunnix는 Hare 언어를 사용한 커널 해킹의 좋은 예시로, 새로운 언어와 기술을 배우고자 하는 개발자들에게 흥미로울 수 있음.
  • 파일 시스템 설계: 파일 시스템 설계는 운영체제 개발에서 중요한 부분으로, Bunnix를 통해 많은 것을 배울 수 있음.
  • 모놀리식 vs 마이크로커널: 모놀리식 커널과 마이크로커널의 장단점을 비교할 수 있는 좋은 사례로, 운영체제 설계에 대한 깊은 이해를 제공함.
  • 커뮤니티 참여: Bunnix는 오픈소스 프로젝트로, 커뮤니티의 참여와 기여를 통해 더욱 발전할 가능성이 있음.
  • 미래의 개선점: Bunnix의 향후 개선 사항들은 운영체제 개발에 관심 있는 사람들에게 좋은 학습 기회를 제공함.
Hacker News 의견

해커뉴스 댓글 모음 요약

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • 원래 유닉스가 몇 주 만에 발명된 것을 떠올리게 하는 멋진 프로젝트임.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • 신호 처리 방식에 대해 처음부터 끝까지 배우게 되었음. 유닉스 설계의 약점 중 하나라고 생각했는데, 이번 프로젝트도 그 생각을 바꾸지 못했음.
  • Impressive, super cool, and inspiring!

    • 인상적이고, 매우 멋지며, 영감을 주는 프로젝트임.
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • 단기간에 인상적인 것을 만드는 것은 오랜 경험과 재능이 필요함.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • Mastodon에서 매일 업데이트를 보는 것이 정말 멋졌음. 숙련된 사람이 복잡한 소프트웨어를 점진적으로 완성해가는 과정을 보는 것이 흥미로웠음.
  • From "Linux System Call Table – Chromiumos"

    • 리눅스 시스템 호출 테이블에 대한 자료를 공유함.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare는 흥미로운 언어로 보임. 하지만 멀티코어 시대에 이 제한이 채택을 제한할 것 같음.
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • 매우 멋짐. 대부분의 유닉스 클론은 보통 C로 작성되지만, 이 프로젝트는 새로운 프로그래밍 언어로 작성됨.
  • Quite cool, by making use of Hare instead.

    • Hare를 사용한 것이 매우 멋짐.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • GPU를 일급 시민으로 대우하는 운영체제를 기다리고 있음.