Skip to content

nvx-rs slimming, phase 5.1: NVXC v2 replaces v1 #1089

Closed
2 of 2 issues completed
Closed

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

  1. ppenna commented on Nov 12, 2026

    @ppenna
    Contributor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions