DrumsBench

Experiments / EXP-017

Linux VM with N Xvfb displays on the same Mac (the comparison arm)

Run the same four tasks, eleven isolation tests, sampler and report inside one Ubuntu VM on the same Mac Studio, with one Xvfb display per environment, so the macOS row has a Linux row next to it with the asymmetries stated.

plannedWritten and reviewed as code or protocol, but not executed. No numbers.
Date
2026-10-25
Arms
linux-vm-xvfb-on-mac
Hardware
Mac Studio M4 Max, 16 cores, 48 GB (studio-a); guest: Ubuntu 24.04 arm64 under UTM, 14 vCPUs, 40 GB
OS
macOS 15.7.5 (24G624) host; Ubuntu 24.04 guest
Workload
the same four scripted oracle tasks on Chromium and LibreOffice Writer, one Xvfb display per environment
Code
exp1-sessions-per-studio at f0d01ce
Limitation
Nothing in baseline-linux has run on a real VM; the scripts were checked with bash -n and a dry run on a Mac, and the date is the date of the record.

In one paragraph

The macOS arm has a Linux twin so that the same number exists on an operating system without macOS's VM cap and license questions. One Ubuntu 24.04 server VM runs under UTM on the same Mac Studio; inside it each environment is a Linux user on its own Xvfb display with the Python envd, envd-linux, serving the same HTTP API on the same port scheme. The same tasks, isolation tests, sampler, gates, sweep, soak and report run inside the guest with OS=linux PY=python3. The arm exists in the repository as scripts and a build note. None of it has run on a real VM. The scripts pass bash -n and a dry run on a Mac, and that is the whole of the evidence.

Setup

Design values from baseline-linux/make_vm.md:

What ran

Nothing on a real VM. The build note says so in its own words: "Nothing in this folder has been run on a real VM yet. The scripts were checked with bash -n and a dry run (DRUMS_DRY_RUN=1) on a Mac." The one skipped test in the Python suite (EXP-001) is envd-linux's real X round trip, which needs a display the test machines did not have.

Results

None. When the arm runs, its row will carry the same columns as the macOS row: N_max, valid rollouts per host-hour at N_max, USD per valid rollout at the three prices, contamination next to a positive control that fired (the Linux positive control runs both sides on env01's envd-linux on one display), plus the Chromium source and version recorded in meta.json and the host's memory pressure and swap growth during the Linux windows.

Failures and surprises

None yet.

Limitations

Asymmetries that will be disclosed next to any Linux number:

Reproduce

  1. On the Mac: make baseline-linux prints the guest steps. Build the VM as baseline-linux/make_vm.md describes; copy the repository with its .git folder into the guest so make meta records the commit.
  2. In the guest, with OS=linux PY=python3 and RUN exported in both guest shells: setup_guest.sh; make meta; make baseline-sample LAST=48 before start_displays.sh; make verify-server in the second shell.
  3. Gate 7: make gate2 COORDS=results/linux-coords.yaml GATE_TASKS="writer_save browser_form clipboard_cross visibility", then make positive-control COORDS=results/linux-coords.yaml.
  4. make sweep NS=1,4,8,16,24,32,48 COORDS=results/linux-coords.yaml LAST=48; make soak N=<N_max> ...; make report; stop_displays.sh.
  5. Meanwhile on the Mac: make baseline-sample OS=mac RUN=results/<date>-<host>-linux-host SECONDS=<length of the sweep and soak>.
  6. Copy the guest's run folder to the host and run make results RUNS="results/<mac run> results/<linux run>" LINUX_HOST=results/<date>-<host>-linux-host.

Sources