- smolvm adalah alat manajemen mesin virtual berbasis CLI yang berjalan di macOS dan Linux untuk menjalankan perangkat lunak dalam lingkungan terisolasi
- Mendukung cold start sub-detik (di bawah 1 detik), manajemen memori elastis, dan portabilitas file tunggal sehingga VM dapat dijalankan dengan cepat dan ringan
- VM berjalan dalam bentuk microVM berbasis kernel Linux dan dapat dikemas sebagai file
.smolmachine agar bisa dijalankan ulang tanpa dependensi
- Mendukung terpadu lingkungan pengembangan dan keamanan melalui isolasi batas hypervisor, SSH agent forwarding, dan deklarasi lingkungan berbasis Smolfile
- Mendukung boot image OCI tanpa daemon Docker, serta menawarkan alternatif virtualisasi ringan dengan waktu boot di bawah 200ms dan isolasi tingkat perangkat keras
Gambaran umum
- smolvm adalah alat manajemen mesin virtual berbasis CLI untuk menjalankan perangkat lunak dalam lingkungan terisolasi
- Berjalan di macOS dan Linux, serta mendukung cold start sub-detik, penggunaan memori elastis, dan pengemasan file tunggal yang portabel
- Setiap workload dijalankan sebagai microVM berbasis kernel Linux dan memberikan isolasi tingkat perangkat keras
- VM yang dikemas sebagai file
.smolmachine dapat dijalankan ulang tanpa dependensi di platform dengan arsitektur yang sama
Fitur utama
-
Manajemen dan eksekusi mesin virtual lokal
- Menjalankan VM Linux kustom dengan perintah
smolvm machine run
- Cold start di bawah 1 detik, dengan dukungan untuk macOS dan Linux
- Memori dikelola secara elastis dengan virtio balloon, sehingga host hanya mengalokasikan sesuai pemakaian nyata
-
Pengemasan portabel dalam satu file
- Dapat dibundel menjadi file
.smolmachine yang mencakup status VM dan direkonstruksi di platform lain
- Semua dependensi tertanam sehingga bisa langsung dijalankan tanpa instalasi, dengan waktu boot di bawah 200ms
-
Sandboxing untuk kode tidak tepercaya
- Memisahkan sepenuhnya filesystem host, jaringan, dan kredensial melalui batas hypervisor
- Jaringan dinonaktifkan secara default, dan hanya host tertentu yang dapat diizinkan lewat opsi
--allow-host
-
VM persisten untuk pengembangan
- Membuat dan mengelola VM dengan perintah
machine create, start, stop
- Paket yang sudah dipasang tetap tersimpan setelah restart sehingga cocok untuk lingkungan pengembangan
-
SSH agent forwarding
- Meneruskan SSH agent host ke dalam VM, tetapi private key tidak disalin ke guest
- Memungkinkan pemakaian autentikasi SSH host secara aman dengan opsi
--ssh-agent
-
Deklarasi lingkungan berbasis Smolfile
- Konfigurasi VM dideklarasikan dengan
Smolfile berformat TOML
- Dapat menentukan image, jaringan, perintah inisialisasi, volume, opsi autentikasi, dan lainnya untuk membangun lingkungan yang dapat direproduksi
Contoh penggunaan
-
Menjalankan VM sementara
smolvm machine run --net --image alpine -- sh -c "echo 'Hello world'"
- Mode eksekusi sekali pakai yang akan membersihkan VM secara otomatis saat selesai
-
Membuat executable terkemas
smolvm pack create --image python:3.12-alpine -o ./python312
- Executable yang dihasilkan dapat menjalankan lingkungan Python mandiri
-
Kontrol jaringan
- Jaringan dinonaktifkan secara default
- Opsi
--allow-host memungkinkan akses hanya ke domain tertentu
-
Penggunaan SSH dan Git
smolvm machine run --ssh-agent --net --image alpine
- Dapat mengakses repositori Git dengan aman menggunakan kunci SSH host
Struktur internal dan cara kerja
- Setiap workload menjalankan kernel independen di atas Hypervisor.framework (macOS) atau KVM (Linux)
- Menggunakan VMM berbasis libkrun dan kernel kustom (libkrunfw)
- Mendukung format image OCI sehingga image dari Docker Hub, ghcr.io, dan lainnya dapat diambil langsung untuk dijalankan
- Tidak memerlukan daemon Docker, dan dapat mem-boot image OCI standar apa adanya
- Konfigurasi default adalah 4 vCPU, 8GiB RAM, dan dapat disesuaikan dengan opsi
--cpus, --mem
- Thread vCPU akan otomatis masuk mode hemat daya di hypervisor saat idle, sehingga biaya overcommit hampir tidak ada
Perbandingan
| Item |
smolvm |
Containers |
Colima |
QEMU |
Firecracker |
Kata |
| Tingkat isolasi |
VM per workload |
Namespace (kernel bersama) |
Namespace (VM tunggal) |
VM terpisah |
VM terpisah |
VM per container |
| Waktu boot |
<200ms |
sekitar 100ms |
beberapa detik |
15~30 detik |
<125ms |
sekitar 500ms |
| Arsitektur |
library (libkrun) |
daemon |
daemon di dalam VM |
proses |
proses |
stack runtime |
| VM per workload |
Didukung |
Tidak didukung |
Berbagi |
Didukung |
Didukung |
Didukung |
| Native macOS |
Didukung |
lewat Docker VM |
berbasis krunkit |
Didukung |
Tidak didukung |
Tidak didukung |
| SDK bawaan |
Didukung |
Tidak didukung |
Tidak didukung |
Tidak didukung |
Tidak didukung |
Tidak didukung |
| Artefak portabel |
.smolmachine |
image yang memerlukan daemon |
Tidak didukung |
Tidak didukung |
Tidak didukung |
Tidak didukung |
Dukungan platform
| Host |
Guest |
Persyaratan |
| macOS Apple Silicon |
arm64 Linux |
macOS 11 atau lebih baru |
| macOS Intel |
x86_64 Linux |
macOS 11 atau lebih baru (belum diuji tuntas) |
| Linux x86_64 |
x86_64 Linux |
Memerlukan KVM(/dev/kvm) |
| Linux aarch64 |
aarch64 Linux |
Memerlukan KVM(/dev/kvm) |
Keterbatasan yang diketahui
- Jaringan dinonaktifkan secara default dan hanya dapat diaktifkan dengan opsi
--net
- Hanya mendukung TCP/UDP, tidak mendukung ICMP
- Mount volume hanya bisa per direktori, tidak untuk file tunggal
- Di macOS, hanya biner yang ditandatangani dengan izin Hypervisor.framework yang dapat dijalankan
- Saat menggunakan
--ssh-agent, SSH agent harus sudah berjalan di host (perlu pengaturan SSH_AUTH_SOCK)
Terkait pengembangan
- Panduan pengembangan tersedia di
docs/DEVELOPMENT.md
- Dirilis di bawah lisensi Apache-2.0 dan dibuat oleh @binsquare
1 komentar
Komentar Hacker News
Saya sedang membuat mesin virtual yang bisa menggantikan container Docker
Dengan tetap mempertahankan kemudahan penggunaan container, targetnya adalah waktu start di bawah 1 detik
Saat mengerjakan hal terkait Firecracker di AWS, saya menyadari bahwa container adalah lapisan yang tidak perlu, dan Firecracker adalah teknologi yang dirancang sesuai struktur internal AWS
Karena itu saya akhirnya membuat sendiri bentuk hibrida yang menggabungkan keunggulan container dan Firecracker
Saya ingin mendengar pendapat kalian
microVM biasanya tidak bisa menjalankan Docker atau Kubernetes, dan itu yang jadi kendala
Saya ingin menaruh seluruh klaster Kubernetes di dalam sandbox. Apakah ini juga mendukung menjalankan k3s?
Ini fitur yang selalu hilang di sistem serupa, padahal masih banyak lingkungan yang membutuhkannya selain workload cloud-native
Kalau fitur ini ditambahkan, menurut saya itu bisa jadi pembeda yang sangat kuat
Karena Firecracker tidak berjalan di macOS, saya ingin cara mudah untuk membuat sandbox microVM bagi aplikasi AI
Dari sudut pandang pengguna biasa, Firecracker terlalu berat
Dan kalau ingin memangkas waktu itu lebih jauh, saya juga ingin tahu bottleneck apa yang saat ini masih ada
Proyek ini terdengar mirip dengan berbagai implementasi unikernel — misalnya Unikraft
Tapi Smol Machines bukan implementasi unikernel, melainkan versi kernel Linux yang dirampingkan
Karena itu kompatibilitasnya dengan sebagian besar software tetap tinggi
Fitur pembuatan biner mandiri ini terlihat seperti cara untuk mengemas aplikasi JVM dengan lebih sederhana dibanding GraalVM Native
Contoh perintah:
smolvm pack create --image python:3.12-alpine -o ./python312./python312 run -- python3 --version→ Python 3.12.x berjalan dalam keadaan sepenuhnya terisolasi, tanpa perlu pyenv/venv/conda
Seperti Electron mendistribusikan aplikasi web bersama browser, Smol Machines mengemas software bersama Linux VM
Dengan begitu kita bisa menghindari masalah manajemen dependensi atau kompatibilitas
Secara pribadi saya berharap tool seperti Codex atau Claude Code juga didistribusikan dengan cara seperti ini
Ini adalah konsep "mesin yang bisa didistribusikan" untuk mengatasi masalah seperti itu
Sekali setup-nya benar, itu bisa langsung dibagikan ke siapa saja untuk dijalankan
Saya penasaran apakah file
.smolmachinemendukung tanda tangan digital dan autentikasi mandiriSaya ingin tahu apakah ini bisa bekerja seperti dokumentasi signing/verification Sylabs
Saya penasaran apakah ide dari zeroboot bisa diterapkan agar ini jadi lebih cepat
Tabel perbandingannya benar-benar bagus
Awalnya saya berpikir, “ini mirip Firecracker,” tapi setelah melihat tabelnya, perbedaannya jadi terlihat jelas
Mudah dibaca, dan secara keseluruhan ini adalah pekerjaan yang sangat mengesankan
Di dokumentasi CLI saya melihat image alpine dan python:3.12-alpine, dan saya penasaran ini asalnya dari mana
Apakah diambil dari registry Docker atau semacamnya, sudah bawaan, atau dibuat langsung dengan smolfile
Saya juga penasaran apakah ada image Ubuntu
Akan bagus jika ada fitur hot resize memori/CPU, dan sepertinya ini juga bisa dipakai untuk orkestrasi infrastruktur backend per pelanggan
Sebagian besar proyek open source menjalankan container dengan Docker Compose, tapi Smol Machines tidak mendukung Docker di dalam microVM
Selain itu, sayang juga karena nested VM seperti Vagrant tidak didukung
Sebagai gantinya, bagaimana kalau dijalankan sebagai VM saudara dari Vagrant VM dengan pendekatan trampoline?
Saya penasaran apa alasan inti mengapa seseorang sebaiknya memakai Smol Machines alih-alih sandbox Docker, bisakah dijelaskan secara singkat?
Hasilnya benar-benar keren. Selamat