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