Moxnox 1.0: Btrfs 위에서 돌아가는, NT를 닮은 POSIX 호환 운영체제

Moxnox 1.0: NT-Like, POSIX-Compatible OS Running Atop Btrfs

github.com/maharmstone ▲ 97 댓글 38 SockThief

요약

NT의 시스템 호출을 따르면서 POSIX 프로그램을 돌리는 취미용 운영체제 Moxnox가 1.0에 도달했습니다.

GitHub 사용자 maharmstone이 공부와 재미로 만든 운영체제입니다. 작성자는 NT 커널이 지나치게 저평가됐고, 윈도가 POSIX 호환을 여러 번 버렸다고 보고 둘을 직접 합쳤습니다.

왜 중요한가

  • 유닉스를 또 하나 복제하지 않고 NT 설계를 바탕으로 삼은 드문 취미 운영체제입니다.
  • ReactOS처럼 윈도를 그대로 재현하지 않고, 시스템 호출 같은 저수준 인터페이스만 NT에 맞췄습니다.
  • 스스로를 빌드할 수 있을 만큼 갖춰져 bash, git, Python, OpenSSH 같은 도구가 돌아갑니다.

핵심 내용

  • C++ 약 13만 줄로 amd64와 aarch64를 지원하고, 파일 시스템으로 Btrfs를 씁니다.
  • 실행 파일은 ELF 대신 윈도식 PE 형식(.exe, .dll)이고, POSIX 시그널은 APC(비동기 프로시저 호출)로 구현했습니다.
  • POSIX 2024 함수 약 1,200개 가운데 642개를 구현했고 fork도 지원합니다.
  • GUI, 시간대, 로케일, 다중 사용자, 보안 기능이 없고 윈도 프로그램도 돌리지 못합니다.
  • Btrfs 코드는 아직 단단하지 않아 버려도 되는 파일 시스템에서만 쓰라고 당부했습니다.

HN 반응

  • NT가 처음부터 제대로 설계된 커널이라는 데 공감이 많았지만, 드라이버 스택 구조와 강한 파일 잠금을 NT의 약점으로 꼽는 반론도 나왔습니다.
  • 마이크로소프트가 POSIX 서브시스템에 진지했다면 리눅스가 PC에서 뜨지 못했을 것이라는 의견에, 무료 리눅스와의 라이선스 비용 차이가 더 컸다는 보충이 붙었습니다.

댓글

