Smol machines – 서브초 콜드스타트, 이식 가능한 가상머신

1 hour ago 1

(github.com/smol-machines)

  • smolvm은 macOS와 Linux에서 동작하는 CLI 기반 가상머신 관리 도구로, 격리된 환경에서 소프트웨어를 실행함
  • 서브초(1초 미만) 콜드스타트, 탄력적 메모리 관리, 단일 파일 이식성을 지원해 빠르고 가벼운 VM 실행 가능
  • VM은 리눅스 커널 기반 마이크로VM 형태로 구동되며, .smolmachine 파일로 패키징해 의존성 없이 재실행 가능
  • 하이퍼바이저 경계 격리, SSH 에이전트 포워딩, Smolfile 기반 환경 선언 등으로 개발·보안 환경을 통합 지원
  • Docker 데몬 없이 OCI 이미지 부팅을 지원하며, 200ms 미만 부팅 시간과 하드웨어 수준 격리로 경량 가상화 대안 제시

개요

  • smolvm격리된 환경에서 소프트웨어를 실행하기 위한 CLI 기반 가상머신 관리 도구
  • macOS와 Linux에서 동작하며, 서브초 콜드스타트, 탄력적 메모리 사용, 이식 가능한 단일 파일 패키징을 지원
  • 각 워크로드는 리눅스 커널 기반 마이크로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'"
    • 종료 시 VM이 자동 정리되는 일회성 실행 방식
  • 패키징된 실행 파일 생성

    • smolvm pack create --image python:3.12-alpine -o ./python312
    • 생성된 실행 파일로 독립적인 Python 환경 실행 가능
  • 네트워크 제어

    • 기본 네트워크는 비활성화
    • --allow-host 옵션으로 특정 도메인만 접근 허용
  • SSH 및 Git 사용

    • smolvm machine run --ssh-agent --net --image alpine
    • 호스트의 SSH 키를 안전하게 사용해 Git 리포지토리 접근 가능

내부 구조 및 동작 방식

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

비교

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

플랫폼 지원

호스트 게스트 요구사항
macOS Apple Silicon arm64 Linux macOS 11 이상
macOS Intel x86_64 Linux macOS 11 이상 (테스트 미완료)
Linux x86_64 x86_64 Linux KVM(/dev/kvm) 필요
Linux aarch64 aarch64 Linux KVM(/dev/kvm) 필요

알려진 제한 사항

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

개발 관련

  • 개발 지침은 docs/DEVELOPMENT.md에서 확인 가능
  • Apache-2.0 라이선스로 공개되어 있으며, @binsquare가 제작
Read Entire Article