Repository navigation
Description
Parent: #1076. Phase: 5, NVXC v2, the docs and the release. Needs: #1083, #1085, #1088. Unblocks: inside phase 5, groups of #1090.
Goal. nvx-init, the CLI and the fake OpenVMM speak NVXC v2 (#821), which streams an exec's input and output, and v1 and FEATURES are deleted. V2 lives in NVXC's private modules and has no compatibility promise.
Today (dev e42b1795) and after:
| Area | Today | After |
|---|---|---|
| Exec streams | Stdin comes from /dev/null; stdout and stderr are collected in memory, and the guest kills the workload rather than forwarding a chunk that would take their total past 1 MiB. CANCEL works during an exec; STOP, a second EXEC and other requests get BUSY. |
Stdin streamed with an explicit end, under a 64 KiB window per exec that the guest acknowledges as it writes; stdout and stderr streamed with no total cap; CANCEL and STOP work during an exec; a second EXEC gets BUSY. |
| Other messages | PING and MAPS use v1's frames. The capture request and the activate exchange don't exist yet: #1084 adds them over v1. | They use v2's frames, with their payloads and order unchanged; the private restore driver returns a live v2 session. |
| Ready | FEATURES advertises the guest's capabilities. | Ready carries the protocol version, which the host checks; FEATURES and v1 are gone. |
Groups, in order. Each group issue lists its PRs, with their goals, contents, Needs and estimates.
| Group issue | Delivers | PRs | Needs |
|---|---|---|---|
| #1128 | NVXC v2 carries every control path, and streams execs | SL4.4a, SL4.4b, SL4.4c | #1111, #1116, #1127 |
| #1129 | NVXC v1 and FEATURES are gone (leaving code) | SL4.4d | #1128 |
Notes.
- EXEC's payload is unchanged: the arguments, the working directory, the environment and the timeout.
- The guest stops reading a child's pipes while its send queue is full, so a slow host slows the workload instead of losing output.
- The deletion is leaving code. Its group issue opens with the note, and has no size limit.
Tests. Codec tests of Ready's protocol version and of each v2 frame; the host accepts the current protocol version and refuses another. The guest loop: a second EXEC gets BUSY; CANCEL and STOP work during an exec; stdin ends explicitly, each acknowledgement follows the write into the child's pipe, and at most 64 KiB is outstanding; the child's pipes aren't read while the send queue is full. The host session and the CLI: send_stdin, close_stdin, stdout and stderr streamed past the old 1 MiB cap, STOP during an exec, sandbox exec, sandbox run, and Ctrl-C sending CANCEL. The fake OpenVMM serves the same v2 frames to the CLI's fake-backed tests. Capture and restore, through the private restore driver and the live session that it returns, work over v2 before v1 goes. After the last group, no v1, FEATURES or GuestFeatures code or caller remains.
Done when: every group issue is closed; every NVXC path of NVX's host, guest and fake OpenVMM uses v2; and v1's frames, FEATURES and GuestFeatures are gone.
Activity
nvxa library of mechanisms and value types #1076ppenna commentedon Nov 12, 2026
Completed on
feature/nvx-refactor. Both group issues are closed:v2 is NVXC's only version. The push CI run at
55f44aa4607, which contains all of them, passed: https://github.com/microsoft/nvx/actions/runs/43296907012