본문으로 건너뛰기
피드

코넬대가 공개한 정확히 2,000줄짜리 교육용 운영체제

open-source 약 6분

코넬대 기반 프로젝트인 egos-2000은 학생이 교육용 운영체제 전체 코드를 직접 읽을 수 있게 만드는 걸 목표로 한다. C, 헤더, 어셈블리, make 파일을 합쳐 정확히 2,000줄이며, QEMU와 RISC-V 보드에서 동작하고 9개 코스 프로젝트가 붙어 있다. 운영체제 수업에서 ‘작지만 전체 구조가 보이는 코드베이스’가 필요했던 사람에게 꽤 반가운 자료다.

  • 1

    egos-2000은 정확히 2,000줄 코드로 구성된 교육용 운영체제

  • 2

    QEMU와 RISC-V 보드에서 동작하며, EGOS 책은 이 OS를 바탕으로 9개 코스 프로젝트를 제공

  • 3

    earth, grass, application 3계층 구조로 하드웨어 추상화부터 파일 시스템과 셸까지 다룸

  • 4

    C 코드 1,592줄, 헤더 258줄, 어셈블리 92줄, make 58줄로 구성

  • 5

    Northeastern과 Cornell 수업에서 사용됐고, DOOM 실행 사례까지 있음

  • 코넬대 쪽에서 교육용 운영체제 egos-2000을 공개함. 핵심 컨셉은 아주 명확함

    • ‘학생이 교육용 OS의 모든 코드를 직접 읽을 수 있어야 한다’는 게 프로젝트 비전임
    • 그래서 전체 코드가 정확히 2,000줄로 맞춰져 있음. 이름 그대로임
  • 줄 수 구성이 꽤 흥미로움

    • C 파일 30개가 1,592줄로 대부분을 차지함
    • C/C++ 헤더 9개가 258줄, 어셈블리 3개가 92줄, make 파일 1개가 58줄임
    • blank 545줄, comment 820줄을 제외한 실제 code 합계가 정확히 2,000줄로 계산됨

중요

> 교육용 OS에서 ‘작다’는 건 그냥 미니멀하다는 뜻이 아님. 학생이 커널부터 셸까지 전체 경로를 머릿속에 넣을 수 있느냐가 포인트임.

  • egos-2000은 QEMU와 RISC-V 보드에서 모두 돌아감

    • QEMU로는 실제 보드 없이 노트북에서 실습할 수 있음
    • RISC-V 보드 지원 덕분에 운영체제가 추상 개념이 아니라 실제 하드웨어 위에서 어떻게 움직이는지도 볼 수 있음
  • 구조는 earth, grass, application 3계층으로 나뉨

    • earth 계층은 하드웨어별 추상화를 담당함
    • 여기엔 tty와 disk 장치 인터페이스, timer와 memory management 인터페이스가 포함됨
    • grass 계층은 하드웨어와 무관한 추상화를 담당하고, process control block과 system call interface를 다룸
    • application 계층은 file system, shell, user commands를 구현함
  • 이 3계층 인터페이스는 egos.h의 struct earth와 struct grass 정의에 드러남

    • 교육용 프로젝트에서 이건 꽤 중요함. 학생이 ‘어디까지가 하드웨어 의존 코드고, 어디부터가 OS 공통 로직인지’를 코드 구조로 바로 볼 수 있기 때문임
    • 운영체제 수업에서 제일 헷갈리는 부분 중 하나가 추상화 경계인데, 이 프로젝트는 그 경계를 이름부터 노골적으로 드러냄
  • EGOS 책에는 egos-2000 기반 코스 프로젝트 9개가 포함돼 있음

    • 단순히 GitHub에 작은 OS 코드만 던져둔 게 아니라, 수업에서 단계적으로 확장하거나 분석할 수 있게 구성된 자료에 가까움
    • Northeastern CS4973/6640과 Cornell CS4411/5411에서 사용된 이력이 언급됨
  • 포팅 사례도 꽤 다양함

    • mriscv라는 SystemVerilog 기반 단순 프로세서로 포팅됐음
    • Allwinner D1과 Sipeed Lichee RV64 Nezha compute module로도 포팅됨
    • 심지어 DOOM 비디오 게임을 egos-2000에서 돌린 사례까지 있음. 교육용 OS 치고는 꽤 귀여운 데모임
  • 운영체제 공부하는 개발자에겐 꽤 괜찮은 입구가 될 수 있음

    • Linux 커널은 너무 크고, 추상 강의만 보면 감이 안 오고, xv6도 처음엔 버거운 사람에게 ‘전체를 읽는 경험’을 줄 수 있음
    • 2,000줄 안에 하드웨어 추상화, 프로세스, 시스템 콜, 파일 시스템, 셸이 들어간다는 건 OS의 큰 그림을 잡는 데 도움이 됨

