Smol machines – 1 सेकंड से कम cold start और portable virtual machine
(github.com/smol-machines)- 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 से कम है
- VM state सहित
-
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 बनाया जा सकता है
- TOML फ़ॉर्मैट के
उपयोग उदाहरण
-
अस्थायी 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 ने बनाया है
1 टिप्पणियां
Hacker News की राय
मैं Docker containers की जगह लेने वाली virtual machines बना रहा हूँ
लक्ष्य है containers की usability (ergonomics) को बनाए रखते हुए 1 सेकंड से कम startup time हासिल करना
AWS में Firecracker से जुड़ा काम करते हुए मुझे एहसास हुआ कि containers एक गैर-ज़रूरी layer हैं, और Firecracker ऐसी technology थी जिसे AWS की internal architecture के हिसाब से design किया गया था
इसलिए मैंने खुद एक hybrid form बनाना शुरू किया जो containers के फ़ायदों और Firecracker के फ़ायदों को जोड़ती है
राय सुनना चाहूँगा
microVM आम तौर पर Docker या Kubernetes नहीं चला पाते, इसलिए यह एक चिंता थी
मैं पूरे Kubernetes cluster को sandbox के अंदर रखना चाहता हूँ। क्या यह k3s चलाना भी support करता है?
ऐसे मिलते-जुलते systems में यह feature अक्सर गायब होता है, लेकिन cloud-native workloads के अलावा भी अभी कई environments हैं जहाँ इसकी ज़रूरत पड़ती है
अगर यह feature जोड़ा जाए तो यह सच में एक अलग पहचान बनाने वाला point हो सकता है
Firecracker macOS पर नहीं चलता, इसलिए मैं AI apps के लिए microVM sandbox आसानी से बनाना चाहता था
आम users के नज़रिए से Firecracker बहुत भारी है
और अगर उस समय को और कम करना हो, तो अभी कौन-कौन से bottlenecks हैं, यह भी जानना चाहूँगा
यह project कई unikernel implementations जैसा लगता है — जैसे Unikraft
लेकिन Smol Machines कोई unikernel implementation नहीं है, बल्कि Linux kernel का slimmed-down version है
इसलिए यह ज़्यादातर software के साथ अच्छी compatibility देता है
self-contained binaries बनाने की feature JVM apps को GraalVM Native से भी आसान तरीके से package करने का तरीका लगती है
उदाहरण command:
smolvm pack create --image python:3.12-alpine -o ./python312./python312 run -- python3 --version→ Python 3.12.x पूरी तरह isolated state में चलता है, pyenv/venv/conda की ज़रूरत नहीं होती
जैसे Electron web apps को browser के साथ ship करता है, वैसे ही Smol Machines software को Linux VM के साथ package करता है
इससे dependency management और compatibility issues से बचा जा सकता है
व्यक्तिगत रूप से मुझे अच्छा लगेगा अगर Codex या Claude Code जैसे tools भी इसी तरह distribute किए जाएँ
यह उस समस्या को हल करने के लिए ‘distributable machine’ का concept है
एक बार setup ठीक से हो जाए, तो इसे किसी के साथ भी तुरंत share और run किया जा सकता है
मैं जानना चाहता हूँ कि
.smolmachinefile digital signatures और self-attestation support करती है या नहींक्या यह Sylabs के signing/verification docs की तरह काम कर सकती है?
मैं जानना चाहता हूँ कि zeroboot के ideas लागू करके इसे और तेज़ बनाया जा सकता है या नहीं
comparison table सच में बहुत अच्छी बनी है
शुरुआत में लगा, “यह तो Firecracker जैसा है,” लेकिन table देखकर differences बहुत साफ़ दिखे
देखना आसान था, और कुल मिलाकर यह बहुत प्रभावशाली काम है
मैंने CLI docs में alpine और python:3.12-alpine images देखीं, और मैं जानना चाहता हूँ कि ये कहाँ से आती हैं
क्या ये Docker registry जैसी किसी जगह से ली जाती हैं, built-in हैं, या smolfile से सीधे बनाई जाती हैं?
क्या Ubuntu images भी हैं?
अगर memory/CPU hot resize feature जुड़ जाए तो अच्छा होगा, और यह customer-by-customer backend infrastructure orchestration में भी काम आ सकता है
ज़्यादातर open source projects Docker Compose से containers उठाते हैं, लेकिन Smol Machines microVM के अंदर Docker support नहीं करता
और Vagrant जैसे nested VM भी support नहीं करता, यह थोड़ी कमी लगती है
इसके बदले trampoline approach से इसे Vagrant VM के sibling VM की तरह चलाने का सुझाव देता हूँ
क्या आप संक्षेप में बता सकते हैं कि Docker sandbox की जगह Smol Machines इस्तेमाल करने की मुख्य वजह क्या है?
यह सच में शानदार नतीजा है। बधाई