6 poin oleh GN⁺ 4 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 4 hari lalu
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

    • Ini benar-benar keren. Saya juga sempat meneliti solusi sandboxing AI dan membuat Locki dengan kombinasi Lima+Incus
      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?
    • Saya penasaran bagaimana status dukungan live migration
      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
    • Saya penasaran seberapa banyak bagian kode yang ditulis dengan LLM/AI
    • Saya juga pernah membuat sesuatu yang mirip — namanya shuru.run
      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
    • Saya penasaran tantangan desain tersulit apa yang harus diatasi untuk mencapai waktu boot di bawah 1 detik
      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

    • Saya kurang tahu soal bagian dalam Unikraft karena tidak open source
      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

    • Ini konsep yang mirip Electron
      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
    • Hampir semua orang pernah mengalami “merusak environment development” mereka setidaknya sekali
      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 .smolmachine mendukung tanda tangan digital dan autentikasi mandiri
    Saya 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

    • Terima kasih
  • 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

    • Dukungan Docker sudah direncanakan. Pada rilis berikutnya kami berencana mendistribusikan kernel kompatibel dengan flag kernel yang diperlukan
    • Karena Vagrant menjalankan VM secara lokal, sepertinya memang butuh nesting
      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