1P by GN⁺ | ★ favorite | 댓글 1개
  • Infinite Mac이 브라우저에서 초기 Mac OS X를 실행할 수 있게 됐고, 현재 10.1과 10.3이 가장 잘 지원됨
  • 기존 DingusPPC 경로가 커널 패닉과 그래픽 문제에 막히자, 2000년대 초 Mac OS X 에뮬레이션을 목표로 만든 PearPC 포팅으로 방향을 바꿈
  • 성능은 여전히 느려 Mac OS X 10.2가 완전히 동작하기까지 거의 2분이 걸리고, 최적화로 줄인 시간도 약 15초 수준임
  • PowerPC 부동소수점 처리의 FP 비트 검사를 빠뜨린 버그가 Dock 렌더링과 Finder 창 문제를 일으켰고, 수정 과정에서 DingusPPC 안정성도 개선됨
  • Infinite HD는 초기 Mac OS X 시대의 인디 소프트웨어와 Developer CD 도구를 담도록 재구성됐지만, HFS/HFS+ 차이와 오래된 .dmg 호환성이 제약으로 남아 있음

브라우저에서 초기 Mac OS X 실행

  • Infinite Mac은 이제 초기 Mac OS X를 실행할 수 있음
    • Mac OS X 10.1Mac OS X 10.3이 가장 잘 지원되는 버전임
    • 실행 속도는 빠르지 않지만, 당시 실제 하드웨어도 크게 더 낫지는 않았다는 체감에 가까움
  • 시대에 맞는 소프트웨어를 함께 제공하는 Infinite HD도 초기 Mac OS X 시기 인디 소프트웨어 중심으로 다시 구성됨

PearPC 포팅으로 방향 전환

  • 처음에는 DingusPPC로 Mac OS X를 Infinite Mac에서 실행하려 했지만, 지난여름쯤 커널 패닉과 그래픽 깨짐에서 더 나아가지 못함
    • 결정적 실행 모드로 문제 범위를 줄여보려 했으나 다음 단계가 분명하지 않았음
  • 대안으로 PearPC를 선택함
    • PearPC는 2000년대 초 x86 Windows와 Linux 머신에서 Mac OS X를 에뮬레이션하기 위해 만들어짐
    • Intel 전환 이후 관심이 줄었고, 사실상 멈춘 코드베이스로 취급돼 왔음
  • kanjitalk755가 현대 macOS에서 빌드·실행되는 PearPC 실험 브랜치를 만들어둔 점이 포팅의 출발점이 됨
  • PearPC는 다중 플랫폼 코드베이스였고, 스레드처럼 포팅이 까다로운 개념을 광범위하게 쓰지 않아 WebAssembly/Emscripten 및 Infinite Mac 런타임으로 옮기기 쉬웠음
    • 며칠 동안 빌드, 비디오 출력, 디스크 이미지 로딩, 마우스·키보드 입력 연결까지 진행함
    • 결과적으로 Mac OS X 10.2를 브라우저에서 이전보다 더 안정적으로 실행할 수 있게 됨

성능 최적화와 남은 병목

  • PearPC는 Mac OS X 10.2를 더 안정적으로 실행했지만 DingusPPC보다 느리게 느껴짐
  • DingusPPC의 벤치마크 하네스를 PearPC로 옮기고, 기존 DingusPPC 최적화 작업을 PearPC에도 반복 적용함
    • 두 에뮬레이터는 모두 조회 테이블 기반의 순수 인터프리터라 작업은 비교적 직접적이었음
    • Mac OS X 10.2 부팅 시간에서 약 15초를 줄임
  • 최적화 후에도 완전히 동작 가능한 상태까지 거의 2분이 걸림
    • Infinite Mac UI에는 Mac OS X 부팅이 느릴 수 있다는 안내를 추가함
  • 가장 큰 병목은 PearPC의 MMU 캐시 부재
    • 모든 load/store가 복잡한 주소 계산을 거쳐 비싸게 처리됨
    • DingusPPC에는 더 성숙한 계층형 캐시가 있어 효과적으로 보임
  • PearPC는 10.2~10.4 실행에서 DingusPPC보다 안정적일 수 있지만, 코드베이스는 덜 원칙적임
    • 커스텀 펌웨어와 비디오 드라이버를 사용함
    • Mac OS X에 필요한 PowerPC 명령어 일부만 구현함
    • 장기적으로는 DingusPPC가 빠르고 안정적이며 정확한 선택지가 되기를 기대함

