Moxnox 1.0: NT-Like, POSIX-Compatible OS Running Atop Btrfs
Moxnox 1.0: Btrfs 위에서 실행되는 NT 계열 POSIX 호환 운영체제
Moxnox 1.0은 NT의 시스템 호출과 저수준 인터페이스를 따르면서 POSIX 프로그램도 실행하도록 만든 취미 운영체제입니다. Btrfs를 루트 파일시스템으로 사용하며 amd64와 aarch64를 지원하고, 자체 빌드도 가능합니다. 다만 보안, 다중 사용자, 일부 POSIX 기능은 아직 빠졌고 Btrfs 지원은 실험적입니다.
- 주제
에디터 노트
Moxnox의 성과는 NT 인터페이스를 흉내 내는 데 그치지 않고 POSIX 함수 642개와 GNU 도구를 실제로 묶어 자체 빌드까지 이어간 데 있습니다. 다만 작성자가 보안 기능과 다중 사용자 지원이 없다고 밝히고 Btrfs 코드도 폐기 가능한 파일시스템에서만 시험하라고 했습니다. 따라서 현재 결과는 일상용 운영체제보다 NT와 POSIX 경계를 실험하는 개발 프로젝트로 읽는 편이 정확합니다. 댓글에서는 NT 설계의 독자성을 높이 평가하는 의견과 VMS의 영향, NT 드라이버 구조의 결함을 함께 짚는 의견이 나왔습니다. Moxnox는 NT의 시스템 호출과 저수준 인터페이스를 택했지만 NT 커널 구조 전체를 재현하지 않는다고 선을 긋습니다. 댓글에서 오간 NT와 VMS의 계보 논쟁은 이 프로젝트가 실제로 구현한 범위와 구분해야 합니다. PE 사용과 POSIX 함수의 Windows DLL 배치는 기존 호환성 경계를 조합한 선택이며, 현재 명시된 제약은 그 조합이 어디까지 작동하는지 보여줍니다.
AI 요약
Moxnox 1.0은 Windows NT의 시스템 호출과 저수준 인터페이스를 모델로 삼은 취미 운영체제입니다. 커널 구조와 데몬까지 Windows를 재현하는 ReactOS와는 목표가 다릅니다. 실행 파일은 ELF가 아닌 PE 형식이며 Windows 호출 규약과 SEH 예외 처리를 따릅니다. 동시에 POSIX 호환 계층을 제공해 재컴파일한 Unix 계열 프로그램을 실행하고 GNU 기본 시스템을 사용할 수 있습니다.
설계와 호환성
약 13만 줄의 C++로 작성됐으며 amd64와 aarch64를 지원합니다. POSIX 2024 함수 약 1,200개 가운데 642개를 구현했습니다. fork도 제공하며 musl의 수학·암호 함수, mingw의 printf 등을 활용합니다. POSIX 함수는 Windows처럼 ucrtbase, iphlpapi, ws2_32에 나뉘고, Windows에 없는 함수는 mnposix에 둡니다. 경로는 슬래시와 마운트 디렉터리를 사용하는 POSIX 방식입니다. NT의 가상 파일시스템, 토큰, 레지스트리, I/O completion port는 구현하지 않았습니다.
파일시스템과 실행
루트 파일시스템으로 Btrfs를 사용합니다. 작성자는 기본적인 용도는 지원하지만 충분히 검증되지 않았다며 폐기해도 되는 파일시스템 외에는 마운트하지 말라고 안내합니다. QEMU 이미지로 시험하거나 별도 파티션에 설치할 수 있고, 설치 안내는 btrfs-progs 최신 버전을 요구합니다. 빌드에는 제공된 Docker 교차 컴파일 환경과 CMake, Ninja를 사용합니다. C++ 모듈 때문에 기본 Unix Makefiles 대신 Ninja를 지정해야 합니다. Moxnox 자체에서 대부분을 빌드할 수 있어 자체 호스팅도 가능하지만 gcc, Rust, hexyl, ripgrep 빌드는 아직 지원하지 않습니다.
지원 범위와 제약
NVMe, SATA, SD 카드, virtio-block, USB 저장 장치와 일부 유선 네트워크 카드, USB HID, virtio-gpu 등을 지원합니다. GUI, 다중 사용자·그룹, 시간대, 키보드 배열, 로케일, 비 UTF-8 문자 집합은 아직 없습니다. 보안 기능도 없다고 명시합니다. AF_UNIX는 socketpair와 SCM_RIGHTS는 동작하지만 일반적인 클라이언트-서버 코드는 작동하지 않습니다. FIFO 입출력은 아직 버퍼로 연결되지 않으며 APC 방식의 신호는 스레드가 시스템 호출에서 돌아올 때만 전달돼 무한 루프 프로그램을 종료할 수 없습니다. 메모리 할당기와 TCP 성능, 페이지 캐시 관리도 개선 과제로 꼽습니다.
Hacker News 반응
- @EvanAnderson — NT는 기존 시스템을 재구현한 것이 아니라 실제로 설계된 운영체제입니다. 저와 생각이 잘 맞습니다.
- @Tuna-Fish — 드라이버 위쪽에는 캐시가 전혀 없는 I/O Manager, Object Manager, 필터, 드라이버 스택 전체의 끔찍한 설계 결함은 아쉽습니다. 지금도 그 문제를 안고 살아갑니다.
- @stonogo — 제 눈에는 VMS와 아주 비슷해 보입니다.
- @mesrik — 그렇습니다. 이유는 많은 사람이 이미 알고 있다고 생각합니다. 농담이 아니고 잘 몰랐다면 두 시스템을 주로 만든 Dave Cutler를 찾아보세요. 유튜브에 인터뷰가 있고 Computer History Museum의 2부작이 가장 자세할 겁니다.
- @jmmv — 몇 년 전 궁금해서 NT 설계 역사를 찾아보고 당시 Unix 시스템과 비교한 글을 썼습니다. 꽤 유익한 작업이었습니다.
- @mvdwoord — 좋은 글입니다. 암스테르담에서 들은 Mark Russinovich의 강연이 떠올랐습니다. Windows와 Linux, 두 커널 이야기라는 2004년 Tech-Ed 강연입니다.
- @bananaflag — Inside Windows NT 2판이 1판보다 훨씬 많은 정보를 준다고 들었습니다.
- @happymellon — NT를 과소평가한 건 Microsoft였습니다. 너무 많은 기능이 서드파티 도구를 써야만 접근할 수 있었거나 메뉴 안에 묻혔고, 나중에는 반쪽짜리 기능으로 복제되거나 대체됐습니다.
- @speed_spread — Microsoft가 Linux와 경쟁할 만한 저렴한 CLI 전용 NT를 만들지 않은 게 아쉽습니다. DOS 시절의 해커층을 유지하는 데도 도움이 됐을 겁니다.
- @EvanAnderson — Interix를 포함하고 기본적으로 텍스트 모드나 직렬 콘솔로 부팅하는 NT 배포판은 제가 꾸는 환상입니다.
- @hagbard_c — NT는 설계된 시스템이면서 기존 시스템인 VMS의 재구현이기도 합니다. VMS를 설계한 Dave Cutler가 만들었으니, Thomson과 Ritchie가 Unix를 만든 뒤 새 운영체제를 설계했다고 상상하는 것과 비슷합니다.
- @phendrenad2 — 실질적인 코드를 AI가 작성하지 않았다는 점이 인상적입니다.
- @userbinator — 제가 본 운영체제 중 설계 결정이 가장 특이한 편입니다. ELF 대신 PE를 쓴 점에는 동의합니다. ELF와 Unix 계열의 동적 링크는 간단히 말해 엉망입니다. POSIX 함수가 ucrtbase, iphlpapi, ws2_32에 들어간다는 것도 재미있습니다. 누군가 DOS, Windows, Linux, BSD, macOS 바이너리를 모두 실행하는 괴상한 운영체제를 만들 날이 머지않은 듯합니다. AI가 개발자를 대체하기보다는 개발을 크게 북돋는 것 같습니다. 최근에는 AI를 쓰지도 않는 사람들에게서도 새 프로젝트가 많이 나옵니다.
- @yjftsjthsd-h — 빠진 부분은 Darling이 충분히 개발되지 않아 Darwin 프로그램을 많이 실행하지 못한다는 점뿐입니다. Linux나 BSD, illumos에 WINE, DOSBox, Darling을 설치하면 지금도 그 구성이 가능합니다. BSD 프로그램을 다른 시스템에서 실행하는 부분은 약합니다.
- @maharmstone — Moxnox의 ucrtbase에는 Windows의 ucrtbase에 없는 기능이 없습니다. open(), read(), write()는 모두 Windows ucrtbase에도 있는 POSIX 함수입니다.
- @pjmlp — 역사적으로 모든 Unix가 ELF를 쓰는 것은 아닙니다. ELF는 Unix와 유사한 시스템에 나중에 들어왔습니다. z/UNIX와 AIX처럼 PE와 비슷한 COFF를 택한 시스템도 있습니다. 이들 시스템에서는 기본적으로 숨기는 심볼, 첫 호출 때 하는 지연 로딩, import 파일을 사용할 수 있습니다.
- @dvfjsdhgfv — 시스템 호출과 저수준 인터페이스는 NT와 맞추되 데몬이나 커널 구조까지 맞추지는 않는다는 대목을 기다렸습니다. ReactOS가 Windows를 그대로 재현하려는 것과 다릅니다.
- @bmacho — 왜 NT인가요? 빠른가요, 안전한가요, 현대적인 기능을 지원하나요, 해킹하기 좋은가요? 이유가 궁금합니다.
- @pjmlp — 또 다른 Unix 복제품이 아니라는 점은 좋습니다. 다만 Windows NT는 원래 POSIX와 비슷한 면이 있었습니다. Microsoft가 POSIX 하위 시스템에 진지하게 투자하지 않은 게 문제였습니다. 그랬다면 PC에서 Linux가 성장하지 못했을 수도 있고, 1993년부터 OS X와 비슷한 경험을 제공했을지도 모릅니다.
- @chasil — 강제 파일 잠금 때문에 Windows Update가 고통스럽습니다. 1970년대의 이유는 이해하지만 현대에는 큰 부담입니다. 이 구현에는 들어가지 않았기를 바랍니다.
원문: GitHub / 번역·요약: Trawling