Meta, Android 가상 기기 프레임워크 Cuttlefish를 Apple 실리콘 Mac으로 이식
Meta Reality Labs가 AOSP의 가상 기기 프레임워크 Cuttlefish를 macOS와 Apple 실리콘으로 이식했습니다. 변경은 QEMU의 vhost-user, HVF 메모리 추적, 네이티브 Cocoa 디스플레이, 빌드와 서명에 걸쳐 있습니다. 결과물은 QEMU 포크와 패치 모음으로 공개되었습니다.
Meta, Cuttlefish를 Apple 실리콘 Mac으로 가져오다
2026년 11월 13일, Meta 엔지니어링 블로그는 Reality Labs가 Android 오픈소스 프로젝트의 가상 기기 프레임워크인 Cuttlefish를 macOS와 Apple 실리콘에서 네이티브로 실행하도록 이식한 과정을 소개했습니다. 글쓴이는 Hadrien Zalek, Joe Knox, Alex Chong, Marcel Apfelbaum입니다. Reality Labs는 AI 안경 같은 제품을 만들며, 구하기 어려운 실물 기기에 의존하지 않고 개발과 테스트를 확장하려고 에뮬레이터를 씁니다. 다만 이것은 Google이나 AOSP의 공식 릴리스가 아닙니다. Meta는 QEMU 포크와 패치 모음 형태로 공개했고, 변경 사항을 업스트림에 기여할 방법은 아직 모색 중이라고 밝혔습니다.
Meta가 하나의 플랫폼을 원한 이유
휴대폰이 아닌 Android 기기용 소프트웨어를 테스트하려면, 가상 기기가 실제 제품의 소프트웨어 동작을 얼마나 가깝게 재현하는지가 중요합니다. Goldfish 같은 가벼운 에뮬레이터는 일부만 해결하며, 실제 기기와의 차이 때문에 생기는 버그가 개발 후반까지 숨어 있을 수 있습니다. Cuttlefish는 실제 하드웨어와 같은 시스템 이미지를 부팅하고 가상 하드웨어 위에서 현실적인 소프트웨어 스택을 실행하므로 물리 기기에 더 가깝게 동작합니다. 문제는 Cuttlefish가 Linux에서만 지원되는데 Meta의 앱과 라이브러리 개발자들은 Apple 실리콘 Mac에서 일한다는 점이었습니다. 그래서 Meta는 Goldfish와 Cuttlefish를 나란히 지원해야 했습니다. 글에 따르면 이는 컴퓨팅 자원을 소모하고, 개발자를 혼란스럽게 하고, 에뮬레이터 팀의 속도를 늦추고, 모든 도구가 두 플랫폼을 지원하게 만들었습니다. 글은 AOSP도 같은 구분을 둔다고 짚습니다. Goldfish는 앱 개발자용, Cuttlefish는 플랫폼 개발자용입니다.
macOS에서 막혔던 세 가지
Cuttlefish는 오케스트레이션 계층이고, 게스트 운영체제를 실제로 실행하는 것은 가상 머신 모니터입니다. Linux에서 Cuttlefish는 보통 crosvm을 쓰며 예전에는 대안으로 QEMU도 지원했지만, 그 통합은 방치되어 있었습니다. Apple 실리콘에서 네이티브로 동작시키려고 Meta는 QEMU 지원을 되살렸습니다. Cuttlefish의 많은 가상 장치는 소켓을 통해 QEMU에 virtio 장치를 제공하는 별도 프로세스인 vhost-user 백엔드를 사용합니다. 이 설계의 상당 부분은 Linux를 전제로 쓰였습니다. macOS에서는 세 가지 전제가 깨졌습니다. vhost-user 기능이 Linux에서만 활성화되어 빌드도 실행도 안 되었고, Apple 하이퍼바이저에는 QEMU가 예상하지 못한 자원 제한이 있었으며, 네이티브 디스플레이와 빌드, 서명 경로는 아예 없었습니다.
Meta가 바꾼 것
가장 중요한 변경은 QEMU의 vhost-user 경로에 있었습니다. 프런트엔드, libvhost-user, vhost-user-blk 같은 contrib 백엔드는 모두 Linux로 제한되어 있었습니다. Meta는 이 빌드 제한을 풀어 macOS에서도 빌드되게 했고, 덕분에 Cuttlefish의 장치 백엔드가 Linux에서처럼 Mac에서도 QEMU에 작업을 넘길 수 있게 되었습니다. Apple 실리콘에서 QEMU는 KVM 대신 Hypervisor.framework, 곧 HVF로 가속합니다. HVF 백엔드는 큰 Cuttlefish 구성에 필요한 만큼 메모리 영역을 추적하지 못해서, Meta는 추적 슬롯 수를 늘렸습니다.
디스플레이는 WebRTC 인터페이스에 의존하지 않고 QEMU의 네이티브 Cocoa 디스플레이로 옮겼습니다. 변경에는 화면 깨짐을 없애는 BGRA 픽셀 형식 지원, 마우스 클릭을 터치 입력으로 바꾸는 기능, -g 플래그로 화면 크기를 지정하는 옵션이 포함됩니다. 또 gfxstream과 rutabaga 구성에서 Rust 쪽 그래픽 ABI와 맞추기 위해 불안정한 Rutabaga 구조체를 활성화했습니다. 마지막으로 빌드와 패키징 작업이 있었습니다. Darwin 빌드 지원, macOS에서 arm64용 QEMU 빌드, 툴체인 수정, JIT 권한, 코드 서명과 공증입니다. Cuttlefish 쪽에서는 macOS 호스트 지원을 추가해 오케스트레이션이 Mac에서 빌드되고 실행되게 했습니다.
Meta가 보고한 이점
Meta는 하나의 플랫폼으로 통합해 유지보수 부담이 줄고, 인프라 요구가 줄고, 중복 도구가 사라지고, 충실도가 높아졌으며, 개발자가 CI와 똑같은 가상 기기를 쓰게 되었다고 말합니다. 단일 플랫폼 덕분에 Bluetooth 페어링, Wi-Fi, 셀룰러, 3D 그래픽, OTA 업데이트 테스트, Fastboot, 그리고 CI와 개발에서 쓰는 스냅샷도 지원하기 쉬워졌습니다. 이는 모두 Meta 자신의 주장입니다. 글에는 벤치마크, 비용 수치, 측정된 충실도 점수가 없습니다. Meta는 같은 가상 기기를 자사 생태계용으로 개발하는 외부 개발자에게도 공유하므로, 서드파티 팀이 Meta가 자체 OS를 검증하는 플랫폼과 같은 곳에서 테스트한다고 설명합니다.
글은 AI 에이전트에 관한 논점도 더합니다. Android 개발에서 에이전트의 역할이 커질수록, 코드를 만드는 일만큼 실행 결과를 검증하는 일이 중요해집니다. 가상 기기를 쓰면 엔지니어와 자동화된 에이전트가 격리된 환경에서 동시에 일하고, 상태를 즉시 초기화하고, 실물 하드웨어를 공유하지 않고도 테스트를 반복할 수 있습니다.
구하는 방법과 아직 없는 것
Meta는 이 작업을 두 부분으로 배포합니다. qemu-wearables 저장소는 Meta가 관리하는 QEMU 포크로, Meta의 커밋을 담고 있습니다. cuttlefish-wearables 저장소는 Android와 AOSP에 적용하는 방법을 담은 패치 파일 모음입니다. 둘 다 GitHub의 facebookincubator 아래에 있고 빌드와 패치 적용 안내를 포함합니다. Meta는 QEMU와 Cuttlefish 커뮤니티에 감사하며, 특히 macOS 통합을 직접 가능하게 한 Stefano Garzarella의 vsock-user 구현을 언급합니다.
"전면 지원"이라는 표현은 조심해서 읽어야 합니다. 글이 설명하는 것은 Meta 자신의 용도로 동작하는 이식이며, 포크와 패치로 공유되었습니다. 변경이 QEMU나 AOSP에 병합되었다는 말은 없고, 지원되지 않는 기능이나 알려진 결함의 목록도 없습니다. 업스트림이 받아들이기 전까지, 이를 도입하는 쪽이 직접 패치를 적용하고 다시 빌드하며 그 작업을 최신으로 유지해야 합니다.
Sources
FAQ
Cuttlefish는 무엇이고 Meta는 왜 Mac으로 이식했나요?
Cuttlefish는 AOSP의 가상 기기 프레임워크로, 실제 하드웨어와 같은 시스템 이미지를 부팅하므로 가벼운 Goldfish 에뮬레이터보다 실제 기기에 가깝습니다. Linux에서만 지원되는데 Meta 개발자들은 Apple 실리콘 Mac을 쓰기 때문에 두 에뮬레이터를 함께 유지해야 했고, 이식으로 하나의 플랫폼으로 통합할 수 있습니다.
Google/AOSP 업스트림의 정식 릴리스인가요? QEMU나 AOSP에 병합되었나요?
둘 다 아닙니다. Meta는 결과물을 두 개의 GitHub 저장소로 공유합니다. Meta가 관리하는 QEMU 포크인 qemu-wearables와, Android 및 AOSP에 적용하는 패치 모음인 cuttlefish-wearables입니다. 업스트림 기여 방법은 아직 모색 중이므로 도입하는 쪽이 패치를 적용하고 직접 빌드해야 합니다.
Cuttlefish를 macOS에서 실행하려고 Meta는 무엇을 바꾸었나요?
세 종류의 변경이 있었습니다. QEMU의 vhost-user가 Linux에서만 빌드되던 제한을 풀어 macOS에서 빌드되게 했고, HVF 백엔드의 메모리 영역 추적 슬롯 수를 늘렸으며, 디스플레이를 네이티브 Cocoa로 바꿨습니다. 또 arm64 빌드, JIT 권한, 코드 서명과 공증도 추가했습니다.