M1/M2 Mac, VM 2개 제한 풀고 개발 생산성 높이기!

by DD
1개월 전
조회수 10

Apple Silicon 기반 macOS는 Virtualization.framework를 통해 최대 2개의 VM만 동시 실행 가능

커널 레벨 분석을 통해 VM 실행 제한의 기술적 근거를 파악하고, 부팅 인자(boot-arg)를 활용한 우회 방법 제시

개발 커널(Development Kernel) 사용 및 System Integrity Protection(SIP) 우회를 통해 VM 실행 제한 해제

제한의 임의성(Arbitrary Limit)에 대한 비판과, 업데이트 제약(Update Restriction)에 대한 우려가 공존

Apple Silicon VM 제한의 기술적 배경

저자는 Apple Silicon 기반 macOS에서 Virtualization.framework를 사용하여 최대 2개의 macOS 게스트 VM만 실행할 수 있는 제한을 발견했다. 이 제한은 macOS의 라이선스 계약(SLA)에 명시되어 있으며, 사용자는 소프트웨어 개발, 테스트, macOS Server 사용 또는 개인적인 용도로 최대 2개의 추가 macOS 인스턴스를 가상 환경에서 실행할 수 있다. 기술적으로 보면, 이 제한은 XNU 커널 내 `hv_apple_isa_vm_quota` 변수를 통해 구현되며, 개발 커널 및 부팅 인자(boot-arg) 설정을 통해 우회가 가능하다.

커널 레벨 분석 및 우회 방법

저자는 macOS 커널 내부를 분석하여 VM 실행 제한이 XNU 커널(Kernel) 내부에 하드코딩되어 있음을 확인했다. 특히, `hv_init()` 함수에서 VM 할당량을 관리하는 `hv_apple_isa_vm_quota` 변수를 발견하고, 개발 커널을 사용하여 이 변수를 조작하는 방법을 제시했다. 구체적으로, 개발 커널을 빌드하고, 부팅 시 `hypervisor=0x1` 및 `hv_apple_isa_vm_quota=0xFF` 부팅 인자를 설정하여 VM 실행 제한을 우회할 수 있다. 하지만, 릴리즈 커널에서는 System Integrity Protection(SIP)을 통해 이 기능이 차단되어 있다.

개발 환경 설정 및 부팅 과정

저자는 개발 커널을 빌드하고 부팅하는 과정을 상세히 설명한다. 먼저, 호스트 머신에 맞는 Kernel Debug Kit(KDK)를 다운로드하여 설치해야 한다. 그 후, `kmutil create` 명령어를 사용하여 개발 커널 컬렉션을 생성하고, 복구 모드에서 System Integrity Protection(SIP)을 비활성화한 후, 커스텀 부팅 설정을 적용해야 한다. 이 과정을 통해 사용자는 2개 이상의 VM을 동시에 실행할 수 있게 된다. 하지만, 이 방법을 사용하면 OS 업데이트가 불가능해지는 단점이 있다.

커뮤니티 반응 및 논쟁

커뮤니티에서는 Apple의 VM 실행 제한에 대한 다양한 의견이 제시되었다. 일부 사용자는 이러한 제한이 임의적(Arbitrary)이라고 비판하며, 고사양 Mac에서는 더 많은 VM을 지원해야 한다고 주장했다. 다른 사용자는 업데이트 제약(Update Restriction)에 대한 우려를 표명하며, 개발 커널 사용의 단점을 지적했다. 또한, M3+ 칩에서 Hypervisor.framework/Virtualization.framework를 사용한 중첩 VM(Nested VM) 실행 가능성에 대한 기대감도 나타났다.

Apple Silicon and Virtual Machines: Beating the 2 VM Limit (2023)