我們會閱讀每一則回饋,並非常重視您的意見。

預設情況下,軟體以隔離方式運行。

您也可以從 GitHub Releases 下載,並放置於 ~/.local/share/ 目錄。

Windows 使用者請下載 windows-x86_64 版本(包含 krun.dll 與 libkrunfw.dll),解壓後執行 smolvm.exe。此版本需要啟用 Windows Hypervisor Platform (WHP) 功能。

沙盒執行不受信任的程式碼——在硬體隔離的虛擬機中執行不受信任的程式。主機的檔案系統、網路與憑證均由虛擬機監控器(hypervisor)隔離。

封裝成可攜帶的執行檔——將任何工作負載轉換為自包含的二進位檔。所有依賴皆已預先打包,無需安裝步驟或執行時下載,啟動時間低於 200 毫秒。

使用本地容器映像檔——適用於持續整合(CI)、隔離主機及快速迭代。可透過 --image 參數提供 docker save 或 podman save 產生的映像檔,或透過標準輸入管線傳入,亦可指定解壓後的 rootfs 目錄。映像檔處理由您的容器工具負責,smolvm 僅啟動結果。

持續存在的虛擬機供開發使用——可建立、停止及啟動。安裝的套件可在重啟後保留。

使用 git 與 SSH 時無需將私鑰複製到虛擬機中。可將主機的 SSH 代理轉發至虛擬機,來賓系統可在代理連線期間使用任何轉發的金鑰進行簽章,請僅對信任的工作負載轉發。此功能需主機上有運行中的 SSH 代理(可用 ssh-add -l 檢查)。

使用 Smolfile 宣告環境——以簡單的 TOML 檔案定義可重現的虛擬機配置。

每個工作負載皆在硬體虛擬化的虛擬機中執行,擁有獨立的來賓核心,支援 macOS 的 Hypervisor.framework、Linux 的 KVM 及 Windows 的 Windows Hypervisor Platform。libkrun 為虛擬機管理程式(VMM),libkrunfw 提供來賓核心。封裝成 .smolmachine 後,只要主機架構相符即可執行,且無任何依賴。

映像檔使用 OCI 格式——與 Docker 相同的開放標準。任何 Docker Hub、ghcr.io 或其他 OCI 註冊中心的映像檔皆可拉取並啟動為微型虛擬機,無需 Docker 守護程序。

預設配置為 4 個虛擬 CPU、8 GiB 記憶體。記憶體透過 virtio balloon 彈性調整,主機只會分配來賓實際使用的部分,並自動回收剩餘資源。虛擬 CPU 執行緒在閒置時會在虛擬機監控器中休眠,過度配置幾乎無成本。可透過 --cpus 與 --mem 參數覆寫。

smolvm 強化來賓與主機的邊界,為每個工作負載提供獨立的虛擬機與來賓核心。但它本身並非加強的多用戶控制平臺:

請將來賓系統中的 root 權限視為不受信任。虛擬機邊界限制其對主機的直接存取,而所有明確轉發的權限(包括掛載、網路存取、連接埠及 SSH 代理存取)均成為工作負載的權限範圍。

smolvm 透過 virtio-gpu / Venus(Vulkan-over-virtio)將主機 GPU 暴露給來賓。來賓工作負載可見到真實的 Vulkan 裝置;在 Linux + Intel 環境下呈現為:

macOS:smolvm 發行版內建 virglrenderer 與 MoltenVK,無需額外安裝。

Linux:需從系統套件管理器安裝 virglrenderer 與主機 Vulkan 驅動。

virglrenderer 依賴主機 GPU 驅動堆疊中的 libEGL 與 libdrm,這些為硬體特定,無法打包。任何具 GPU 功能的 Linux 主機通常已透過 GPU 驅動安裝。

來賓 Vulkan 載入器必須指向 virtio ICD。

可參考 examples/headless-browser/,該範例展示使用 ANGLE + Venus 在無頭虛擬機中硬體加速 WebGL 的 Chromium 設定。

--gpu 與 --cuda 提供不同介面。--gpu 透過 virtio-gpu / Venus 暴露 Vulkan,不提供 CUDA。--cuda 啟用 CUDA API 遠端呼叫:無驅動的來賓 shim 透過 vsock 將 CUDA 呼叫轉發給主機進程,由主機 NVIDIA 驅動執行。

CUDA 遠端呼叫需主機具備 NVIDIA GPU 與正常運作的 NVIDIA 驅動。此非 GPU 直通:來賓無法直接存取實體裝置或 NVIDIA 驅動。

虛擬機邊界仍隔離工作負載的 CPU、記憶體與檔案系統。GPU 存取由主機進程與共享 GPU 調解,GPU 隔離仍為進程層級,而非硬體或虛擬機邊界。請勿將 CUDA 遠端呼叫視為強化的多租戶 GPU 隔離邊界。

詳見 GPU 透過 API 遠端呼叫存取:無驅動微型虛擬機如何執行 CUDA 的設計、權衡與與直通比較。

Apache-2.0 授權 · 作者 @binsquare