기술 맥락

  • egos-2000의 선택은 기능을 많이 넣는 게 아니라, 전체를 읽을 수 있는 크기로 줄이는 쪽이에요. 운영체제는 커널, 메모리, 프로세스, 파일 시스템이 서로 얽혀 있어서 일부만 보면 감이 잘 안 오거든요. 그래서 2,000줄 제한은 단순한 숫자놀이가 아니라 학습 설계에 가까워요.

  • QEMU와 RISC-V를 같이 지원하는 것도 실용적인 선택이에요. QEMU는 수업 환경을 맞추기 쉽고, RISC-V 보드는 실제 하드웨어 감각을 줄 수 있어요. 같은 OS를 에뮬레이터와 보드에서 모두 돌리면 추상화 계층이 왜 필요한지 자연스럽게 보이죠.

  • earth, grass, application 계층은 OS 수업에서 중요한 경계선을 보여줘요. 하드웨어별 처리는 earth에 두고, 프로세스와 시스템 콜 같은 공통 로직은 grass에 두고, 파일 시스템과 셸은 application에 올리는 식이에요. 학생 입장에선 변경 범위가 어디인지 추적하기 쉬워져요.

  • 이 프로젝트가 흥미로운 이유는 ‘작지만 OS처럼 생긴’ 균형 때문이에요. 너무 작은 예제는 실제 운영체제 감각이 없고, 너무 큰 코드는 읽다 지치는데, egos-2000은 수업 프로젝트 9개를 붙일 만큼의 구조를 유지하면서도 전체 코드를 훑을 수 있게 만든 쪽이에요.

운영체제 학습 자료는 보통 너무 장난감 같거나, 반대로 xv6처럼 읽을 건 많은데 초심자에겐 부담스러운 경우가 많음. egos-2000은 ‘전부 읽을 수 있는 크기’라는 목표를 숫자로 박아둔 게 매력이다.

댓글

댓글

댓글을 불러오는 중...

open-source

뱀부랩, 오픈소스 슬라이서 개발자에게 법적 압박 걸었다가 역풍 맞음

3D 프린터 제조사 뱀부랩이 OrcaSlicer-BambuLab 개발자에게 중단 요구서를 보내면서 오픈소스와 수리권 커뮤니티의 반발을 샀다. GamersNexus와 Louis Rossmann은 개발자의 허락을 받아 소프트웨어를 다시 호스팅하고, 소송이 걸리면 각각 1만 달러씩 법률 지원을 하겠다고 나섰다.

open-source

OrcaSlicer 포크, Bambu Lab 프린터의 인터넷 연결 기능 되살림

FULU Foundation의 OrcaSlicer-bambulab 포크가 Bambu Lab 프린터에서 LAN 전용 제한 없이 BambuNetwork 기반 인터넷 연결을 다시 지원한다고 밝힘. Windows에서는 WSL 2 설정이 필요하고, Linux에서는 일반 설치만으로 충분하다고 안내함.

open-source

이맥스가 Git 대신 Bazaar를 붙잡았던 6년짜리 오픈소스 드라마

이맥스는 2008년 CVS에서 벗어나면서 Git 대신 GNU 프로젝트인 Bazaar를 선택했고, 이 결정은 성능 벤치마크와 개발자 반발을 압도한 정치적 판단에 가까웠다. Bazaar는 느리고 유지보수도 흔들렸지만, GNU 패키지는 GNU 도구를 써야 한다는 원칙 때문에 전환은 2014년까지 미뤄졌다. 결국 ELPA 브랜치 문제와 Bazaar 개발 중단, 변환 스크립트 준비 끝에 이맥스는 Git으로 옮겨갔다.

open-source

현대차·기아, 오픈소스 특허 방어망 넓혀 소프트웨어 중심 차량 전환 준비

현대차·기아가 오픈소스 소프트웨어 특허 분쟁을 줄이기 위해 글로벌 특허 네트워크 OIN 2.0에 가입했다. 소프트웨어 중심 차량, 클라우드, 커넥티드 서비스처럼 오픈소스 의존도가 큰 영역에서 법적 리스크를 미리 관리하려는 움직임이다.

open-source

현대차·기아, 오픈소스 특허 분쟁 대비해 OIN 2.0 가입

현대차와 기아가 오픈소스 소프트웨어 관련 특허 분쟁 리스크를 줄이기 위해 글로벌 특허 네트워크 OIN 2.0에 가입했다. 소프트웨어 중심 자동차(SDV), 클라우드, 커넥티드 서비스처럼 오픈소스 의존도가 커지는 영역에서 안정적인 개발과 서비스 운영 기반을 만들려는 움직임이다.