Smol Machines – 서브초 콜드스타트 포터블 마이크로VM

smolvm은 macOS와 Linux에서 동작하는 CLI 기반 가상머신 관리 도구. 서브초 콜드스타트, OCI 이미지 부팅, .smolmachine 단일 파일 패키징을 지원. Docker 데몬 없이 리눅스 커널 기반 마이크로VM을 실행.

개요

  • 작성자: @binsquare
  • 라이선스: Apache-2.0
  • 원저장소: github.com/smol-machines/smolvm
  • macOS와 Linux에서 동작하는 CLI 기반 가상머신 관리 도구
  • 격리된 환경에서 소프트웨어를 실행
  • 서브초(1초 미만) 콜드스타트, 탄력적 메모리 관리, 단일 파일 이식성 지원
  • 각 워크로드는 리눅스 커널 기반 마이크로VM으로 실행, 하드웨어 수준 격리 제공
  • .smolmachine 파일로 패키징된 VM은 동일 아키텍처 플랫폼에서 의존성 없이 재실행 가능

주요 기능

로컬 가상머신 관리 및 실행

  • smolvm machine run 명령으로 커스텀 리눅스 VM 실행
  • 콜드스타트는 1초 미만, macOS와 Linux 모두 지원
  • 메모리는 virtio balloon로 탄력 관리 (실제 사용량만 호스트에 할당)

이식 가능한 단일 파일 패키징

  • VM 상태를 포함한 .smolmachine 파일로 묶어 다른 플랫폼에서 재생성
  • 모든 의존성이 내장되어 설치 없이 즉시 실행 가능
  • 부팅 시간은 200ms 미만

불신 코드 샌드박싱

  • 하이퍼바이저 경계를 통해 호스트 파일시스템, 네트워크, 자격증명 완전 분리
  • 기본 네트워크는 비활성화, --allow-host 옵션으로 특정 호스트만 허용

지속형 개발용 VM

  • machine create, start, stop 명령으로 VM 생성 및 관리
  • 설치된 패키지가 재시작 후에도 유지

SSH 에이전트 포워딩

  • 호스트의 SSH 에이전트를 VM 내부로 전달 (개인키는 게스트로 복사되지 않음)
  • --ssh-agent 옵션으로 호스트 SSH 인증을 안전하게 활용

Smolfile 기반 환경 선언

  • TOML 형식의 Smolfile로 VM 설정을 선언
  • 이미지, 네트워크, 초기화 명령, 볼륨, 인증 옵션 등을 지정

사용 예시

# 임시 VM 실행
smolvm machine run --net --image alpine -- sh -c "echo 'Hello world'"
 
# 패키징된 실행 파일 생성
smolvm pack create --image python:3.12-alpine -o ./python312
 
# SSH 및 Git 사용
smolvm machine run --ssh-agent --net --image alpine

내부 구조

  • 각 워크로드는 Hypervisor.framework(macOS) 또는 KVM(Linux) 위에서 독립 커널 실행
  • libkrun 기반 VMM과 커스텀 커널(libkrunfw) 사용
  • OCI 이미지 포맷 지원 (Docker Hub, ghcr.io 등에서 이미지 직접 가져와 실행)
  • Docker 데몬 불필요, 표준 OCI 이미지를 그대로 부팅 가능
  • 기본 설정: 4 vCPU, 8GiB RAM (--cpus, --mem 옵션으로 조정)
  • vCPU 스레드는 유휴 시 하이퍼바이저에서 자동 절전

비교 (smolvm vs 기타 가상화 기술)

항목smolvmContainersColimaQEMUFirecrackerKata
격리 수준워크로드별 VM네임스페이스(공유 커널)네임스페이스(단일 VM)개별 VM개별 VM컨테이너별 VM
부팅 시간<200ms약 100ms수 초15~30초<125ms약 500ms
아키텍처라이브러리(libkrun)데몬VM 내 데몬프로세스프로세스런타임 스택
워크로드별 VM지원미지원공유지원지원지원
macOS 네이티브지원Docker VM 경유krunkit 기반지원미지원미지원
SDK 내장지원미지원미지원미지원미지원미지원
이식 가능한 아티팩트.smolmachine데몬 필요 이미지미지원미지원미지원미지원

플랫폼 지원

호스트게스트요구사항
macOS Apple Siliconarm64 LinuxmacOS 11 이상
macOS Intelx86_64 LinuxmacOS 11 이상 (테스트 미완료)
Linux x86_64x86_64 LinuxKVM(/dev/kvm) 필요
Linux aarch64aarch64 LinuxKVM(/dev/kvm) 필요

알려진 제한 사항

  • 네트워크는 기본 비활성화, --net 옵션으로만 활성화 가능
  • TCP/UDP만 지원, ICMP 미지원
  • 볼륨 마운트는 디렉터리 단위만 가능, 단일 파일은 불가
  • macOS에서는 Hypervisor.framework 권한으로 서명된 바이너리만 실행 가능
  • --ssh-agent 사용 시 호스트에 SSH 에이전트가 실행 중이어야 함

HN 의견 핵심

  • Docker 대체용 VM: 컨테이너의 사용성 유지 + 서브초 시작 시간 목표
  • k3s 실행 지원: 이슈 #150으로 추적 중
  • 라이브 마이그레이션: 현재 미지원 (차별화 포인트가 될 수 있음)
  • Unikraft와 차이: unikernel이 아닌 리눅스 커널을 슬림화한 버전 → 높은 호환성

관련 노트

Sources