1P by GN⁺ 3시간전 | ★ favorite | 댓글 1개
  • Apple Silicon 기반 macOS는 Virtualization.framework로 실행 가능한 macOS VM을 최대 2개로 제한하며, 이는 macOS 사용권 계약 조항에 근거함
  • 분석 결과 이 제한은 XNU 커널 내부의 비공개 변수 hv_apple_isa_vm_quota 로 관리되며, 부트 인자를 통해 재정의 가능함이 확인됨
  • System Integrity ProtectionAppleInternal 체크를 우회하기 위해 개발용 커널(Development Kernel) 을 빌드·부팅하는 절차가 사용됨
  • 설정 후 UTM, Viable, Parallels 등에서 최대 9개의 macOS VM을 동시에 실행하는 데 성공함
  • Apple이 커널 내부에 VM 제한 재정의 기능을 남겨둔 점이 주목되며, 향후 자동화 도구나 커널 확장을 통한 개선 가능성이 제시됨

Apple Silicon의 macOS 가상머신 2개 제한 해제 과정

  • Apple Silicon 기반 Mac에서 Virtualization.framework를 이용해 macOS 가상머신을 실행할 때 최대 2개까지만 구동 가능한 제한이 존재함
    • 이 제한은 macOS 소프트웨어 사용권 계약(SLA) 2.B.iii 조항에 따라 설정되어 있음
    • 해당 조항은 개발, 테스트, macOS Server 사용, 비상업적 개인 용도에 한해 최대 2개의 macOS 인스턴스 실행을 허용함
  • 분석 결과, 이 제한은 사용자 공간이 아닌 커널(XNU)의 비공개 영역에 구현되어 있음
    • Intel 커널에는 동일한 코드가 없으며, Apple Silicon 커널의 hv_vm_* 함수군이 가상화 스택을 담당함
    • hv_init() 초기화 코드 내의 hv_apple_isa_vm_quota 변수가 VM 수를 관리하며, VM 생성·삭제 시 증감 처리됨
    • 커널에는 hypervisor=hv_apple_isa_vm_quota= 부트 인자가 존재하며, 후자는 VM 제한을 재정의할 수 있음
  • 릴리스 커널에서는 hypervisor 인자 대신 System Integrity Protection(SIP)AppleInternal 체크로 제한되어 있음
    • CSR_ALLOW_APPLE_INTERNAL 플래그가 활성화된 경우에만 hv_apple_isa_vm_quota 인자가 적용됨
    • 이를 우회하기 위해 Apple의 개발용 커널(Development Kernel) 을 부팅하는 방법이 사용됨

개발용 커널 컬렉션 빌드

  • Apple Developer 사이트에서 Kernel Debug Kit(KDK) 를 다운로드해 설치해야 함
    • KDK는 호스트 macOS 빌드와 정확히 일치해야 하며, 불일치 시 커널·kext 링크 및 부팅 오류 발생 가능
  • uname 명령으로 커널 아키텍처를 확인한 뒤, kmutil create 명령을 이용해 개발용 커널 컬렉션(VirtualMachine.kc) 을 생성함
    • 예시에서는 macOS 14.0 (빌드 23A5301h) 및 T6020 커널을 사용
    • --variant-suffix development 옵션으로 개발용 커널을 지정하고, 여러 시스템 확장 저장소를 포함시킴

개발용 커널 부팅 설정

  • Mac을 종료 후 복구 모드(recoveryOS) 로 부팅하여 터미널에서 다음 설정을 수행함
    1. System Integrity Protection 비활성화 (csrutil disable)
    2. 부트 인자 제한 해제 (bputil --disable-boot-args-restriction)
    3. 커스텀 커널 컬렉션 지정 (kmutil configure-boot)
    4. 부트 인자 설정 (nvram 명령으로 전달)
      • kcsuffix=development : 개발용 커널 부팅
      • hypervisor=0x1 : 가상화 스택의 특수 기능 활성화
      • hv_apple_isa_vm_quota=0xFF : VM 최대 개수를 255로 설정
  • 재부팅 후 sysctl kern.osbuildconfignvram boot-args로 적용 여부를 확인 가능

다중 VM 실행 결과

  • 설정 완료 후 UTM, Viable, Parallels 등 Virtualization.framework 기반 솔루션으로 테스트 수행
    • M2 Pro MacBook Pro에서 동시에 9개의 macOS VM을 실행하는 데 성공
    • 시스템은 여전히 테스트 가능한 수준으로 동작함

기능 추가 시점 및 내부 구조

  • macOS 12 Monterey부터 hv_apple_isa_vm_quota 부트 인자가 Virtualization 스택과 함께 추가됨
    • 이후 버전(macOS Sonoma 포함)에서도 AppleInternal 체크는 여전히 존재
    • Apple이 XNU 내부에 여러 비공개 기능을 유지하고 있음이 확인됨

OS 업데이트 시 주의사항

  • 커스텀 커널 컬렉션 사용 시 자동 OS 업데이트 기능이 비활성화
    • 업데이트 후 오류가 발생하므로, 기본 커널 컬렉션으로 복원해야 함
    • 복구 모드에서 bputil로 새 부트 정책을 생성하면 기본 커널로 복귀 가능
    • 예: bputil --full-security 또는 --disable-boot-args-restriction 옵션 사용