26개 표시 · 전체 38개
  1. EvanAnderson HN

    그리고 NT 커널은 말도 안 되게 저평가돼 있고, 취미로 OS를 만지는 사람들 사이에선 거의 알려지지도 않았습니다. 리눅스가 자체 설계를 내놓기까지 몇 년씩 걸린 기능들이 NT에는 이미 있었는데...

    제 마음을 아는 분이네요. NT는 이미 있는 걸 다시 구현한 게 아니라 제대로 설계한 물건이었습니다.

  2. jmmv HN

    몇 년 전에 이 부분이 궁금해서 NT 설계의 역사를 파고들고 당시 유닉스 시스템들과 비교해서 글을 하나 썼습니다. https://jmmv.dev/2024/09/windows-nt-vs-unix-design.html 꽤 많이 배운 작업이었습니다.

  3. mvdwoord HN

    정말 재미있게 읽었습니다. 제가 암스테르담에서 들었던 마크 러시노비치(Mark Russinovich)의 강연이 생각나네요.

    Windows and Linux: A Tale of Two Kernels - Tech-Ed 2004

    https://youtube.com/watch?v=HdV9QuvgS_w

  4. trentnelson HN

    좋은 글이지만 NT의 가장 좋은 기능 중 하나인 완료 포트(completion port)가 언급되지 않았네요! 완료 포트는 NT 커널의 장점을 전부 하나로 엮어 주고, 고성능 멀티스레드 I/O 애플리케이션(특히 소켓 서버)을 쓰는 일을 즐겁게 만들어 줍니다. 비스타에서 도입된 스레드 풀 API(내부적으로 완료 포트를 씁니다)도 훌륭한 추가였고요. https://pyparallel.org 도 이 강력한 기본 요소들 덕분에 3개월쯤 만에 해킹으로 만들어 낼 수 있었습니다.

  5. bananaflag HN

    Inside Windows NT는 2판이 1판보다 훨씬 알차다고 들었습니다.

  6. Tuna-Fish HN

    그때 설계돼서 지금까지 우리가 떠안고 사는 끔찍한 결함들은 아쉽죠. I/O 관리자, 객체 관리자, 필터, 드라이버 스택으로 이어지는 난장판이 대표적이고, 드라이버 위쪽에는 캐싱도 전혀 없잖아요.

  7. happymellon HN

    NT를 말도 안 되게 저평가한 건 마이크로소프트였습니다.

    너무 많은 기능이 서드파티 도구가 있어야 접근할 수 있거나, 메뉴 속의 메뉴 속에 파묻혀 있었습니다. 그러다 그 기능들은 슬금슬금 중복되거나 어설픈 대체품으로 바뀌었고요.

  8. speed_spread HN

    마이크로소프트는 리눅스와 제대로 붙을 만한, 값싼 CLI 전용 NT를 끝내 만들지 않았어요. 그랬다면 DOS 시절 누렸던 해커들의 마음을 어느 정도 지킬 수 있었을 텐데요.

  9. tavavex HN

    그렇게 하면 다른 리눅스 배포판처럼, 기본 윈도 스택을 밀어낼 수 있는 경쟁 스택이 나올 가능성을 열어 주게 됩니다. 시스템의 왕으로 군림하면서 원하는 걸 마음대로 강요하기도 어려워지고요. 다른 NT 기반 배포판으로 갈아타 버릴 수 있으니까요. 마이크로소프트는 그냥 해커들이 사라져 주길 바랐고, 그쪽이 더 간단했던 겁니다.

    마이크로소프트가 '아무것도 없는' NT에 가장 가까이 간 건 Windows Core나 Factory/Validation OS 같은 것이었습니다. 이런 제품에도 창 관련 기능이 일부 들어 있지만, 윈도에는 최소한의 텍스트 전용 모드가 있으니 마음만 먹으면 걷어낼 수 있었을 겁니다. 물론 이런 에디션은 전부 엄격하게 통제돼서, 받을 자격이 있는 대기업에만 공급됐거나 공급되고 있습니다. 리눅스 사용자가 원할 만한 물건은 아닙니다.

  10. indrora HN

    더 정확히 말하면, 당시는 미 법무부가 목덜미를 노려보고 있어서 하는 일마다 아주 조심해야 하던 때였습니다.

    윈도가 10년 넘게 쓸 만한 PDF 리더 없이 출시된 것도 법무부 때문이었습니다. 이미 경쟁자가 있는 시장에 마이크로소프트가 들어가는 시도는 전부 반독점 행위로 취급됐으니까요.

    ValidationOS를 돌리는 건 꽤 간단합니다. 커널과 NT 실행 환경만 남는 RL1 단계까지도 내려갈 수 있고요. https://youtu.be/Zw5ysOJcY84?t=610

  11. EvanAnderson HN

    제 백일몽은 Interix 서브시스템을 기본으로 넣고 기본 부팅이 텍스트 모드(또는 시리얼 콘솔)인 NT "배포판"이에요.

  12. justincormack HN

    Windows Nano Server가 거의 그런 물건이었어요. 더 싸지는 않았지만요.

  13. pjmlp HN

    유닉스 클론이 하나 더 늘어난 게 아니라는 점은 칭찬하고 싶습니다.

    다만 Windows NT도 원래 POSIX 성격이 어느 정도 있었습니다. 그동안 부족했던 건 마이크로소프트가 POSIX 서브시스템에 진지하게 임하지 않았다는 점입니다. 그랬다면 아마 리눅스가 PC에서 뜨지 못했을 테고, OS X 같은 경험을 1993년에 이미 누릴 수 있었을 겁니다.

  14. EvanAnderson HN

    OpenNT, Interix, Services for Unix(SFU)를 인수하면서 마이크로소프트는 꽤 탄탄한 POSIX 호환 제품을 갖게 됐지만 이미 너무 늦었습니다. 그때는 리눅스가 한창 떠오르고 있었거든요. 그래도 NT 서버 버전의 클라이언트당 라이선스와 비교했을 때 리눅스가 공짜라는 점의 위력은 아무리 강조해도 지나치지 않습니다.

  15. RetroTechie HN

    NT 서버 버전의 클라이언트당 라이선스와 비교했을 때 리눅스가 공짜라는 점의 위력은 아무리 강조해도 지나치지 않습니다.

    정말 그렇습니다. 한번은(1995년쯤이었을 겁니다) 박스로 된 SUSE 리눅스를 샀습니다. 책을 꺼내 들었더니 거의 첫 페이지에 누구든 이 책을 복사해서 남에게 넘겨도 된다는 저작권 고지가 있었습니다. 그때까지 손에 쥐어 본 거의 모든 책의 저작권 고지는 이런저런 걸 "하면 안 된다"는 말뿐이었는데 말이죠.

    그걸 보고 나서, 지금 내 손에 뭔가 다른, 특별한 물건이 있다는 확신이 들었습니다. 단서를 달자면, 전에 "오픈 소스"에 대해 읽은 적이 있어서 제가 뭘 보고 있는지는 알았습니다. 그래도 특별하게 느껴졌습니다.

    당연한 얘기지만, 위에서 jmmv가 쓴 유닉스와 NT 비교 글 끝에 링크된 참고 문헌을 보세요. 전부 아마존의 "이 책 사기" 링크입니다. 리눅스/BSD 쪽에서는 이런 참고 자료가 보통 웹 페이지, 맨 페이지, 무료로 내려받는 PDF 같은 것들이고요.

    시간이 지나면서 저를 사로잡은 건 "공짜 맥주"라는 점이 아닙니다. "폐쇄적", "이윤", "대기업 주식회사의 재산"에 맞서는 "개방", "공유", "커뮤니티 프로젝트"였습니다.

  16. pjmlp HN

    맞습니다. 저도 리눅스가 흥미로워진 건 1995년 여름부터였습니다. Slackware 2.0 CD가 딸린 Linux Unleashed 책을 구하는 게 숙제를 쉽게 하는 길이었거든요.

    Windows NT의 제약 때문에 집에서는 제대로 된 POSIX 개발을 할 방법이 없었고, DG/UX와 Solaris 서버가 섞여 돌아가던 대학 실습실은 이용하기가 꽤 어려웠습니다.

  17. JdeBP HN

    기본 시간대와 init이 설정하는 시간대가 재미있었습니다. 후자가 IANA 관례를 따르지 않는데도요. 일부 OS 제조사가 수십 년 동안 PST8PDT를 기본 시간대로 박아 두고 있었으니, 이 정도는 서로 돌려받는 셈이라고 봅니다. (-:

    그런데 제발 'xterm' 터미널 타입(이번 경우에는 'xterm-16color')을 또 하나 남용하는 쪽이 되지는 말아 주세요. XTerm인 척하지만 XTerm이 아닌 것들에 대해서는 토머스 디키(Thomas Dickey)가 할 말이 아주 많습니다. Windows NT에는 자체 터미널 타입이 일급으로 있고, 그게 생긴 지도 벌써 30년쯤 됐습니다. 옛 CSRSS를 따라 할지, 새 Microsoft Terminal을 따라 할지, 아니면 옛 POSIX 서브시스템이나 MS/PC/DR-DOS 같은 다른 걸 따라 할지 정하세요.

  18. steve1977 HN

    확실히 흥미로운 프로젝트입니다. 그런데 왜 러스트가 아니라 C++인지는 물어봐야겠네요.

  19. chasil HN

    하드 파일 잠금 때문에 Windows Update는 고통 그 자체입니다.

    70년대에 그게 필요했던 사정은 이해하지만, 요즘 시대에는 끔찍한 부담입니다.

    여기에는 구현되지 않았기를 바랍니다.

  20. phendrenad2 HN

    핵심 코드는 AI가 하나도 쓰지 않았습니다.

    인상적이네요.

  21. dvfjsdhgfv HN

    저도 바로 이 대목을 찾고 있었습니다.

    계약 조건은 시스템 콜과 저수준 인터페이스가 NT와 일치해야 한다는 것이지, 데몬이나 커널 자체의 구조까지는 아닙니다. 윈도를 그대로 재현하는 것을 목표로 하는 ReactOS와는 대조적입니다.

  22. bmacho HN

    그래서.. 왜 NT죠? 빠른가요? 안전한가요? 최신 기능을 지원하나요? 해킹하기 좋은가요? 아니면 대체 왜죠?

  23. userbinator HN

    제가 여기서 본 OS 중에서 결정이 가장 이상한 축에 든다고 생각합니다. ELF 대신 PE를 쓰는 건 저도 동의합니다. 후자(그리고 유닉스 계열 전반)의 동적 링킹 사정은 솔직히 말하면 끔찍한 난장판이니까요.

    POSIX 함수는 윈도와 마찬가지로 ucrtbase, iphlpapi, ws2_32에 나뉘어 있고, 윈도가 구현하지 않는 것은 mnposix에 들어 있습니다.

    하하, ucrtbase 안에 POSIX라니요! 이 두 단어가 함께 나오는 건 한 번도 상상해 본 적이 없습니다.

    AI를 이용해 이식 작업 중 기계적인 부분을 처리했습니다

    머지않아 DOS, 윈도, 리눅스, BSD, macOS 바이너리를 전부 돌릴 수 있는 미친 키메라 같은 OS를 누군가 내놓을 것 같습니다. AI가 소프트웨어 개발자를 대체하는 게 아니라 상당히 크게 끌어올려 주는 것으로 보입니다. 최근에 보이는 활동과 새 프로젝트 중에는 AI를 직접 쓰지도 않는 사람들이 낸 것도 많은데, 다른 사람들에게 자극을 받아 더 많은 걸 하게 된 것이 분명해 보입니다.

  24. RetroTechie HN

    머지않아 DOS, 윈도, 리눅스, BSD, macOS 바이너리를 전부 돌릴 수 있는 미친 키메라 같은 OS를 누군가 내놓을 것 같습니다.

    제 생각에 이게 미래입니다. seL4 같은 작고 크로스 플랫폼이며 극도로 신뢰할 수 있는 커널 하나, 앱에 서로 다른 API 집합(말하자면 OS "퍼스낼리티")을 제공하는 shim 묶음, 군데군데 에뮬레이터나 VM, 바이너리 변환 계층이 한 지붕 아래서 사이좋게 사는 겁니다.

    *BSD(리눅스 호환 계층 포함) + Wine + DOSBox 같은 에뮬레이터 몇 개만으로도 이미 상당한 수준까지 갑니다. 리눅스 위에서 돌아가는 MS 윈도 데스크톱도 불가능한 일이 아니고요. Genode OS도 꼭 확인해 보세요.

    앞으로 재미있겠네요!

  25. pjmlp HN

    역사적으로 짚어 두면, 모든 유닉스가 ELF를 쓰는 건 아닙니다. ELF는 유닉스와 그 클론들이 발전하는 과정에서 나중에 나온 것이고, z/UNIX와 AIX 같은 일부는 PE와 비슷한 형식인 COFF를 택했습니다.

    그래서 그런 플랫폼에서는 기본적으로 비공개 심볼, 첫 호출 시점의 지연 로딩, 그리고 임포트 파일이라는 즐거움도 누릴 수 있습니다.

  26. yjftsjthsd-h HN

    머지않아 DOS, 윈도, 리눅스, BSD, macOS 바이너리를 전부 돌릴 수 있는 미친 키메라 같은 OS를 누군가 내놓을 것 같습니다

    솔직히 빠진 건 Darling이 아직 덜 발전해서 Darwin 프로그램을 많이 돌리지 못한다는 점뿐입니다. 그것만 빼면 리눅스나 원하는 *BSD, illumos에 WINE+DOSBox+Darling을 설치하면 지금도 그렇게 쓸 수 있습니다. (물론 다른 시스템에서 *BSD 프로그램을 돌리는 건 약한 부분이지만, 그것만 빼면요.)

Hacker News에서 보기 ↗