• smolvm macOS और Linux पर चलने वाला CLI-आधारित virtual machine management tool है, जो isolated environment में software चलाने के लिए बनाया गया है
  • यह sub-second (1 सेकंड से कम) cold start, elastic memory management, और single-file portability सपोर्ट करता है, जिससे तेज़ और हल्का VM execution संभव होता है
  • VM, Linux kernel-आधारित microVM के रूप में चलते हैं, और .smolmachine फ़ाइल में पैकेज होकर बिना dependency के दोबारा चलाए जा सकते हैं
  • hypervisor boundary isolation, SSH agent forwarding, और Smolfile-आधारित environment declaration के ज़रिए यह development और security environments को एक साथ सपोर्ट करता है
  • यह Docker daemon के बिना OCI image boot करना सपोर्ट करता है, और 200ms से कम boot time व hardware-level isolation के साथ हल्के virtualization का एक विकल्प पेश करता है

अवलोकन

  • smolvm एक CLI-आधारित virtual machine management tool है, जो isolated environment में software चलाने के लिए बनाया गया है
  • यह macOS और Linux पर चलता है, और sub-second cold start, elastic memory usage, तथा portable single-file packaging सपोर्ट करता है
  • हर workload, Linux kernel-आधारित microVM के रूप में चलता है और hardware-level isolation देता है
  • .smolmachine फ़ाइल में पैकेज किया गया VM, समान architecture वाले प्लेटफ़ॉर्म पर बिना dependency के फिर से चलाया जा सकता है

मुख्य फीचर

  • लोकल virtual machine management और execution

    • smolvm machine run कमांड से custom Linux VM चलाया जा सकता है
    • cold start 1 सेकंड से कम है, और macOS व Linux दोनों सपोर्टेड हैं
    • memory को virtio balloon के ज़रिए elastic तरीके से manage किया जाता है, जिससे host पर केवल वास्तविक उपयोग जितनी memory allocate होती है
  • portable single-file packaging

    • VM state सहित .smolmachine फ़ाइल में पैक करके इसे दूसरे प्लेटफ़ॉर्म पर दोबारा बनाया जा सकता है
    • सभी dependency built-in होती हैं, इसलिए installation के बिना तुरंत चलाया जा सकता है, और boot time 200ms से कम है
  • untrusted code sandboxing

    • hypervisor boundary के माध्यम से host filesystem, network, credentials को पूरी तरह अलग किया जाता है
    • डिफ़ॉल्ट network बंद रहता है, और --allow-host विकल्प से केवल खास host को अनुमति दी जा सकती है
  • persistent development VM

    • machine create, start, stop कमांड से VM बनाए और manage किए जा सकते हैं
    • installed packages restart के बाद भी बने रहते हैं, इसलिए इसे development environment के रूप में उपयोग किया जा सकता है
  • SSH agent forwarding

    • host का SSH agent VM के अंदर forward किया जाता है, लेकिन private key guest में कॉपी नहीं होती
    • --ssh-agent विकल्प के ज़रिए host की SSH authentication को सुरक्षित रूप से उपयोग किया जा सकता है
  • Smolfile-आधारित environment declaration

    • TOML फ़ॉर्मैट के Smolfile से VM configuration declare की जा सकती है
    • image, network, init commands, volume, authentication options आदि तय करके reproducible environment configuration बनाया जा सकता है

उपयोग उदाहरण

  • अस्थायी VM चलाना

    • smolvm machine run --net --image alpine -- sh -c "echo 'Hello world'"
    • यह एक one-off execution तरीका है, जिसमें VM बंद होते ही अपने-आप साफ़ हो जाता है
  • packaged executable बनाना

    • smolvm pack create --image python:3.12-alpine -o ./python312
    • बने हुए executable से स्वतंत्र Python environment चलाया जा सकता है
  • network control

    • डिफ़ॉल्ट network बंद रहता है
    • --allow-host विकल्प से केवल विशेष domain तक access दिया जा सकता है
  • SSH और Git का उपयोग

    • smolvm machine run --ssh-agent --net --image alpine
    • host की SSH key को सुरक्षित रूप से उपयोग करके Git repository तक पहुँचा जा सकता है

आंतरिक संरचना और काम करने का तरीका

  • हर workload, Hypervisor.framework(macOS) या KVM(Linux) के ऊपर independent kernel चलाता है
  • यह libkrun-आधारित VMM और custom kernel(libkrunfw) का उपयोग करता है
  • OCI image format सपोर्ट होने से Docker Hub, ghcr.io आदि से image सीधे लाकर चलाई जा सकती है
  • Docker daemon की ज़रूरत नहीं, standard OCI image को सीधे boot किया जा सकता है
  • डिफ़ॉल्ट configuration 4 vCPU, 8GiB RAM है, जिसे --cpus, --mem विकल्प से बदला जा सकता है
  • vCPU threads idle होने पर hypervisor में अपने-आप sleep mode में चले जाते हैं, इसलिए over-allocation cost लगभग नहीं के बराबर है

तुलना

मद smolvm Containers Colima QEMU Firecracker Kata
isolation level workload-प्रति VM namespace (shared kernel) namespace (single VM) individual VM individual VM container-प्रति VM
boot time <200ms लगभग 100ms कुछ सेकंड 15~30 सेकंड <125ms लगभग 500ms
architecture library (libkrun) daemon VM के अंदर daemon process process runtime stack
workload-प्रति VM समर्थित समर्थित नहीं shared समर्थित समर्थित समर्थित
macOS native समर्थित Docker VM के माध्यम से krunkit-आधारित समर्थित समर्थित नहीं समर्थित नहीं
SDK built-in समर्थित समर्थित नहीं समर्थित नहीं समर्थित नहीं समर्थित नहीं समर्थित नहीं
portable artifact .smolmachine daemon की ज़रूरत वाली image समर्थित नहीं समर्थित नहीं समर्थित नहीं समर्थित नहीं

प्लेटफ़ॉर्म सपोर्ट

host guest आवश्यकताएँ
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) आवश्यक

ज्ञात सीमाएँ

  • network डिफ़ॉल्ट रूप से बंद है, और केवल --net विकल्प से चालू किया जा सकता है
  • केवल TCP/UDP सपोर्टेड हैं, ICMP सपोर्टेड नहीं है
  • volume mount सिर्फ directory स्तर पर संभव है, single file नहीं
  • macOS पर केवल Hypervisor.framework permission से signed binary ही चल सकती है
  • --ssh-agent उपयोग करते समय host पर SSH agent चल रहा होना चाहिए (SSH_AUTH_SOCK सेट होना आवश्यक)

विकास संबंधी

  • development guidelines docs/DEVELOPMENT.md में देखी जा सकती हैं
  • यह Apache-2.0 license के तहत उपलब्ध है, और इसे @binsquare ने बनाया है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.