FP 비트 검사와 렌더링 버그

  • PearPC 인터프리터에 “통합 디코딩 테이블” 방식을 opcode 계열별로 적용하던 중, 부동소수점 연산 변경에서 회귀가 발생함
    • Dock 렌더링 글리치가 생김
    • Finder 창이 열리지 않음
  • opcode 그룹 59와 63의 디스패치는 단순 조회만 하지 않고 Machine State RegisterFP 비트를 먼저 확인해야 했음
    • FP 비트가 설정되지 않으면 “floating point unavailable” 예외를 던짐
  • 당시 Mac에 쓰인 PowerPC 칩에는 FPU가 있었지만, Mac OS X 시작 중 해당 예외가 자주 발생함
    • 당시 xnu 커널 소스에는 FP 비트를 지우는 위치와 예외 핸들러가 있음
    • 문맥 전환 때 FPU 레지스터 저장·복원을 피하려는 최적화로 보임
  • 최적화된 디스패치 코드에도 같은 FP 검사를 구현하자 렌더링 문제가 사라짐
  • 같은 버그는 DingusPPC에도 남아 있었음
    • DingusPPC는 FP 비트를 확인하지 않고 부동소수점 명령을 항상 통과시켰음
    • 빠른 수정으로 예외를 발생시키자 Mac OS X 렌더링 글리치가 사라짐
    • 이후 정식 구현과 성능 저하 회피 수정이 들어가면서 DingusPPC 안정성이 크게 좋아짐
  • 두 에뮬레이터를 조합하면서 실행 가능한 초기 Mac OS X 범위가 넓어짐
    • DingusPPC는 10.1을 안정적으로 실행할 수 있음
    • PearPC는 10.1을 안정적으로 실행하지 못함
    • 10.0은 여전히 불안정하고 Public Beta는 즉시 커널 패닉이 발생함

Infinite HD 재구성

  • Infinite Mac의 매력 중 하나는 시대에 맞는 소프트웨어를 담은 Infinite HD가 함께 마운트된다는 점임
  • Mac OS X 지원에 맞춰 80~90년대 클래식 Mac 앱을 넘어 초기 Mac OS X 시대 소프트웨어를 담은 별도 버전을 만듦
    • 개인적으로 선호하던 앱 외에도 제안을 받아 목록을 확장함
  • 디스크 이미지는 기존 자동화 방식을 확장해 생성함
    • 초기 Mac OS X 시기에는 디스크 이미지 사용이 매우 많았기 때문에 .dmg를 생성 이미지 안의 추가 폴더로 가져오는 기능을 추가함
  • 오래된 .dmg는 확장자가 같아도 여러 변형이 있어 현대 macOS의 hdiutil로 항상 마운트되지 않았음
    • 최종적으로 dmg2img로 raw 파티션을 먼저 추출함
    • 이후 현대 macOS가 마운트하고 복사할 수 있는 새 디스크 이미지를 다시 만드는 우회 방식을 사용함
  • 실제 소프트웨어 수집에서는 초기~중기 2000년대 Mac OS X 소프트웨어가 사각지대였음
    • Macintosh Garden에도 일부가 있지만 우선순위는 높지 않음
    • 원 벤더에서는 너무 오래돼 내려간 경우가 많음
    • Wayback Machine을 많이 사용함
  • 각 Mac OS X 버전의 동반 Developer CD도 설치해 Project Builder와 Interface Builder 같은 도구를 사용할 수 있게 함

