uvm32 - C में लिखा अल्ट्रा-छोटा VM सैंडबॉक्स, Rust·C·Zig ऐप्स चलाने का समर्थन
(github.com/ringtailsoftware)- uvm32 सीमित संसाधन वाले वातावरण, जैसे माइक्रोकंट्रोलर, के लिए एक मिनिमल virtual machine sandbox है, जो एक ही C फ़ाइल से बना है और dynamic memory allocation के बिना चलता है
- यह RISC-V emulator पर आधारित है, C·Zig·Rust·assembly में लिखे bytecode ऐप्स चलाता है, और asynchronous डिज़ाइन के कारण host के रुकने से बचाता है
- यह 3KB से कम flash, 1KB से कम RAM पर चल सकता है, और सुरक्षा को प्राथमिकता देते हुए गलत कोड भी host को crash नहीं करता
- विभिन्न VM host examples और भाषा-विशिष्ट sample apps उपलब्ध कराता है, जिससे embedded·game·plugin जैसे कई वातावरणों में integration संभव है
- इसे MIT License के तहत जारी किया गया है, इसलिए research, products और embedded devices में स्वतंत्र रूप से उपयोग किया जा सकता है
uvm32 का परिचय
- uvm32 बिना dependencies वाला एक lightweight virtual machine sandbox है, जिसे माइक्रोकंट्रोलर और resource-constrained devices के लिए डिज़ाइन किया गया है
- single C file संरचना, C99 standard आधारित, asynchronous design, dynamic memory का उपयोग नहीं
- STM32L0 (ARM Cortex-M0+) पर 3KB flash / 1KB RAM से कम में चल सकता है
- यह RISC-V emulator पर आधारित है और management interface तथा efficient code build tools शामिल करता है
मुख्य उपयोग उद्देश्य
- Lua, Duktape, MicroPython जैसे embedded scripting engines का विकल्प
- sandbox environment के ज़रिए अविश्वसनीय कोड को isolate करना
- Rust, Zig जैसी modern systems languages में development का समर्थन
- “Write once, run anywhere” सिद्धांत के साथ multi-platform maintenance को न्यूनतम करना
मुख्य विशेषताएँ
- C, Zig, Rust, assembly में लिखे bytecode examples शामिल
- non-blocking design के कारण असामान्य कोड भी host को रोकता नहीं है
- host I/O की कोई अनिवार्य धारणा नहीं, सरल और consistent execution model
- सुरक्षित और minimal FFI उपलब्ध
- छोटे scripts से लेकर complex applications तक चलाने में सक्षम
- safety-first design, VM के अंदर की त्रुटियाँ host को नुकसान नहीं पहुँचातीं
- पूरा CPU emulator आधारित है, लेकिन hardware simulation इसका उद्देश्य नहीं है
विकल्पों से तुलना
- मौजूदा embedded scripting engines की तुलना में कम memory footprint
- C, Rust, Zig जैसी व्यापक रूप से उपयोग होने वाली भाषाओं का समर्थन
- मौजूदा software के साथ integration में आसानी
- event-driven·polling·multiprocessor जैसे विभिन्न paradigms का समर्थन
- असामान्य VM code के प्रति मजबूत स्थिरता
- वहीं, direct FFI calls, maximum efficiency, सरल scripting अनुभव, और standard library built-in इसका लक्ष्य नहीं हैं
build और run (Docker)
- सिर्फ C compiler से build संभव, Docker environment उपलब्ध
make dockerbuild,make dockershellकमांड से environment तैयार किया जा सकता है- Docker shell के अंदर
makeचलाने के बाद,
./hosts/host/host apps/helloworld/helloworld.binचलाया जा सकता है
host -hकमांड से सभी options देखे जा सकते हैं
लाइसेंस
- MIT License लागू
- research, products, embedded devices आदि में स्वतंत्र रूप से उपयोग किया जा सकता है
3 टिप्पणियां
Hacker News की राय
कोड देखा तो इसकी संरचना सच में काफ़ी कॉम्पैक्ट लगी
मैंने इसे खुद compile या run नहीं किया, लेकिन इसमें RISC-V 32-बिट integer, multiply और atomic instruction extensions शामिल हैं
floating-point operations को emulator नहीं, बल्कि compiler (
gccआदि) software functions के ज़रिये emulate करता हैकई compilers में support होना मुझे बहुत चतुर डिज़ाइन लगता है
असली instruction set को implement करने वाला आधार प्रोजेक्ट mini-rv32ima है
लगता है यह प्रोजेक्ट WASM की तरह एक common runtime environment बनाने की कोशिश वाले क्षेत्र में आता है
फ़र्क बस इतना है कि इसका आधार RISC-V है
मैं दोनों approaches की सीमाओं और फ़ायदों के बारे में और जानना चाहूँगा, लेकिन कुल मिलाकर ऐसा लगता है कि हम उस भविष्य की ओर बढ़ रहे हैं जहाँ applications एक common VM पर चलेंगी
आधुनिक web शायद उसका सबसे नज़दीकी उदाहरण है
libriscv भी एक शानदार और प्रभावशाली प्रोजेक्ट है
संदर्भ के लिए संबंधित चर्चा का लिंक यहाँ है
लेकिन RISC-V शायद इस तरह के उपयोग के लिए उपयुक्त न हो
उदाहरण के लिए, immediate value decoding को software में संभालना धीमा होता है, जबकि hardware में यह तेज़ होता है
फिर भी RISC-V एक स्थिर और सरल target है
कोड बहुत साफ़-सुथरा है और इसकी single C file structure पसंद आई
examples चलाने के लिए Docker का इस्तेमाल embedded environment में भी काफ़ी सुविधाजनक है
test coverage भी अच्छी लगती है, और metrics देखना दिलचस्प होगा
medical devices में scripting feature जोड़ते समय, शायद यह फ़ायदा हो कि core code को हर बार दोबारा verify न करना पड़े
इसे WASM Micro Runtime जैसे embedded WASM interpreter से compare करना दिलचस्प होगा
Cortex M4F के हिसाब से यह 56.3K के मुकाबले काफ़ी छोटा है
शायद इसकी वजह यह है कि WASM, न्यूनतम RISC-V profile की तुलना में ज़्यादा जटिल instruction set है
लेकिन WAMR में GC, JIT, WASI, threads, debugger support जैसे कई extensions शामिल हैं
“Just add rats” कहते हुए ZigDoom example का परिचय दिया गया
timing एकदम सही है
मैं embedded firmware testing के लिए एक lightweight emulator ढूँढ रहा था, लेकिन ज़्यादातर alternatives या तो बहुत भारी थे या अस्थिर
अगर यह memory-mapped IO simulation support करे, तो असली hardware के बिना IoT या microcontroller drivers को test करने में उपयोगी हो सकता है
emulator core पहले से memory-mapped IO को support करता है, लेकिन uvm32 इसे host के अतिरिक्त RAM blocks (framebuffer या अलग heap आदि) के लिए ही इस्तेमाल करता है
write trap को इस हिस्से में, और read trap को इस हिस्से में संभाला जा सकता है
आखिर में phishing वगैरह वाली बात आखिर किस comment में आई थी, मुझे तो समझ नहीं आ रहा है।
लगता है वह टिप्पणी स्पैम के रूप में flag हो गई और गायब हो गई, इसलिए केवल reply ही बचा रह गया और बात अजीब लग रही है। मैं इसे हटा देता हूँ।