Skip to content

doc: describe the Azure Linux guest in the design - #457

Merged
Pedro Henrique Penna (ppenna) merged 1 commit into
devfrom
doc-sync/azurelinux-guest-design
Oct 9, 2026
Merged

Pedro Henrique Penna (ppenna) merged 1 commit into
devfrom
doc-sync/azurelinux-guest-design

Conversation

@ppenna

Copy link
Copy Markdown
Contributor

Summary

The design goals said NVX boots "Alpine or Ubuntu userland", and the README quick start named only Ubuntu as an alternative guest. Azure Linux 3.0 is also an implemented guest: build-initramfs, build-guest, run, test-microvm, package, and download all support it, and CI boots it on every backend. The design had no chapter for it, while the Ubuntu guest has one.

This PR adds an Azure Linux guest support chapter beside the Ubuntu chapter, links it from the design index, and names Azure Linux in the goals and the README quick start.

Changes

Statement Evidence
doc/design/goals.md: the kernel boots Alpine, Ubuntu, or Azure Linux userland on Linux and Windows scripts/nvx_tools/guests.py (AZURELINUX_GUEST); python scripts/nvx.py build-guest --help (--guest {alpine,ubuntu,azurelinux,all}); .github/workflows/run-nvx-microvm-tests.yml runs Azure Linux smoke tests on Linux and Windows
README.md: --guest azurelinux selects Azure Linux userland after download .github/actions/package-release/action.yml packages releases with --binary-only; scripts/nvx_tools/release.py (_guest_release_inputs, _packaged_guest_artifact_names, _install_release_archive) includes and installs the Azure Linux files
doc/design.md: the index links the new chapter as item 8 and renumbers the rest —
New doc/guests/azurelinux-guest.md, Role: a workload guest, not sandbox control; no sandbox layer; run rejects --guest on restore docker/Dockerfile (no nvx-init-agent installed); guest/common/init ("selected guest cannot act as sandbox control"); scripts/nvx_tools/microvm_tests.py (SANDBOX_CONTROL_SCENARIOS, sandbox_control); scripts/nvx_tools/build.py (build_distro_layer accepts only Ubuntu); scripts/nvx.py (restore rejects a non-default guest)
Root filesystem builder: Docker-only; base image pinned by digest; supplemental RPMs from the lock with URL, SHA-256, and header checks; RPM signature check; BusyBox applet links; nobody home; database and cache removal; reproducible packing docker/Dockerfile (azurelinux-* stages); scripts/nvx_tools/azurelinux.py (load_package_lock, download_packages); scripts/nvx_tools/build_constants.py (AzureLinuxBuildConstants); scripts/nvx_tools/build.py (build_guest refuses --native); azurelinux/packages.lock.json
verify fails when SOURCE-MANIFEST.json disagrees with the Azure Linux pins scripts/nvx_tools/release.py (verify_source_tree → _validate_source_manifest_metadata, expected_azurelinux)
No automated determinism check for Azure Linux scripts/nvx_tools/build.py (verify_guest_determinism accepts only Ubuntu); .github/actions/build-guest-artifacts/action.yml runs only the Ubuntu determinism target
Azure Linux initramfs: common /init flow (time ABI step, nvx_exec, direct managed agent, identity check, boot marker, BusyBox shell); 512 MiB default guest/common/init; guest/common/nvx-managed-agent.c (- rootfs = direct); scripts/nvx_tools/guests.py (default_memory_mib=512); doc/run.md
Provenance: manifest fields, input-digest inputs, release-staging validation, binary-only packaging docker/Dockerfile (manifest generation); scripts/nvx_tools/azurelinux.py (input_files, input_sha256); scripts/nvx_tools/release.py (_validate_azurelinux_manifest); doc/distribution.md
Validation: CI scenarios on every backend; not in performance gates .github/workflows/run-nvx-microvm-tests.yml ("Run Azure Linux guest smoke tests" on Linux and Windows); .github/actions/build-guest-artifacts/action.yml (input-keyed cache); python scripts/nvx.py benchmark --help (no guest option)

To stay consistent with open PRs, the chapter links to the Ubuntu chapter's kernel-policy section instead of restating kernel options. It also says "static networking" without naming an IP version, because #455 is changing the kernel's IPv6 support. It does not edit any file that an open PR changes.

The design chapter is based on NVX build and guest sources. It makes no OpenVMM claims beyond linking to the existing cold-boot and machine-ABI chapters. Pinned OpenVMM: f4566bab0a30324de0a2ac292a65d0081ba319e0.

Follow-ups

  • scripts/setup/README.md is documentation outside doc/. Moving it requires updating links in doc/ci.md and doc/setup.md, which open PRs are changing.
  • Suspected CLI inconsistency (not changed here): verify-guest-determinism --help and build-distro-layer --help list alpine and azurelinux, but both commands reject every guest except ubuntu.
  • doc/design/validation.md and doc/ci.md describe the microVM tests as booting "the selected Alpine or Ubuntu initramfs". Both files are touched by open PRs, so I left them alone.
  • doc/openvmm-upstream-roadmap.md records fork tip 2728f33ea while the pin is now f4566bab0. It is a point-in-time PR strategy snapshot, so refreshing it is a separate task.

Validation

  • python -m unittest scripts.test_nvx_tools.CliTests scripts.test_performance.PerformanceTests: 110 tests, OK (1 skipped)
  • Throwaway link checker (outside the repo): every relative link and anchor resolves in the changed files and in the 16 files that link to them; each changed file has one H1 and balanced code fences; doc/design.md links every chapter in doc/design/ and doc/guests/. Result: OK
  • git diff --check: clean
  • python scripts/nvx.py verify: "source tree and submodule metadata are consistent"
  • Every changed path matches ^(doc/|.*\.md$)

The design goals named only Alpine and Ubuntu userland although Azure Linux
3.0 is an implemented guest that CI boots on every backend. Add a design
chapter for it beside the Ubuntu chapter, index it, and name it in the goals
and the README quick start.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 9, 2026 21:11
@ppenna Pedro Henrique Penna (ppenna) added the documentation Improvements or additions to documentation label Oct 9, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The documentation accurately reflects the implemented Azure Linux build, runtime, packaging, and CI behavior.

0 open findings

What changed in this PR

Documents Azure Linux 3.0 as a supported NVX workload guest alongside Alpine and Ubuntu.

Changes:

  • Adds an Azure Linux guest design chapter covering build, runtime, provenance, and validation.
  • Updates the design index and goals.
  • Adds Azure Linux guest selection to the README quick start.
File Description
README.md Documents --guest azurelinux.
doc/​guests/​azurelinux-guest.md Adds the Azure Linux guest architecture chapter.
doc/​design/​goals.md Names Azure Linux as supported userland.
doc/​design.md Links and indexes the new chapter.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ppenna
Pedro Henrique Penna (ppenna) merged commit d8dc69f into dev Oct 9, 2026
76 of 80 checks passed
@ppenna
Pedro Henrique Penna (ppenna) deleted the doc-sync/azurelinux-guest-design branch October 9, 2026 22:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants