microVM: remove the runtime and custom sandbox block roles
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 30/100
- Issue type
- Refactor
- Clarity
- Mostly clear
- Activity status
- Active
- Domain
- documentation, infrastructure
Research direction
Start with MicrovmSandboxBlockRole in openvmm/openvmm_defs/src/microvm.rs and follow it into openvmm_entry/src/cli_args/microvm.rs and the snapshot code in openvmm_helpers/src/snapshot/microvm.rs. On the NVX side, read scripts/nvx_tools/sandbox.py (LAYER_ROLES) and the sandbox-blocks scenario. Done means only distro and scratch remain, the freed slots and status words are absent, and the unit tests in scripts/test_nvx_tools.py pass. The open image-model decision needs a maintainer answer before the converter code is touched.
Written by the indexing model from the issue text.
Description
Summary
The microVM defines four sandbox block roles: distro, runtime, custom, and scratch. Nothing produces or attaches a runtime or custom layer. Remove both roles, so sandbox storage has a read-only distro layer and writable scratch.
Why
- No producer.
build-distro-layerbuilds only the Ubuntudistrolayer, and the converter that would split images intodistro,runtime, andcustomis still proposed ("Image conversion" indoc/design/remaining-production-work.md). - No consumer. CI, the sandbox lifecycle and managed-exec tests, the snapshot scenarios, and every documentation example attach only
distroandscratch.nvx-rsandaci_edge_sandboxesattach no sandbox blocks; they use the blockless managed root. - No end-to-end coverage. Outside unit tests, only the
sandbox-blocksscenario attaches the two roles, as zero-filled raw images; it checks discovery tokens and read-only flags without mounting anything. No test mounts more than one EROFS lower layer, or captures and restores a snapshot with more than one. - Unused ABI surface. The roles cost two virtio-mmio slots, two IRQs, and two shared-status words, plus the matching paths in the snapshot contract and the guest agent.
Where the roles live
OpenVMM (openvmm/ submodule; paths relative to it):
openvmm/openvmm_defs/src/microvm.rs:MicrovmSandboxBlockRole::{Runtime, Custom}, the slots at0xd0004000(IRQ 12) and0xd0005000(IRQ 9), shared-status offsets0x10and0x14,validate_microvm_sandbox_blocks("at most three read-only layers"), and tests.openvmm/openvmm_entry/src/cli_args/microvm.rs:--microvm-sandbox-blockrole parsing and the four-block limit.openvmm/openvmm_helpers/src/snapshot/microvm.rsandopenvmm/openvmm_entry/src/vm_controller/microvm.rs: manifest role names and the "one to three layers and scratch" capture rule.Guide/src/user_guide/openvmm/run.mdandGuide/src/reference/openvmm/management/cli.md.
NVX:
guest/common/nvx-init-agent: theruntimeandcustommounts, the three-layer limit, and thelowerdirstacking.scripts/nvx_tools/sandbox.py:LAYER_ROLESand the role addresses.scripts/nvx_tools/microvm_tests.pyandscripts/nvx_tools/microvm_test_scripts/sandbox-blocks.sh: thesandbox-blocksscenario.scripts/test_nvx_tools.py:test_launch_contract_orders_roles_and_builds_agent_command_line.doc/usage.md,doc/run.md, anddoc/design/(machine-and-device-abi.md,sandbox-filesystem-and-agent-architecture.md,configuration-boundary.md,remaining-production-work.md).
Decisions
- Address layout. Keep
scratch(0xd0006000, IRQ 11, status word0x30018) and the control console where they are, and leave the freed windows, IRQs 9 and 12, and status words0x30010and0x30014unused. Fixed placement means an omitted device never shifts another; compacting would movescratchand the control console and change every machine contract. The architecture guide in #529 documents this layout. - Existing snapshots. Restore maps manifest role names to the enum, so a snapshot that records
runtimeorcustomwould fail with the existing unsupported-role error. Confirm that no retained snapshot or template uses these roles. - Image model.
doc/design/sandbox-filesystem-and-agent-architecture.mdproposes splitting curated images intodistro,runtime, andcustomfor cache reuse. Decide whether the converter flattens each image into onedistrolayer, or whether layering returns together with the converter.
Tasks
- OpenVMM: remove the
RuntimeandCustomroles, slots, IRQs, and status words from the CLI, the machine contract, snapshot capture and restore, and the tests; update the Guide. - NVX: promote the OpenVMM pin.
- Guest agent: accept only the
distrolayer and drop thelowerdirstacking. -
nvx.py sandbox: accept only--layer distro,.... - Tests: attach only
distroandscratchinsandbox-blocks, check that the freed slots are absent, and update the unit tests. - Docs: update
doc/usage.md,doc/run.md, anddoc/design/. The architecture guide indoc/design-doc/(#529) already describes onlydistroandscratch.
- Dominant language
- Python
- Stars
- 380
- Forks
- 24
- Avg merge
- 12h 3m
- Merged PRs (30d)
- 292
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from microsoft/nvx
-
bug-hunt confirmed
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
documentation
Difficulty 5/5 Over a week Newbie friendliness 8/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 15/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 22/100
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 18/100
Maintainers usually reply within 1 day
Similar issues
-
`burr` fails to start when the Python path has a space in itPossibly taken @enekoreto claimed this today. Openstatus/needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 5 days
-
gemini 出现了新的域名需要加入Open
Difficulty 1/5 Under an hour Newbie friendliness 72/100
-
Difficulty 2/5 Half a day Newbie friendliness 72/100
debpalash/VoiceStudio#2903 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
dagster-io/community-integrations#367 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
aws-samples/sample-per-model-bedrock#243 ·
Maintainers usually reply within 1 day