uvm32 - Sandbox VM ultra-kecil yang ditulis dalam C, mendukung eksekusi aplikasi Rust, C, dan Zig
(github.com/ringtailsoftware)- uvm32 adalah sandbox mesin virtual minimalis untuk lingkungan dengan sumber daya terbatas seperti mikrokontroler, terdiri dari satu berkas C dan berjalan tanpa alokasi memori dinamis
- Berbasis emulator RISC-V, menjalankan aplikasi bytecode yang ditulis dalam C, Zig, Rust, dan assembly, dengan desain asinkron untuk mencegah host terhenti
- Dapat berjalan dengan flash di bawah 3KB dan RAM di bawah 1KB, dengan prioritas pada keamanan sehingga kode yang salah tidak membuat host crash
- Menyediakan berbagai contoh host VM dan aplikasi sampel per bahasa, sehingga bisa diintegrasikan ke berbagai lingkungan seperti embedded, game, dan plugin
- Dirilis dengan lisensi MIT, sehingga bebas digunakan untuk riset, produk, dan perangkat embedded
Ikhtisar uvm32
- uvm32 adalah sandbox mesin virtual ringan tanpa dependensi, dirancang untuk mikrokontroler dan perangkat dengan keterbatasan sumber daya
- Struktur satu berkas C, berbasis standar C99, desain asinkron, tanpa penggunaan memori dinamis
- Pada STM32L0 (ARM Cortex-M0+), dapat berjalan dengan kurang dari 3KB flash / 1KB RAM
- Dibangun di atas emulator RISC-V dan mencakup antarmuka manajemen serta alat build kode yang efisien
Tujuan penggunaan utama
- Pengganti engine scripting embedded seperti Lua, Duktape, MicroPython
- Isolasi kode yang tidak tepercaya melalui lingkungan sandbox
- Mendukung pengembangan dengan bahasa sistem modern seperti Rust dan Zig
- Meminimalkan pemeliharaan multi-platform dengan prinsip “Write once, run anywhere”
Fitur utama
- Menyertakan contoh bytecode yang ditulis dalam C, Zig, Rust, assembly
- Desain non-blocking sehingga kode yang bermasalah tidak menghentikan host
- Tidak mengasumsikan I/O host, model eksekusi yang sederhana dan konsisten
- Menyediakan FFI minimal yang aman
- Dapat menjalankan mulai dari skrip kecil hingga aplikasi kompleks
- Desain yang mengutamakan keamanan, error internal VM tidak merusak host
- Berbasis emulator CPU penuh, tetapi bukan untuk tujuan simulasi hardware
Perbandingan dengan alternatif
- Jejak memori lebih kecil dibanding engine scripting embedded yang ada
- Mendukung bahasa yang banyak digunakan seperti C, Rust, Zig
- Mudah diintegrasikan dengan perangkat lunak yang sudah ada
- Mendukung berbagai paradigma seperti event-driven, polling, multiprosesor
- Memiliki ketahanan terhadap kode VM yang bermasalah
- Namun, pemanggilan FFI langsung, efisiensi maksimum, pengalaman scripting sederhana, dan library standar bawaan bukanlah targetnya
Build dan menjalankan (Docker)
- Dapat di-build hanya dengan kompiler C, dengan lingkungan Docker yang disediakan
- Siapkan lingkungan dengan perintah
make dockerbuild,make dockershell - Setelah menjalankan
makedi dalam shell Docker,
./hosts/host/host apps/helloworld/helloworld.bindapat dijalankan
- Siapkan lingkungan dengan perintah
- Opsi lengkap dapat dilihat dengan perintah
host -h
Lisensi
- Menggunakan MIT License
- Bebas digunakan untuk riset, produk, perangkat embedded, dan lainnya
3 komentar
Komentar Hacker News
Setelah melihat kodenya, strukturnya benar-benar kompak
Saya belum mencoba mengompilasi atau menjalankannya sendiri, tetapi ini mencakup ekstensi instruksi integer, perkalian, dan atomik RISC-V 32-bit
Operasi floating-point tidak diemulasikan oleh emulator, melainkan oleh compiler (seperti gcc) melalui fungsi perangkat lunak
Menurut saya, dukungan di berbagai compiler adalah desain yang cerdas
Proyek dasar yang mengimplementasikan set instruksi sebenarnya adalah mini-rv32ima
Proyek ini tampaknya berada di ranah yang mirip dengan upaya membuat lingkungan eksekusi bersama seperti WASM
Bedanya, fondasinya adalah RISC-V
Saya ingin tahu lebih banyak soal keterbatasan atau kelebihan masing-masing pendekatan, tetapi bagaimanapun juga rasanya kita sedang menuju masa depan di mana aplikasi berjalan di atas VM bersama
Menurut saya, web modern adalah contoh yang paling mendekatinya
libriscv juga proyek yang keren dan mengesankan
Sebagai referensi, tautan diskusi terkait ada di sini
Namun, RISC-V mungkin tidak terlalu cocok untuk penggunaan seperti ini
Misalnya, dekode immediate value yang ditangani lewat perangkat lunak akan lambat, walau di perangkat keras cepat
Meski begitu, RISC-V tetap target yang stabil dan bisa disusun secara sederhana
Kodenya benar-benar rapi dan saya suka struktur file C tunggal-nya
Cara menggunakan Docker untuk menjalankan contoh juga sangat praktis di lingkungan embedded
Cakupan pengujiannya juga terlihat bagus, dan metriknya tampaknya menarik untuk dilihat
Saat menambahkan fitur scripting ke perangkat medis, ini tampaknya memberi keuntungan karena kode inti tidak perlu divalidasi ulang setiap kali
Menarik jika dibandingkan dengan interpreter WASM untuk embedded seperti WASM Micro Runtime
Di Cortex M4F, ukurannya jauh lebih besar yaitu 56.3K
Mungkin karena WASM adalah kumpulan instruksi yang lebih kompleks dibanding profil minimum RISC-V
Namun, WAMR mencakup berbagai ekstensi seperti dukungan GC, JIT, WASI, thread, dan debugger
Memperkenalkan contoh ZigDoom dengan kalimat “Just add rats”
Waktunya pas sekali
Saya sedang mencari emulator ringan untuk pengujian firmware embedded, tetapi sebagian besar alternatif terlalu berat atau tidak stabil
Jika mendukung simulasi IO yang dipetakan ke memori, ini tampaknya akan berguna untuk menguji driver IoT atau mikrokontroler tanpa perangkat keras nyata
Inti emulator sudah mendukung IO yang dipetakan ke memori, tetapi uvm32 hanya memakainya sebagai blok RAM tambahan di host (seperti framebuffer atau heap terpisah)
Write trap bisa ditangani di bagian ini, dan read trap di bagian ini
Saya juga tidak tahu dari komentar yang mana omong-omong soal phishing itu muncul di bagian akhir.
Komentar itu ditandai sebagai spam lalu menghilang, jadi sepertinya hanya balasannya yang tersisa dan jadi terlihat aneh. Akan saya hapus.