마무리 및 향후 개선 아이디어

  • Apple의 VM 제한 구현 방식을 확인하고, 비공식적이지만 제한 해제 방법을 실험적으로 검증함
    • Virtualization 팀이 공식 문서화하지 않았음에도 VM 제한 재정의 기능을 커널에 남겨둔 점이 주목됨
  • 향후 개선 구상
    • KC 빌드 및 부팅 자동화 도구 개발
      • 호스트별 개발용 커널 컬렉션 자동 생성 및 복구 모드 설정 지원
    • 커널 확장(kext) 을 통한 hv_apple_isa_vm_quota 변수 재정의 기능 구현
      • 개발용 커널 부팅 없이 제한 해제 가능성 탐색
  • 다음 연구 주제로 Apple Silicon VM의 DEP 등록 및 시리얼 번호 오버라이드 가능성을 탐색 예정임
Hacker News 의견들
  • 모든 Mac에 동일하게 적용되는 이런 제한은 너무 비합리적
    더 강력한 Mac을 샀다면 더 많은 macOS 인스턴스를 가상화할 수 있어야 함
    예를 들어 M5는 2개, M5 Pro는 4개, M5 Max는 8개 정도로 제한을 두는 식이 합리적일 것 같음

    • 왜 아예 제한을 두는지 모르겠음
      하드웨어 성능이 자연스러운 한계이니, 사용자가 알아서 멈출 것임
    • 이건 자원 문제라기보다는 비즈니스 결정 같음
      저가형 Mac VPS 서비스를 막기 위한 조치일 가능성이 높음
    • 이건 하드웨어 한계가 아니라 Tim Cook의 판매량 우려와 싸우는 것임
    • Windows 11 Pro 라이선스를 100달러에 사면 VM 제한이 1024개임
      Hyper‑V는 하드웨어가 감당할 수 있다면 최대 1024개의 VM을 동시에 실행할 수 있음
      내 작은 Windows ARM 노트북에서도 4개는 무리 없이 돌릴 수 있음
    • 정말 어이없음
      openclaw를 테스트하려고 VM을 돌렸는데, iCloud와 App Store 접근이 제한되어 있어서 당황했음
  • Mykola Grymalyuk이 이 블로그 글을 쓴 지 2년 후 Apple에 입사했다는 게 흥미로움
    “영웅으로 죽거나…”라는 밈이 떠오름

  • M3 이상부터는 Hypervisor.framework / Virtualization.framework를 이용해 nested VM을 돌릴 수 있음
    이게 제한을 우회할 수 있다면 꽤 재미있을 것 같음

    • 기억하기로는 Linux 게스트만 중첩이 가능함
      macOS는 한 단계까지만 가능해서, macOS 게스트 안에서 또 다른 macOS 게스트를 띄우는 건 불가능함
    • 만약 각 VM이 2개의 VM을 돌릴 수 있다면, 무한 VM 체인을 만들 수도 있겠음
      게으르지만 누가 실험해줬으면 함
  • 왜 Apple이 이런 제한을 걸었는지 정말 궁금함

    • Apple의 비즈니스 모델은 하드웨어와 소프트웨어를 묶어서 파는 것임
      하드웨어 판매가 소프트웨어 개발을 지원하므로, 하드웨어를 사지 않은 사람이 macOS를 쓰는 걸 원치 않음
    • macOS에는 이런 사용자 제약이 많음
      사용자의 자유보다 Apple이 통제권을 유지하는 게 우선임
    • 아마도 한 대의 Mac으로 온라인 계정 농장(identity farm) 을 돌리는 걸 막기 위한 조치일 수도 있음
  • 커스텀 커널을 컴파일해서 부팅하고 GUI까지 띄울 수 있다는 게 놀라움

  • 글 자체는 정말 흥미롭지만, 이런 임의적 제한이 있는 플랫폼을 개발용으로 쓰는 건 이상함

    • 지난 20년간 Apple이 진지한 개발 플랫폼이었는지 의문임
      많은 개발자가 고급 하드웨어 때문에 쓰지만, macOS는 늘 “거의 Linux지만 iTunes 중심의 회사가 통제하는 OS”였음
  • Apple Silicon에서 커스텀 커널 컬렉션을 쓰면 자동 OS 업데이트가 불가능해진다고 함
    하지만 이게 오히려 숨은 축복일 수도 있음

  • lume에서도 이게 작동할 수 있는지 궁금함
    현재 비슷한 제한이 있음

    • 가능할 것 같음
      lume은 Apple의 Virtualization.framework를 감싼 얇은 래퍼로 알고 있음
  • SIP를 끄고 부트 인자를 설정하면 커스텀 커널 없이도 가능하다고 들었음

    • 사실이라면 이건 저평가된 팁
  • Apple이 VM을 2개로 제한했다고?

    • 맞음, macOS VM은 라이선스상 2개까지만 가능함
      다른 OS 게스트는 제한 없이 실행할 수 있음