Oasis Linux

1 week ago 18
  • oasis는 기반 시스템의 모든 소프트웨어를 정적 링크하는 작은 Linux 시스템으로, 익숙한 Linux 배포판보다 BSD에 가까운 방향을 가짐
  • 모든 패키지는 samurai로 빌드하고 Lua 스크립트로 매니페스트를 생성해, 초기 패키징 비용은 크지만 예측 가능하고 재현 가능한 빌드와 패키지 경계를 넘는 증분 빌드를 제공함
  • 시스템 TLS와 암호화 라이브러리로 BearSSL을 쓰며, libcurl의 네이티브 BearSSL 지원과 libtls-bearssl을 통해 시스템 전반에서 BearSSL을 사용함
  • oasis에는 패키지 관리자가 없고, 어떤 패키지의 어떤 파일을 포함할지 명세로 구성한 뒤 빌드 시스템이 결과 파일시스템 트리를 git 저장소에 기록해 /에 병합하거나 다른 머신에서 가져올 수 있음
  • /etc를 전체적으로 이해할 수 있을 만큼 단순하게 유지하고, gcc나 clang보다 ISO C 표준에 엄격하며 훨씬 작은 cproc 컴파일러로 빌드하는 것을 주요 목표로 삼음

oasis 개요

  • oasis는 작은 Linux 시스템이며, 익숙한 다른 Linux 기반 운영체제와는 꽤 다르고 BSD에 더 가까운 방향을 가짐
  • 기반 시스템의 모든 소프트웨어가 정적 링크되며, 디스플레이 서버 velox와 웹 브라우저 netsurf도 포함됨
  • 동적 링크보다 단순한 메커니즘을 사용하고, 라이브러리 업그레이드 문제를 없애며, 다른 시스템으로 쉽게 복사할 수 있는 완전한 자체 포함 바이너리를 만듦

빌드와 부트스트랩

  • 모든 패키지는 samurai로 빌드되며, 빌드 매니페스트는 Lua 스크립트로 생성됨
  • 이 방식은 초기 패키징 비용이 상당하지만 유지보수 비용은 작고, 거의 최적에 가까운 빌드 시간, 예측 가능하고 재현 가능한 빌드, 줄어든 빌드 시점 의존성, 패키지 경계를 넘는 증분 빌드를 제공함
  • 부트스트랩에는 git, lua, curl, sha256 유틸리티, 표준 압축 유틸리티, x86_64-linux-musl 크로스 컴파일러가 있는 임의의 POSIX 시스템이면 충분함
  • macOS나 OpenBSD 같은 비-Linux 시스템에서도 크로스 컴파일이 간단해짐

TLS, 패키지 구성, 시스템 확장

  • BearSSL이 시스템 TLS 및 암호화 라이브러리로 쓰임
  • BearSSL은 매우 작고 잘 작성되어 있지만 널리 채택되지는 않았음
  • libcurl의 네이티브 BearSSL 지원과 BearSSL 기반 libtls 대체 구현인 libtls-bearssl을 통해 oasis는 시스템 전반에서 BearSSL을 사용함
  • 일부 선택 패키지만 여전히 LibreSSL을 필요로 함
  • oasis에는 패키지 관리자가 없음
  • 대신 어떤 패키지의 어떤 파일을 시스템에 포함할지 명세로 구성하고, 빌드 시스템이 결과 파일시스템 트리를 git 저장소에 기록함
  • 이 결과는 /에 병합하거나 다른 머신에서 가져올 수 있음
  • 완전한 시스템 제공을 목표로 하지만, 목표와 잘 맞지 않는 자유 소프트웨어가 많아 수천 개 패키지 저장소를 새로 만들고 유지하기보다 pkgsrcnix와의 연동을 선택함
  • 이를 통해 기반 시스템을 작고 집중된 상태로 유지하면서 필요한 소프트웨어로 시스템을 확장할 수 있음

설정과 C 구현 방향

  • oasis의 지침 중 하나는 /etc 디렉터리를 시스템 관리자가 전체를 이해하고 적절히 커스터마이즈할 수 있을 만큼 단순하게 유지하는 것임
  • 기본 설정에서 가장 복잡한 파일은 시스템 초기화 스크립트 /etc/rc.init이며, 길이는 16줄뿐임
  • oasis의 주요 목표는 gcc나 clang보다 ISO C 표준에 훨씬 엄격하고 크기가 몇 자릿수 더 작은 C 컴파일러 cproc로 빌드하는 것임
  • 이 작업은 아직 진행 중이지만, 모든 핵심 패키지와 대부분의 다른 패키지가 cproc으로 성공적으로 빌드됨

원칙

  • 소프트웨어 복잡도는 모든 전이 의존성을 포함해 측정해야 함
  • 실행 파일은 정적으로 링크되어야 함
  • 소프트웨어 구성요소는 쉬운 커스터마이즈나 수정을 허용해야 함
  • 패키지 소스는 URL이나 git 서브모듈로 참조해야 하며, 직접 포함하지 않아야 함
  • /etc는 전체를 이해할 수 있을 만큼 단순해야 함
  • 패치는 잘 정리되고 좋은 설명을 가져야 하며, 항상 깨끗하게 적용되어야 함

설치와 QEMU 이미지

  • 설치 가이드는 wiki에 있음
  • oasis는 야심적인 프로젝트이며 아직 할 일이 많이 남아 있음
  • 사용자는 직접 커널을 빌드하고 문제가 생겼을 때 시스템을 조정하는 데 익숙해야 함
  • 직접 설치하지 않고 시험해볼 수 있는 QEMU 이미지가 제공됨
  • 아카이브 안에는 루트 파일시스템, Linux 커널, qemu 실행 스크립트가 들어 있음
  • 사용 방법 정보가 담긴 README.md도 포함되며, ./run은 그래픽 모드로 실행하고 ./run -s는 시리얼 모드로 실행함

포함 소프트웨어 선택

  • oasis는 가능할 때마다 더 작고 단순한 라이브러리와 도구 구현을 사용함
  • 주요 선택은 다음과 같음
    • glibc 대신 musl
    • coreutils 대신 sbase
    • util-linux 대신 ubase
    • gzip 대신 pigz
    • man-db 대신 mandoc
    • openssl 대신 bearssl
    • bash 대신 oksh
    • dhclient 또는 dhcpcd 대신 sdhcp
    • vim 또는 emacs 대신 vis
    • bison 대신 byacc
    • sysvinit 또는 systemd 대신 perp와 sinit
    • chromium 또는 firefox 대신 netsurf
    • ninja 대신 samurai
    • Xorg 대신 velox
    • ncurses 대신 netbsd-curses
  • 이 패키지들은 논리적인 sets로 묶여 있음
  • 전체 목록은 pkg 디렉터리에서 확인할 수 있음
  • 원하는 소프트웨어가 없더라도 pkgsrc나 nix를 통해 설치할 수 있을 가능성이 큼

연락 채널

  • 메일링 리스트는 ~mcf/oasis@lists.sr.ht에 있음
  • IRC 채널은 libera.chat의 #oasis임
  • 질문, 패치, 일반 논의에 사용할 수 있음
Read Entire Article