@machinen/runtime 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/API.md CHANGED
@@ -35,6 +35,7 @@
35
35
  - [`SnapshotOptions`](#snapshotoptions)
36
36
  - [`SnapshotResult`](#snapshotresult)
37
37
  - [`SnapshotMeta`](#snapshotmeta)
38
+ - [`SnapshotEngine`](#snapshotengine)
38
39
  - [`bootSnapshotPath`](#bootsnapshotpath)
39
40
  - [`writeBootSnapshot`](#writebootsnapshot)
40
41
  - [`detachedLogRoot`](#detachedlogroot)
@@ -1448,10 +1449,17 @@ Called with each stderr chunk as it arrives (pass-through tee).
1448
1449
 
1449
1450
  > **stdout**: `string`
1450
1451
 
1452
+ Concatenated stdout bytes, decoded as UTF-8. Always `""` when the
1453
+ caller passed `onStdout` — streaming callers already have the
1454
+ bytes and a parallel buffered copy would defeat the streaming
1455
+ (and at multi-GB volumes would crash with ERR_STRING_TOO_LONG).
1456
+
1451
1457
  ##### stderr
1452
1458
 
1453
1459
  > **stderr**: `string`
1454
1460
 
1461
+ Same shape as `stdout` for the stderr channel + `onStderr`.
1462
+
1455
1463
  ***
1456
1464
 
1457
1465
  ### VsockExecPtyOptions
@@ -1771,14 +1779,6 @@ fnmatch patterns matched against each rootfs-relative path.
1771
1779
 
1772
1780
  Optional path to the compiled /init. Default: ../microvm/test-fixtures/init relative to this file.
1773
1781
 
1774
- ##### fuseAgentPath?
1775
-
1776
- > `optional` **fuseAgentPath?**: `string`
1777
-
1778
- Optional host path to the compiled fuse-agent binary. When set,
1779
- the binary is injected at `/fuse-agent` (mode 0755) inside the
1780
- initramfs so /init can fork it per live-share mount. See #78.
1781
-
1782
1782
  ##### execAgentPath?
1783
1783
 
1784
1784
  > `optional` **execAgentPath?**: `string`
@@ -1827,12 +1827,6 @@ not in the cpio. Must be an absolute path under `/mnt/`.
1827
1827
 
1828
1828
  Optional override for the compiled /init. Default: ../microvm/test-fixtures/init relative to this file.
1829
1829
 
1830
- ##### fuseAgentPath?
1831
-
1832
- > `optional` **fuseAgentPath?**: `string`
1833
-
1834
- Optional path to the compiled fuse-agent; staged at /fuse-agent when set.
1835
-
1836
1830
  ***
1837
1831
 
1838
1832
  ### PackRootfsOptions
@@ -2173,7 +2167,7 @@ overriding on key collision.
2173
2167
  > `optional` **binary?**: `string`
2174
2168
 
2175
2169
  Optional VMM binary path. Same lookup rules as `boot()` — if
2176
- omitted, resolves `@machinen/vmm-<arch>-<os>`.
2170
+ omitted, resolves `@machinen/native-<arch>-<os>`.
2177
2171
 
2178
2172
  ##### cwd?
2179
2173
 
@@ -2414,6 +2408,16 @@ Host-side path of the scratch disk attached to the guest. Used by
2414
2408
  `attach().snapshot()` so an attach-owned handle can find the
2415
2409
  guest-side scratch disk that backs the in-VM dump.
2416
2410
 
2411
+ ##### vmstatePath?
2412
+
2413
+ > `optional` **vmstatePath?**: `string`
2414
+
2415
+ Vmstate engine only: absolute path the VMM writes its `.vmstate`
2416
+ whole-VM state file to (the `MACHINEN_SNAPSHOT_PATH` it booted
2417
+ with). Persisted so an attach-owned `vm.snapshot()` / `vm.fork()`
2418
+ can SIGUSR1 the VMM and pick the state file up. Undefined for VMs
2419
+ booted without the vmstate engine.
2420
+
2417
2421
  ##### forkedFrom?
2418
2422
 
2419
2423
  > `optional` **forkedFrom?**: `string`
@@ -2525,16 +2529,6 @@ the VM was restored. Set on restore-derived entries, undefined
2525
2529
  for plain boots and eager restores. Surfaced via
2526
2530
  `vm.memoryStats().lazyPagesPending`.
2527
2531
 
2528
- ##### lazyPagesMountRoot?
2529
-
2530
- > `optional` **lazyPagesMountRoot?**: `string`
2531
-
2532
- Absolute path under which the lazy-restore FUSE mount serves
2533
- `pages-*.img` reads. The mount-server tracks bytes served below
2534
- this prefix; `vm.memoryStats()` divides that by 4096 and
2535
- subtracts from `lazyPagesTotal` to derive `lazyPagesPending`.
2536
- Undefined when the VM wasn't lazy-restored.
2537
-
2538
2532
  ##### mountDisk?
2539
2533
 
2540
2534
  > `optional` **mountDisk?**: `object`
@@ -2564,15 +2558,13 @@ silently boots without the overlay.
2564
2558
 
2565
2559
  > `optional` **liveMounts?**: `object`[]
2566
2560
 
2567
- #273: live-share FUSE mounts (`liveMounts: [...]` at boot) the
2568
- VM was started with. Persisted so an attach-owned `vm.snapshot()`
2569
- / `vm.fork()` can record the same `meta.liveMounts` block in the
2570
- bundle and trigger /sbin/machinen-remount post-dump on
2571
- leaveRunning paths. Host UDS paths and vsock ports are NOT
2572
- recorded those are the boot process's private state and aren't
2573
- useful to other processes (the owning process keeps the servers
2574
- listening through the dump, so attach reconnects without having
2575
- to bind anything).
2561
+ #273: live-share mounts (`liveMounts: [...]` at boot) the VM was
2562
+ started with. Persisted so an attach-owned `vm.snapshot()` /
2563
+ `vm.fork()` can record the same `meta.liveMounts` block in the
2564
+ bundle. Since #332 every live mount is served by an in-VMM
2565
+ virtio-fs device there's no host-side process to record, reap,
2566
+ or reconnect to. The per-mount virtio-fs tag isn't recorded
2567
+ either; it's re-derived from the resolved order on restore.
2576
2568
 
2577
2569
  ###### guest
2578
2570
 
@@ -2586,27 +2578,6 @@ to bind anything).
2586
2578
 
2587
2579
  > **mode**: `"ro"` \| `"rw"`
2588
2580
 
2589
- ##### liveMountServers?
2590
-
2591
- > `optional` **liveMountServers?**: `object`[]
2592
-
2593
- #150 phase 3: pids + exes of the detached mount-server helpers
2594
- spawned alongside this VMM, one per live-mount. The helpers die
2595
- with the VMM via `pdeathsig --watch-pid` already, but `machinen
2596
- stop` SIGTERMs them up-front so the VMM exit hook doesn't race
2597
- with the helper's own pdeathsig-driven shutdown, and `machinen
2598
- gc` validates pid+exe to detect recycled pids the same way the
2599
- VMM and gvproxy entries do. Empty / undefined for VMs booted
2600
- without `liveMounts`.
2601
-
2602
- ###### pid
2603
-
2604
- > **pid**: `number`
2605
-
2606
- ###### exe
2607
-
2608
- > **exe**: `string`
2609
-
2610
2581
  ##### startedAt
2611
2582
 
2612
2583
  > **startedAt**: `number`
@@ -3186,17 +3157,31 @@ Default: false (preserve TCP — current snapshot/restore behavior).
3186
3157
 
3187
3158
  #### Properties
3188
3159
 
3160
+ ##### engine
3161
+
3162
+ > **engine**: [`SnapshotEngine`](#snapshotengine)
3163
+
3164
+ Which backend produced the bundle.
3165
+
3189
3166
  ##### snapDir
3190
3167
 
3191
3168
  > **snapDir**: `string`
3192
3169
 
3193
3170
  Absolute path to the snapshot bundle directory.
3194
3171
 
3195
- ##### imgDir
3172
+ ##### imgDir?
3196
3173
 
3197
- > **imgDir**: `string`
3174
+ > `optional` **imgDir?**: `string`
3198
3175
 
3199
3176
  Absolute path to the CRIU image directory inside the bundle.
3177
+ Set by the criu engine only; undefined for vmstate bundles.
3178
+
3179
+ ##### vmstatePath?
3180
+
3181
+ > `optional` **vmstatePath?**: `string`
3182
+
3183
+ Absolute path to the `.vmstate` whole-VM state file inside the
3184
+ bundle. Set by the vmstate engine only; undefined for criu bundles.
3200
3185
 
3201
3186
  ##### elapsedMs
3202
3187
 
@@ -3219,6 +3204,16 @@ to reconstruct the source VM's name when registering the fork.
3219
3204
 
3220
3205
  #### Properties
3221
3206
 
3207
+ ##### engine?
3208
+
3209
+ > `optional` **engine?**: [`SnapshotEngine`](#snapshotengine)
3210
+
3211
+ Which backend wrote this bundle — `"criu"` (process-tree images
3212
+ under `img/`) or `"vmstate"` (whole-VM `state.vmstate`). `restore()`
3213
+ also auto-detects from the bundle's contents; this field is the
3214
+ explicit record. Absent on bundles predating the vmstate engine
3215
+ (treated as `"criu"`).
3216
+
3222
3217
  ##### sourceName?
3223
3218
 
3224
3219
  > `optional` **sourceName?**: `string`
@@ -3270,20 +3265,20 @@ consulting the host source dir.
3270
3265
 
3271
3266
  > `optional` **liveMounts?**: `object`[]
3272
3267
 
3273
- #273: live-share FUSE mounts (`liveMounts: [...]` at boot) the
3274
- source VM had at snapshot time. Unlike `mountDisk`, no bytes are
3275
- captured — `host` is the path on the host that was being live-
3276
- shared, recorded so `restore()` can re-establish the same window
3277
- on the restoring host. Each entry is the resolved config from the
3268
+ #273: live-share mounts (`liveMounts: [...]` at boot) the source
3269
+ VM had at snapshot time. Unlike `mountDisk`, no bytes are captured
3270
+ — `host` is the path on the host that was being live-shared,
3271
+ recorded so `restore()` can re-establish the same window on the
3272
+ restoring host. Each entry is the resolved config from the
3278
3273
  source's `resolveLiveMounts()`:
3279
- - `guest`: absolute guest path the FUSE mount lands at.
3274
+ - `guest`: absolute guest path the mount lands at.
3280
3275
  - `host`: absolute host path that was being shared.
3281
3276
  - `mode`: `"ro"` or `"rw"`, the share's write semantics.
3282
3277
 
3283
3278
  Restore policy: the bundle's recorded mounts are re-established
3284
3279
  verbatim by default. Pass `restore({ liveMounts })` to override
3285
- per-guest `host`/`mode` — each override entry's `guest` must
3286
- match a recorded entry, else BOOT_LIVE_MOUNT_OVERRIDE_UNKNOWN.
3280
+ per-guest `host`/`mode` — each override entry's `guest` must match
3281
+ a recorded entry, else BOOT_LIVE_MOUNT_OVERRIDE_UNKNOWN.
3287
3282
  Cross-host bundles where a recorded `host` doesn't exist on the
3288
3283
  restoring host fail loudly via the boot-time existence check —
3289
3284
  users remap with the override knob.
@@ -3595,34 +3590,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
3595
3590
 
3596
3591
  > `optional` **liveMounts?**: `object`[]
3597
3592
 
3598
- Host directories exposed to the guest as live-share FUSE mounts
3599
- (#78). Unlike `mount` (copy-once into the boot rootfs), these stay
3600
- connected to the host: the guest reads on demand via a vsock FUSE
3601
- relay, and nothing is copied at boot. `mode` defaults to `"rw"` —
3602
- guest writes land on the host (#151, #156). Set `"ro"` for a
3603
- one-way share (host caches, untrusted guests).
3593
+ Host directories exposed to the guest as live-share mounts (#78,
3594
+ #332). Unlike `mount` (copy-once into the boot rootfs), these stay
3595
+ connected to the host: the guest reads on demand and nothing is
3596
+ copied at boot. `mode` defaults to `"rw"` — guest writes land on
3597
+ the host (#151, #156). Set `"ro"` for a one-way share (host
3598
+ caches, untrusted guests).
3604
3599
 
3605
3600
  Each guest path must live under `/mnt/` (same rule as `mount`).
3606
- Repeatable; each entry gets its own vsock port.
3601
+ Repeatable up to 4 entries per VM — each is served by its own
3602
+ in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
3603
+ FUSE opcode handlers run inside the VMM and the guest mounts each
3604
+ share directly with `mount -t virtiofs` — no agent process, no
3605
+ vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
3606
+ machinen-built kernel has it. (The older FUSE-over-vsock transport
3607
+ and its `protocol` knob were removed in #338.)
3607
3608
 
3608
3609
  Snapshot / restore / fork (#273): liveMount has no guest-side
3609
3610
  state worth checkpointing — reads come from the host on demand,
3610
- writes (in `"rw"`) land on the host immediately. The runtime
3611
- unmounts each mount before CRIU dumps, then re-establishes a
3612
- fresh window on the other side: for `vm.snapshot({ leaveRunning:
3613
- true })` and `vm.fork()` the source's workload sees `/mnt/<guest>/`
3614
- disappear for the dump duration (typically seconds, scales with
3615
- memory size) before reappearing under fresh server state. Open
3616
- fds across that window see EBADF on next syscall — same shape
3617
- as "don't snapshot during a database write." Workloads that
3618
- quiesce before snapshot are unaffected.
3611
+ writes (in `"rw"`) land on the host immediately. The in-VMM
3612
+ virtio-fs device persists across the CRIU dump, so the workload's
3613
+ view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
3614
+ true })` and `vm.fork()` without an unmount/remount window.
3619
3615
 
3620
3616
  Concurrent writes from multiple forks against the same host
3621
3617
  directory are no different from any other shared filesystem —
3622
- the runtime re-establishes the window per-VM but doesn't
3623
- coordinate writes between siblings. If two forks need
3624
- non-overlapping write surfaces, point each at a distinct
3625
- `host` path or use `mount` (copy-once, per-VM upper).
3618
+ each VM gets its own device but the runtime doesn't coordinate
3619
+ writes between siblings. If two forks need non-overlapping write
3620
+ surfaces, point each at a distinct `host` path or use `mount`
3621
+ (copy-once, per-VM upper).
3626
3622
 
3627
3623
  Restore on a host where the recorded `host` path doesn't exist:
3628
3624
  fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
@@ -4006,34 +4002,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
4006
4002
 
4007
4003
  > `optional` **liveMounts?**: `object`[]
4008
4004
 
4009
- Host directories exposed to the guest as live-share FUSE mounts
4010
- (#78). Unlike `mount` (copy-once into the boot rootfs), these stay
4011
- connected to the host: the guest reads on demand via a vsock FUSE
4012
- relay, and nothing is copied at boot. `mode` defaults to `"rw"` —
4013
- guest writes land on the host (#151, #156). Set `"ro"` for a
4014
- one-way share (host caches, untrusted guests).
4005
+ Host directories exposed to the guest as live-share mounts (#78,
4006
+ #332). Unlike `mount` (copy-once into the boot rootfs), these stay
4007
+ connected to the host: the guest reads on demand and nothing is
4008
+ copied at boot. `mode` defaults to `"rw"` — guest writes land on
4009
+ the host (#151, #156). Set `"ro"` for a one-way share (host
4010
+ caches, untrusted guests).
4015
4011
 
4016
4012
  Each guest path must live under `/mnt/` (same rule as `mount`).
4017
- Repeatable; each entry gets its own vsock port.
4013
+ Repeatable up to 4 entries per VM — each is served by its own
4014
+ in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
4015
+ FUSE opcode handlers run inside the VMM and the guest mounts each
4016
+ share directly with `mount -t virtiofs` — no agent process, no
4017
+ vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
4018
+ machinen-built kernel has it. (The older FUSE-over-vsock transport
4019
+ and its `protocol` knob were removed in #338.)
4018
4020
 
4019
4021
  Snapshot / restore / fork (#273): liveMount has no guest-side
4020
4022
  state worth checkpointing — reads come from the host on demand,
4021
- writes (in `"rw"`) land on the host immediately. The runtime
4022
- unmounts each mount before CRIU dumps, then re-establishes a
4023
- fresh window on the other side: for `vm.snapshot({ leaveRunning:
4024
- true })` and `vm.fork()` the source's workload sees `/mnt/<guest>/`
4025
- disappear for the dump duration (typically seconds, scales with
4026
- memory size) before reappearing under fresh server state. Open
4027
- fds across that window see EBADF on next syscall — same shape
4028
- as "don't snapshot during a database write." Workloads that
4029
- quiesce before snapshot are unaffected.
4023
+ writes (in `"rw"`) land on the host immediately. The in-VMM
4024
+ virtio-fs device persists across the CRIU dump, so the workload's
4025
+ view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
4026
+ true })` and `vm.fork()` without an unmount/remount window.
4030
4027
 
4031
4028
  Concurrent writes from multiple forks against the same host
4032
4029
  directory are no different from any other shared filesystem —
4033
- the runtime re-establishes the window per-VM but doesn't
4034
- coordinate writes between siblings. If two forks need
4035
- non-overlapping write surfaces, point each at a distinct
4036
- `host` path or use `mount` (copy-once, per-VM upper).
4030
+ each VM gets its own device but the runtime doesn't coordinate
4031
+ writes between siblings. If two forks need non-overlapping write
4032
+ surfaces, point each at a distinct `host` path or use `mount`
4033
+ (copy-once, per-VM upper).
4037
4034
 
4038
4035
  Restore on a host where the recorded `host` path doesn't exist:
4039
4036
  fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
@@ -4352,34 +4349,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
4352
4349
 
4353
4350
  > `optional` **liveMounts?**: `object`[]
4354
4351
 
4355
- Host directories exposed to the guest as live-share FUSE mounts
4356
- (#78). Unlike `mount` (copy-once into the boot rootfs), these stay
4357
- connected to the host: the guest reads on demand via a vsock FUSE
4358
- relay, and nothing is copied at boot. `mode` defaults to `"rw"` —
4359
- guest writes land on the host (#151, #156). Set `"ro"` for a
4360
- one-way share (host caches, untrusted guests).
4352
+ Host directories exposed to the guest as live-share mounts (#78,
4353
+ #332). Unlike `mount` (copy-once into the boot rootfs), these stay
4354
+ connected to the host: the guest reads on demand and nothing is
4355
+ copied at boot. `mode` defaults to `"rw"` — guest writes land on
4356
+ the host (#151, #156). Set `"ro"` for a one-way share (host
4357
+ caches, untrusted guests).
4361
4358
 
4362
4359
  Each guest path must live under `/mnt/` (same rule as `mount`).
4363
- Repeatable; each entry gets its own vsock port.
4360
+ Repeatable up to 4 entries per VM — each is served by its own
4361
+ in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
4362
+ FUSE opcode handlers run inside the VMM and the guest mounts each
4363
+ share directly with `mount -t virtiofs` — no agent process, no
4364
+ vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
4365
+ machinen-built kernel has it. (The older FUSE-over-vsock transport
4366
+ and its `protocol` knob were removed in #338.)
4364
4367
 
4365
4368
  Snapshot / restore / fork (#273): liveMount has no guest-side
4366
4369
  state worth checkpointing — reads come from the host on demand,
4367
- writes (in `"rw"`) land on the host immediately. The runtime
4368
- unmounts each mount before CRIU dumps, then re-establishes a
4369
- fresh window on the other side: for `vm.snapshot({ leaveRunning:
4370
- true })` and `vm.fork()` the source's workload sees `/mnt/<guest>/`
4371
- disappear for the dump duration (typically seconds, scales with
4372
- memory size) before reappearing under fresh server state. Open
4373
- fds across that window see EBADF on next syscall — same shape
4374
- as "don't snapshot during a database write." Workloads that
4375
- quiesce before snapshot are unaffected.
4370
+ writes (in `"rw"`) land on the host immediately. The in-VMM
4371
+ virtio-fs device persists across the CRIU dump, so the workload's
4372
+ view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
4373
+ true })` and `vm.fork()` without an unmount/remount window.
4376
4374
 
4377
4375
  Concurrent writes from multiple forks against the same host
4378
4376
  directory are no different from any other shared filesystem —
4379
- the runtime re-establishes the window per-VM but doesn't
4380
- coordinate writes between siblings. If two forks need
4381
- non-overlapping write surfaces, point each at a distinct
4382
- `host` path or use `mount` (copy-once, per-VM upper).
4377
+ each VM gets its own device but the runtime doesn't coordinate
4378
+ writes between siblings. If two forks need non-overlapping write
4379
+ surfaces, point each at a distinct `host` path or use `mount`
4380
+ (copy-once, per-VM upper).
4383
4381
 
4384
4382
  Restore on a host where the recorded `host` path doesn't exist:
4385
4383
  fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
@@ -4709,6 +4707,12 @@ tarball-producing tool can pre-populate the lookup cache.
4709
4707
 
4710
4708
  > `optional` **cwd?**: `string`
4711
4709
 
4710
+ ***
4711
+
4712
+ ### SnapshotEngine
4713
+
4714
+ > **SnapshotEngine** = `"criu"` \| `"vmstate"`
4715
+
4712
4716
  ## Variables
4713
4717
 
4714
4718
  ### STATS\_FILE\_SIZE
@@ -4895,14 +4899,6 @@ tarball-producing tool can pre-populate the lookup cache.
4895
4899
 
4896
4900
  > `readonly` **MOUNT\_PATH\_ESCAPE**: `"MOUNT_PATH_ESCAPE"` = `"MOUNT_PATH_ESCAPE"`
4897
4901
 
4898
- ##### MOUNT\_SERVER\_BIN\_MISSING
4899
-
4900
- > `readonly` **MOUNT\_SERVER\_BIN\_MISSING**: `"MOUNT_SERVER_BIN_MISSING"` = `"MOUNT_SERVER_BIN_MISSING"`
4901
-
4902
- ##### MOUNT\_SERVER\_SPAWN\_FAILED
4903
-
4904
- > `readonly` **MOUNT\_SERVER\_SPAWN\_FAILED**: `"MOUNT_SERVER_SPAWN_FAILED"` = `"MOUNT_SERVER_SPAWN_FAILED"`
4905
-
4906
4902
  ##### SECRETS\_VALUE\_INVALID
4907
4903
 
4908
4904
  > `readonly` **SECRETS\_VALUE\_INVALID**: `"SECRETS_VALUE_INVALID"` = `"SECRETS_VALUE_INVALID"`
@@ -5469,7 +5465,6 @@ Layout:
5469
5465
  blk slots 5+6, not in the cpio.
5470
5466
  /dev/console char node 5,1 — kernel needs it
5471
5467
  before /init re-opens the console
5472
- /fuse-agent optional, only when liveMounts
5473
5468
  /tmp sticky 1777
5474
5469
 
5475
5470
  No /lib/modules tree, no kmod, no /modules/*.ko, no Debian userland.
@@ -6143,9 +6138,12 @@ much the snapshot path is (or isn't) buying us.
6143
6138
 
6144
6139
  Locate the VMM binary using the same lookup order as `@machinen/cli`:
6145
6140
  1. `MACHINEN_VMM` env var (dev-mode override)
6146
- 2. `require.resolve("@machinen/vmm-<arch>-<os>")` → `binary` export
6141
+ 2. `require.resolve("@machinen/native-<arch>-<os>")` → `binary` export
6147
6142
 
6148
- Callers can pass an explicit `binary` to `boot()` to bypass this.
6143
+ `@machinen/native-arm64-{darwin,linux}` is the consolidated host-tool
6144
+ package — it carries the VMM, gvproxy, guest ELFs, mke2fs,
6145
+ mksquashfs, and the mount server. Callers can pass an explicit
6146
+ `binary` to `boot()` to bypass this.
6149
6147
 
6150
6148
  #### Returns
6151
6149