11 ポイント 投稿者 GN⁺ 2025-12-15 | 3件のコメント | WhatsAppで共有
  • uvm32は、マイクロコントローラなどのリソース制約環境向けのミニマルな仮想マシンサンドボックスで、単一のCファイルで構成され、動的メモリ割り当てなしで動作
  • RISC-Vエミュレータベースで、C・Zig・Rust・アセンブリで作成されたバイトコードアプリを実行し、非同期設計によりホスト停止を防止
  • 3KB以下のフラッシュ、1KB以下のRAMで動作可能で、安全性を優先し、不正なコードでもホストをクラッシュさせない
  • 多様なVMホストのサンプルと言語別サンプルアプリを提供し、組み込み・ゲーム・プラグインなどさまざまな環境に統合可能
  • MITライセンスで公開されており、研究、製品、組み込みデバイスで自由に活用可能

uvm32 概要

  • uvm32は依存関係のない軽量仮想マシンサンドボックスで、マイクロコントローラやリソース制約のあるデバイス向けに設計
    • 単一Cファイル構成、C99標準ベース、非同期設計動的メモリ不使用
    • STM32L0(ARM Cortex-M0+)基準で3KBフラッシュ / 1KB RAM以下で動作
  • RISC-Vエミュレータをベースとしており、管理インターフェースと効率的なコードビルドツールを含む

主な用途

  • Lua、Duktape、MicroPythonなどの組み込みスクリプトエンジンの代替
  • サンドボックス環境による信頼できないコードの隔離
  • Rust、Zigなどのモダンなシステム言語で開発できるよう支援
  • **「Write once, run anywhere」**の原則によりマルチプラットフォーム保守を最小化

主な特徴

  • C、Zig、Rust、アセンブリで書かれたバイトコードのサンプルを同梱
  • ノンブロッキング設計により異常なコードでもホストを停止させない
  • ホストI/Oを前提としない、シンプルで一貫した実行モデル
  • 安全な最小FFIを提供
  • 小規模スクリプトから複雑なアプリケーションまで実行可能
  • 安全性優先設計で、VM内部エラーがホストを損なわない
  • 完全なCPUエミュレータベースだが、ハードウェアシミュレーション目的ではない

代替手段との比較

  • 既存の組み込みスクリプトエンジンと比べて小さなメモリフットプリント
  • C、Rust、Zigなど広く使われる言語をサポート
  • 既存ソフトウェアとの統合が容易
  • イベント駆動・ポーリング・マルチプロセッサなど多様なパラダイムをサポート
  • 異常なVMコードに対する堅牢性を確保
  • 一方で、直接FFI呼び出し最大効率簡単なスクリプティング体験標準ライブラリ内蔵は目標としていない

ビルドと実行(Docker)

  • Cコンパイラだけでビルド可能で、Docker環境を提供
    • make dockerbuildmake dockershellコマンドで環境を構築
    • Dockerシェル内でmakeを実行後、
      ./hosts/host/host apps/helloworld/helloworld.binを実行可能
  • host -hコマンドで全オプションを確認可能

ライセンス

  • MIT Licenseを適用
  • 研究、製品、組み込みデバイスなどで自由に利用可能

3件のコメント

 
GN⁺ 2025-12-15
Hacker Newsのコメント
  • コードを見てみたが、本当にコンパクトな構造だった
    直接コンパイルや実行はしていないが、RISC-Vの32ビット整数・乗算・アトミック命令拡張を含んでいる
    浮動小数点演算はエミュレータではなく、コンパイラ(gcc など)がソフトウェア関数でエミュレーションする
    複数のコンパイラでサポートされる点は非常に賢い設計だと思う
    実際の命令セットを実装したベースプロジェクトは mini-rv32ima である

  • このプロジェクトは、WASMのように共通実行環境を作ろうとする試みと似た領域にあるように見える
    ただし、ベースがRISC-Vである点が異なる
    それぞれのアプローチの制約や利点をもっと知りたいが、いずれにせよアプリケーションが共通VM上で動作する未来に向かっているようだ
    現代のWebがその最も近い例だと思う

    • 以前、WASMとlibriscvを簡単に比較したことがあるが、ブラウザ互換性のためにWASMを選んだ
      libriscvもクールで印象的なプロジェクトだ
      ちなみに関連する議論へのリンクは こちら にある
    • GoogleオープンソースブログのWasefire記事を見ると、コードフットプリントはより小さく見える
      ただし、RISC-Vはこの用途には向いていないかもしれない
      たとえば即値のデコードをソフトウェアで処理すると遅いが、ハードウェアでは速い
      それでもRISC-Vは安定していてシンプルに構成できるターゲットだ
  • コードが本当にきれいで、単一のCファイル構成が気に入った
    サンプル実行のためにDockerを使う方式も、組み込み環境では非常に便利だ
    テストカバレッジも良さそうで、メトリクスを見るのも興味深そうだ
    医療機器にスクリプティング機能を追加する際、コアコードを毎回再検証しなくて済む利点がありそうだ
    WASM Micro Runtime のような組み込み向けWASMインタープリタと比較すると興味深い
    Cortex M4Fでは56.3Kとはるかに大きい
    おそらくWASMが最小RISC-Vプロファイルより複雑な命令セットだからだろう

  • 「Just add rats」として ZigDoomの例 を紹介している

  • タイミングが絶妙だ
    組み込みファームウェアテスト用の軽量エミュレータを探していたが、ほとんどの代替手段は重すぎるか不安定だった
    メモリマップドIOのシミュレーションに対応すれば、実機なしでIoTやマイクロコントローラのドライバテストに役立ちそうだ

    • これは簡単に実装できる
      エミュレータコアはすでにメモリマップドIOをサポートしているが、uvm32ではそれをホスト側の追加RAMブロック(フレームバッファや別ヒープなど)として使っているだけだ
      書き込みトラップは この部分、読み取りトラップは この部分 で処理できる
 
balthasar 2025-12-15

最後のフィッシング云々って、いったいどのコメントに出てきた話なのか分かりませんね

 
xguru 2025-12-15

そのコメントはスパムとしてフラグされて消えてしまい、返信コメントだけが残って不自然になったようです。削除しておきます。