# Apple Silicon에서 가상머신 2개 제한을 우회하는 방법 (2023)

> Clean Markdown view of GeekNews topic #28456. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28456](https://news.hada.io/topic?id=28456)
- GeekNews Markdown: [https://news.hada.io/topic/28456.md](https://news.hada.io/topic/28456.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-13T08:36:36+09:00
- Updated: 2026-04-13T08:36:36+09:00
- Original source: [khronokernel.com](https://khronokernel.com/macos/2023/08/08/AS-VM.html)
- Points: 2
- Comments: 1

## Topic Body

- Apple Silicon 기반 macOS는 **Virtualization.framework**로 실행 가능한 **macOS VM을 최대 2개로 제한**하며, 이는 macOS 사용권 계약 조항에 근거함
- 분석 결과 이 제한은 **XNU 커널 내부의 비공개 변수 `hv_apple_isa_vm_quota`** 로 관리되며, 부트 인자를 통해 재정의 가능함이 확인됨
- **System Integrity Protection**의 `AppleInternal` 체크를 우회하기 위해 **개발용 커널(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.osbuildconfig` 및 `nvram 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 등록 및 시리얼 번호 오버라이드 가능성**을 탐색 예정임

## Comments



### Comment 55163

- Author: neo
- Created: 2026-04-13T08:36:37+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47733971) 
- 모든 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 게스트는 제한 없이 실행할 수 있음
