프로젝트 소개

Containerization은 Apple이 제공하는 Swift 패키지로, macOS에서 Linux 컨테이너를 실행할 수 있게 한다. Apple 실리콘의 Virtualization.framework를 기반으로 구축되어 있으며, 전체 컨테이너 라이프사이클을 위한 API 세트를 제공한다. 핵심 기능에는 OCI 이미지 관리 및 원격 레지스트리 연동, ext4 파일 시스템 생성 및 데이터 채우기, Netlink 소켓 패밀리 연동, 빠른 부팅을 위한 최적화된 Linux 커널 빌드, 경량 가상 머신 생성 및 런타임 환경 관리, 컨테이너화된 프로세스 생성 및 연동, Rosetta 2를 사용해 Apple 실리콘에서 linux/amd64 컨테이너 실행이 포함된다. 설계상 각 Linux 컨테이너는 자체 경량 가상 머신 안에서 실행된다. 클라이언트는 컨테이너별로 전용 IP 주소를 할당할 수 있어 개별 포트 포워딩이 필요 없다. 최적화된 Linux 커널 구성과 경량 init 시스템을 갖춘 최소 루트 파일 시스템 덕분에 컨테이너는 1초 미만으로 시작할 수 있다. 하위 프로젝트 vminitd는 VM 내부에서 초기 프로세스로 실행되는 작은 init 시스템이며, vsock을 통해 gRPC API를 노출해 런타임 환경을 구성하고 컨테이너화된 프로세스를 시작할 수 있게 하며, I/O, 시그널, 이벤트를 호출 프로세스로 전달한다. 이 프로젝트는 VMM을 VirtualMachineManager / VirtualMachineInstance 프로토콜 뒤로 추상화하고 두 가지 백엔드를 제공한다. macOS 백엔드는 Virtualization.framework를 직접 사용하며(VZVirtualMachineManager), 추가 바이너리가 필요 없다. Linux 백엔드는 cloud-hypervisor와 KVM을 사용하며(CHVirtualMachineManager), VM마다 하나의 cloud-hypervisor 하위 프로세스를 실행하고 REST-on-UDS API로 제어한다. 블록 스토리지는 virtio-blk, 공유 디렉터리는 virtio-fs(공유당 하나의 virtiofsd), 네트워킹은 TAP을 사용하며, cloud-hypervisor의 하이브리드 vsock을 통해 macOS 경로와 동일한 vminitd 계약에 도달한다. Linux 백엔드는 호스트에 cloud-hypervisor와 virtiofsd가 필요하고, KVM 접근 권한과 네트워킹을 위한 사전 구성된 TAP/bridge/NAT 환경이 필요하다. 패키지 빌드 요구 사항은 Apple 실리콘 Mac, macOS 26, Xcode 26이며, 이전 macOS 버전은 지원되지 않는다. Linux 게스트 init(vminitd/vmexec)은 Mac에서 크로스 컴파일하지 않고 Linux 컨테이너 내부에서 정적 바이너리로 컴파일되므로, 호스트에 Swift 툴체인이나 Static Linux SDK는 필요하지 않으며 대신 apple/container CLI가 사용된다. cctl 실행 파일은 API 탐색을 위한 플레이그라운드 역할을 하며, OCI 이미지 조작, 레지스트리 로그인, 루트 파일 시스템 블록 생성, 간단한 Linux 컨테이너 실행 명령을 제공한다. macOS에서 경량 VM을 실행하려면 Linux 커널이 필요하다. 저장소의 kernel/ 디렉터리에는 최적화된 커널 구성이 포함되어 있으며, 이를 컴파일하기 위한 컨테이너화된 빌드 환경도 제공된다. 이 구성은 빠른 시작 시간과 경량 환경을 위해 최소화되어 있으며, Containerization은 컨테이너별로 다른 커널 구성과 버전을 사용할 수 있는 1급 API를 제공한다. 사용자가 제공한 커널도 지원되며, 커널 버전 6.14.9부터 기능이 테스트되었다. 사전 빌드된 커널은 VIRTIO 드라이버가 모듈이 아니라 커널에 직접 컴파일되어 있어야 하며, Kata Containers 프로젝트가 적합한 커널을 제공한다. 빌드 및 테스트 워크플로우는 권장 Xcode 설치, 활성 개발자 디렉터리 설정, apple/container CLI 설치 후 `make all`로 빌드하고 `make test integration`으로 테스트를 실행하는 방식이다. 통합 테스트에는 커널이 필요하며, `make fetch-default-kernel`로 기본 커널을 가져올 수 있다. Protobuf 인터페이스는 `make protos`로 재생성할 수 있고, 사전 커밋 훅은 `make pre-commit`으로 설치할 수 있으며, API 문서는 `make docs`와 `make serve-docs`로 로컬에서 생성할 수 있다. 프로젝트 버전은 0.1.0으로 첫 공식 릴리스다. 소스 안정성은 마이너 버전 내에서만 보장된다(예: 0.1.1과 0.1.2 사이). 소스 호환성을 깨뜨릴 수 있는 업데이트를 피하려는 사용자는 .upToNextMinorVersion(from: "0.1.0")으로 의존성을 고정할 수 있다. 기여는 CONTRIBUTING.md 파일을 통해 환영한다.