파일 시스템과 다중 디스크 마운트

  • 디스크 빌드 과정은 HFS 중심이지만, 해당 시기의 기본은 HFS+였음
    • HFS+는 더 긴 파일명과 임의 Unicode 문자를 포함하는 등 더 고급 기능을 제공함
    • HFS+ 기능에 의존하는 디스크 이미지 파일은 손실 없이 변환되지 않음
    • 대부분의 소프트웨어에서는 큰 문제가 되지 않았음
  • 부팅 디스크, Infinite HD, Saved HD까지 최대 3개 드라이브를 마운트하기 위해 DingusPPC 포크의 방식을 빌림
    • 시작 시 지정된 임의 개수의 파티션 이미지로부터 다중 파티션 디스크 이미지를 즉석에서 생성함

Aqua 모드와 사이트 UI

  • Mac OS X 추가를 완성하기 위해 Infinite Mac 사이트 컨트롤에도 Aqua 모드를 추가함
    • 기존에는 classic, Platinum, NeXT 외형이 있었음
  • Aqua 디자인 중 10.0/10.1 스타일을 선택함
    • 10.3과 10.4의 더 절제된 버전을 선호하지만, 10.0/10.1 쪽의 향수가 더 크다고 판단함
  • OS와 같은 이미지 자산을 쓰기 위해 스크린샷 대신 원본 리소스를 추출함
    • Aqua 자산은 반투명 요소를 많이 쓰기 때문에 일반 스크린샷으로는 충분하지 않았음
    • resource_dasmpxm2tga를 사용해 Extras.rsrc에서 원본 자산을 추출함

Classic 실행, verbose 모드, 작은 발견들

  • 여러 이미지를 마운트할 수 있어 Mac OS 9 파티션을 함께 두고 Classic 호환 환경을 시작할 수 있음
    • 이 기능은 10.1에서만 동작함
    • PearPC는 Classic을 지원하지 않았음
    • 결과적으로 WebAssembly 가상 머신 안의 에뮬레이션된 Mac OS X 안에서 클래식 Mac 앱을 에뮬레이션할 수 있음
  • Mac OS X 이미지로 Calculator 동작 변화도 확인할 수 있음
    • 10.3까지는 =를 반복해서 누르는 동작이 없었음
    • 10.4에는 해당 동작이 있었음
  • Mac OS X 부팅이 느려 진행 상황을 더 보여주기 위해 verbose 모드를 노출함
    • PearPC에는 내장 방식이 있었음
    • DingusPPC에는 Open Firmware 변수를 시작 시 지정하는 기능을 추가함
    • Infinite Mac의 커스텀 인스턴스 대화상자에는 “Debug Mode” 스위치로 노출됨
  • macosx.app 도메도 확보하려 했지만 이미 등록돼 있었음
    • 해당 도메인은 특정 YouTube 영상으로 리디렉션됨
    • 영상의 YouTuber는 자신이 등록한 것이 아니라고 답함

다음 후보와 QEMU 가능성

  • Mac OS X 지원으로 Infinite Mac은 현대 macOS에 가까운 지점까지 도달함
    • 이후에도 두 번의 CPU 전환과 여러 작은 변화가 남아 있음
    • Tiger는 현재 macOS 사용자에게도 기본적으로 알아볼 수 있는 형태임
  • 더 깊거나 더 특수한 복고 컴퓨팅 대상으로는 A/UX, Lisa, Pippin, Newton이 남아 있음
    • A/UX는 classic Mac OS와 동시대의 시스템이며 NeXTStep과 비교해볼 만한 대상임
    • Shoebill은 A/UX를 실행하고, 코드베이스도 포팅 가능해 보임
    • Lisa, Pippin, Newton via Einstein도 후보로 남아 있음
  • 예전에는 QEMU를 WebAssembly로 포팅하기에 너무 큰 프로젝트로 봤고, qemu.js 성능도 사용 가능성이 낮아 보였음
  • 최근 qemu-wasm과 FOSDEM 발표를 통해 가능성을 다시 확인함
    • Linux 게스트 데모 성능이 고무적임
    • 100MB 데이터의 MD5 체크섬을 계산하는 즉석 벤치마크에서 qemu-wasm은 8초, DingusPPC는 13초, PearPC는 18초가 걸림
    • 그래픽 게스트인 Mac OS X와는 여전히 큰 간극이 있음

댓글과 토론

Hacker News 의견들
  • PearPC가 몇 년 잘 버틴 건 맞지만, 원래 메인테이너가 기차 사고로 사망한 뒤 추진력을 대부분 잃었음
    당시 열성 사용자이자 커뮤니티 구성원이었고, 지금도 생각하면 눈물이 남
    https://www.wired.com/2004/07/pearpc-coauthor/

    • 뛰어난 개발자들이 갑자기 세상을 떠났는데 부고도 없고, 다른 개발자 한 명만 뭔가 아는 듯한 경우가 많아서 가끔은 외계인이 그들을 지구에 두기엔 너무 귀하다고 보고 데려간 거라고 믿고 싶어짐
    • 누군가 그의 작업을 베껴서 cherryos라는 이름으로 팔았음
    • 이 기사는 유료 장벽 뒤에 있음
  • Infinite Mac은 클래식 Macintosh와 NeXT 시스템 릴리스 및 소프트웨어를 모아, 웹 브라우저에서 쉽게 접근할 수 있게 한 컬렉션임
    https://infinitemac.org/

    • 블로그 글만으로도 독립적으로 이해되게 Infinite Mac에 링크를 걸거나 정의했어야 함
    • 이 페이지를 링크해줘서 좋음. 블로그 작성자가 크게 놓친 부분이고, 이 댓글이 없었으면 이 훌륭한 사이트를 못 찾았을 듯함
  • 글에서 가장 흥미로운 부분 중 하나는 700줄 미만의 PPC CPU 에뮬레이터 링크였음
    https://github.com/kwhr0/macemu/blob/master/SheepShaver/src/...
    6502 에뮬레이터에서는 이런 간결함을 보지만, 비교적 현대적인 아키텍처에서는 흔치 않음

    • RISC라서 아주 놀랍진 않음. MIPS 에뮬레이터도 대략 그 정도 크기임
  • 지금 20살인 기술 애호가가 OS X 10.4나 10.5, 10.6을 마주하면 어떤 느낌일지 상상이 안 됨
    씁쓸하게도 암흑시대 사람이 고전 조각상 앞에서 “인류가 한때 어떻게 이런 걸 만들 수 있었지?”라고 생각하는 장면이 떠오름
    다만 취향은 변함. 실제 암흑시대 사람들은 “이 이교도적 퇴폐는 뭐지?”라고 생각했을지도 모르고, 지금은 “사진 같은 아이콘이라니 오글거림!”이라고 볼 수도 있음

    • 10.4는 최신 macOS가 뭐든 간에 기본적으로 거의 같은 방식으로 보이고 동작함. Liquid Glass가 있어도 비슷하게 동작함
      앱 설치도 여전히 “IKEA식 dmg에서 앱 끌어다 놓기”이고, 가끔 zip이나 pkg가 있음. Finder 창에는 이미 왼쪽 사이드바 북마크가 있고 Dock도 동일하게 동작함. 이상한 3D Dock 시기를 거치긴 했는데 Leopard였던 듯함
      Mac App Store는 없지만 요즘도 거의 아무도 안 쓰는 편이고, Spotlight는 Tiger에서 새로 나왔음. Windows XP와 11의 차이보다 훨씬 알아보기 쉬움. XP는 11과 동작 방식이 꽤 다름
    • 20살인데, 어릴 때 10.5나 10.6을 썼던 흐릿한 기억이 있어서 향수처럼 느껴짐
    • 10.4/10.5 시절에 개발자로 시작했음. 주로 반쯤 다크 모드처럼 보이게 하려고 이것저것 실행해보고 테마를 만지던 시기였음
      그때는 시스템 폴더를 건드리는 일이 지금만큼 복잡하지 않았음
    • “암흑시대”가 무슨 뜻인지 모르겠음. 능력이 사라졌다기보다 제국이 돈을 쓰는 대상과 독립 왕국들이 돈을 쓰는 대상이 달랐던 것에 가까움
      초기 중세에도 아름다운 유물과 건축물이 많았음. 많이 남아 있진 않지만, Sutton Hoo 선박 매장이나 앵글로색슨 교회처럼 직접 본 것만 해도 예가 있음
  • 스크린샷이 정말 놀라움. 개인적으로 Mac OS X가 오늘날 Mac OS보다 훨씬 좋아 보임
    명확하고 질서정연해서 “좋아, 이 환경이면 일을 할 수 있겠다!”라는 느낌이 듦
    지금 Mac OS는 “도와줘, 사탕 자루에 빠졌는데 어떻게 나가지?” 같은 느낌임. 다른 사람도 이렇게 느끼는지 궁금함

    • 예전 회색 인터페이스(Windows 95, macOS 9)의 팬이 되어가는 느낌임. 계산기가 그냥 도구인 것처럼, 그런 UI도 도구처럼 느껴져서 편안함
    • 솔직히 그렇진 않음. 실제로 보고 작업하는 UI는 메뉴 막대, 점 세 개, 가끔 Spotlight 막대 정도로 제한됨
      Windows도 마찬가지임. 운영체제 자체로 작업하는 일은 거의 없고, 네이티브 앱도 드물며 대부분 브라우저 기반이거나 서드파티 디자인 시스템을 쓰는 크로스플랫폼 앱임
    • 현대 MacOS에서도 이런 외형과 느낌을 제공하지 못할 이유는 사실상 없음. 명백한 이유라면 모듈성이 부족한 형편없는 소프트웨어 설계뿐임
      소프트웨어 회사들이 소프트웨어를 잘 만든 척하는 것도 지겨움
    • 제일 좋아하는 건 10.3 Panther의 Aqua와 브러시드 메탈이 섞인 모습임
      10.4 Tiger도 비슷하지만 위쪽 메뉴 막대가 광택 처리라 시간이 지나니 별로였음. 10.5 Leopard는 화려하고 촌스러운 3D Dock, 투명한 상단 메뉴 막대, 더 현대적인 그라디언트가 있었음
      당시엔 멋졌지만, 그라디언트는 브러시드 메탈과 Aqua만큼 멋지진 않음. 그 이후는 전부 좀 지루함
    • 창의 줄무늬는 좀 과했고, 없어졌을 때 꽤 반가웠음
  • 10년 넘게 마지막 커밋이 없던 pearpc 프로젝트로 성공했다는 게 의외임: https://github.com/sebastianbiallas/pearpc
    그의 포크는 https://github.com/mihaip/pearpc에 있음
    WebAssembly 타깃을 추가했지만 x86-64 지원도 유지하는 듯함
    추가로 NextStep을 Infinite Mac에 넣은 과정도 블로그에 썼음: https://blog.persistent.info/2024/03/infinite-mac-nextstep.h...

  • 이런 것들이 정말 좋음. 당시 Aqua는 계시 같은 존재였음

    • 모든 Linux 창 관리자에 Aqua 테마가 있었음. Apple은 “Linux 데스크톱의 해” 사람들이 수년간 만들려 했고 지금도 만들고 있는 운영체제를 실제로 내놓았음
      할머니도 쓸 수 있는 사용성을 갖춘 주류 Unix이고, 주요 서드파티 앱까지 지원했으니 완전한 홈런이었음
    • Aqua는 지금도 계시 같음. 창 컨트롤을 한눈에 식별하는 능력에서는 크게 후퇴했음
      Liquid Glass에서 그런 요소가 일부 돌아오길 바라지만, 솔직히 Aqua는 아직도 좋아 보임
      Windows Vista나 Linux 테마 같은 모방작들이 놓친 건 모든 것이 얼마나 일관되고 사용 가능했는지였음. 멋져 보였지만, 그보다 더 중요한 건 정말 잘 동작했다는 점임
    • Steve Jobs가 “지난 18개월 동안 완전히 새로운 사용자 인터페이스를 비밀리에 설계해 왔고, Apple의 유산을 다음 세기로 이어간다. 우리는 이 새 UI를 Aqua라고 부른다. 액체 같기 때문이다. 디자인 목표 중 하나는 보는 순간 핥고 싶게 만드는 것이었다”라고 말했음
    • Liquid Glass는 그 시절을 다시 떠올리게 하는 듯함
  • 반갑게도 기억 속 UI들이 보임. Macintosh OS 8 즈음의 Platinum, OS X 10.3과 10.4 즈음의 핥고 싶은 MacOS X UI가 그리움
    SunOS/Slowlaris의 OpenLook, NeXTStep/OpenStep UI, 주황과 초록을 절대 섞지 말았어야 할 Winblows XP 이전의 정점이던 Microsoft Windows 2000도 좋았고, SGI의 IRIX와 Motif 계열 즐거움도 떠오름
    UI 요소는 거의 항상 구분 가능하고, 이해 가능하고, 일관적이었음. 표준 UI 컨트롤을 작동시키면 실행 전에도 어떤 일이 일어날지 정확히 알았고, 실제로도 정확히 그렇게 됐음
    커스터마이즈 가능하고, 테마를 입힐 수 있고, 교체 가능하고, 더 멋지게 만든 결과가 오늘날 우리가 가진 것들인 듯함

  • 초기 OS X 시절은 Mac의 진짜 황금기였음. 하드웨어는 x86과 꽤 경쟁력이 있었고, 운영체제는 역대 최고 수준이었음
    결국 둘 다 삐걱거리기 시작했지만, 지금은 하드웨어의 두 번째 황금기라서 언젠가 곧 Mac OS가 다시 훌륭해질지도 모른다고 꿈꿀 수 있음
    다만 새 하드웨어 황금기에도 여기서의 에뮬레이션 성능은 M1과 Safari에서 거의 못 쓸 수준에 가까움

    • Mac OS가 다시 훌륭해지는 방향으로 가고 있다고는 생각하지 않음
    • 초기 x86 모델을 썼는데, 가격 면에서 경쟁력은 없었고 OS X도 생각만큼 좋지 않았음
      커널 패닉이 매일 있었고, 영상을 보다가 QuickTime이 세그멘테이션 오류로 죽곤 했음
      wmv나 divx 같은 파일 형식을 재생하려면 맞는 코덱을 찾아 설치하는 퀘스트를 해야 했음
      예쁘게 만들려고 공기 흐름용 통풍구를 제대로 넣지 않아 과열도 있었음
    • 68k에서 PPC, Intel, Silicon까지 계속 Think Different™하게 써왔음. 성능 향상이 가장 컸던 건 최근 두 번의 CPU 전환이었고, 절대 성능과 와트당 성능 모두에서 그랬음
      입문형 기본 M4 mini는 놀라움. 컴퓨터 전체가 비슷한 성능의 x86 GPU 하나보다 전력을 덜 씀
    • 오래된 문제 그대로임. 하드웨어가 성능을 주면, 소프트웨어가 그걸 가져감
  • Dark Castle! 어릴 때 아버지가 Apple Lisa를 갖고 있었음. Apple용 회계 제품군을 개발하고 있어서 Apple이 친절하게 제공해준 기계였음
    당시엔 이 놀라운 기계를 당연하게 여겼고, 게임과 MacPaint에만 썼음. 아버지의 3.5인치 디스크 모음 중 “Dark Castle”이라고 적힌 디스크가 있었는데, 기억나지 않는 이유로 Lisa에서는 작동하지 않았음
    게임일 거라고 짐작했지만 플레이할 수 없어서 너무 아쉬웠고, 그 수수께끼 같은 디스크에 매료됐음
    2025년이 되어 Infinite Mac System 7 에뮬레이터를 실행했음: https://infinitemac.org/1991/System%207.0
    심장이 덜컥했음. “Games” 폴더 안에 바로 Dark Castle이 있었음
    30년이 지나 드디어 이 게임을 할 수 있게 됨. 그래픽은 매력적이고, Sierra 고전인 King’s Quest와 Prince of Persia의 요소도 느껴짐
    https://en.wikipedia.org/wiki/Dark_Castle
    오늘 저녁 일정은 이걸로 정해졌음