microvm 0.0.1-alpha.1

Lightweight macOS microVM launcher built on Apple's Virtualization.framework
microvm-0.0.1-alpha.1 is not a library.

microvm

Lightweight container runtime for macOS. 515 LOC, 1.3 MB binary.

Uses Apple's Virtualization.framework to boot Linux VMs directly -- no Docker Desktop, no background daemon, no bundled VMM.

Install

curl -fsSL https://raw.githubusercontent.com/windsornguyen/microvm/main/install.sh | sh

Or a specific version: curl -fsSL ... | sh -s v0.1.0

From source:

cargo build --release
codesign --sign - --entitlements entitlements.plist --force target/release/microvm
cp target/release/microvm ~/.local/bin/microvm

The codesign step is required. Virtualization.framework needs the com.apple.security.virtualization entitlement.

Usage

microvm boot --kernel <path> --rootfs <path> [--cpus N] [--memory MiB] [--virtualization]

--virtualization exposes /dev/kvm to the guest (nested virtualization).

Getting a kernel

Any ARM64 Linux kernel in Image format works. Three options:

Ubuntu generic (has KVM built-in):

container run --rm -v /tmp/kernel:/out ubuntu:24.04 bash -c '
  apt-get update -qq && apt-get download linux-image-unsigned-6.8.0-31-generic
  dpkg-deb -x linux-image-*.deb /tmp/ex && cp /tmp/ex/boot/vmlinuz-* /out/vmlinuz'
python3 -c "
import gzip
data = gzip.decompress(open('/tmp/kernel/vmlinuz','rb').read())
open('/tmp/kernel/vmlinux','wb').write(data)"

Kata Containers (no KVM, but lightweight):

Already installed by container system start at:

~/Library/Application Support/com.apple.container/kernels/vmlinux-*

Build your own: clone any arm64 kernel tree, apply your config with CONFIG_KVM=y, and make ARCH=arm64 Image.

Getting a rootfs

Any ext4 disk image works.

From Apple's container (Ubuntu 24.04):

After container run ubuntu:24.04, the snapshot lives at:

~/Library/Application Support/com.apple.container/snapshots/<digest>/snapshot

From scratch:

dd if=/dev/zero of=rootfs.ext4 bs=1M count=2048
# format inside a container (macOS has no mkfs.ext4):
container run --rm -v /tmp:/mnt ubuntu:24.04 bash -c 'mkfs.ext4 /mnt/rootfs.ext4'
# mount and populate inside a container, or use debootstrap

/dev/kvm on macOS

Boot with --virtualization and a KVM-capable kernel (Ubuntu generic arm64 works):

microvm boot \
  --kernel /tmp/kernel/vmlinux \
  --rootfs ~/Library/Application\ Support/com.apple.container/snapshots/<digest>/snapshot \
  --cpus 2 --memory 1024 \
  --virtualization

The guest will have /dev/kvm available. Requires Apple Silicon and macOS 26+.

Requirements

  • Apple Silicon (M1+)
  • macOS 26 (Tahoe)
  • Rust 2024 edition

License

Apache-2.0