kldload 1.4.2 — Hardware

Status: released  ·  Date: August 2026  ·  License: BSD-3-Clause
Download: kldload-free-latest.iso (15 GB, offline)  ·  kldload-free-net-latest.iso (2.2 GB, net installer)  ·  sha256: 0a7fb94ddb1d… (full)

Almost every fix in this release was found by installing on a real machine and measuring what actually landed, rather than reading a package list and assuming. The development machine has an NVIDIA GPU and an Intel CPU — which turns out to be the one configuration where all of these defects are invisible at once.

The desktop installer asks three questions

It used to ask nine. Eight of them were things you would answer the same way every time to get a working desktop, so they are now silent defaults: virtualisation, the Kubernetes lab, the AI assistant, monitoring, the ZFS lab and the mesh all install, because a desktop without them is not the product. What is left is what genuinely varies by machine — the NVIDIA driver (offered only when an NVIDIA GPU is actually present), Secure Boot, and whether to build VM golden images.

The web console also no longer starts on every boot. It was useful exactly once, during the install.

Firmware that was never actually installed

Both distributions shipped installs with large parts of the firmware tree empty, and nothing reported it. On Fedora, because version 43 split linux-firmware into per-vendor packages and this tree named a handful of wifi packages and nothing else. On Debian, because firmware-linux-nonfree depends on exactly two packages and lists every per-vendor set as a Recommends, while the install runs --no-install-recommends.

Measured on real installs, before and after

  • Total firmware files — Fedora 2874 → 4139, Debian 1361 → 3093
  • AMD CPU microcode — 0 → 7 (Fedora), 0 → 5 (Debian)
  • Intel CPU microcode — 0 → 126 on Debian
  • Intel graphics (i915) — 0 → 57 on both
  • Broadcom, MediaTek, Qualcomm wifi — 0 → 54, 99 and 129
  • Cirrus audio — 0 → 433

The microcode row is the one that matters most. An AMD machine booted with none at all, so Zenbleed- and Inception-class fixes never loaded. An Intel machine picked its files up through a different package and looked perfectly healthy, which is exactly why this went unnoticed for so long. The rest decides whether a laptop has working wifi, sound and a graphical console on first boot — a desktop with no GPU firmware is a black screen, not a slow one.

Codecs and video acceleration

Debian installed with no VA-API drivers and no libav, so hardware video decode was unavailable and a browser fell back to software for everything. Both are present now: 211 decoders and 7 VA-API drivers on Debian, 11 on Fedora. Both numbers were zero on Debian.

The boot chain

Secure Boot is off by default. It is still a checkbox and it still works, but an install no longer walks you through a key enrolment ceremony you did not ask for.

The encrypted-pool passphrase prompt is visible. It was being buried under kernel output on a quiet boot — the pool was waiting for a passphrase on a screen that gave no reason to type one.

A failed kernel re-sign no longer destroys the signature. The Secure Boot path strips and re-applies the kernel signature; if that failed, the ESP was left with an unsigned kernel and the machine would not boot. It now backs up first, verifies the result, and restores on failure. The host id is also pinned on every boot path — it was empty on the one entry a Secure Boot install uses, which made importing the pool a coin flip.

The kernel pin is derived, not written down

ZFS and NVIDIA are out-of-tree modules built against one specific kernel, so the kernel is held — 57 packages on a desktop install. That pin is now resolved at build time from what OpenZFS actually declares it supports, rather than a literal somebody updated by hand. A literal goes stale silently and lies about having been tested.

The pins were also being written underneath a mountpoint that had not been mounted yet, so the tool that set them could not see them afterwards. The system journal had the same defect, and its symptom was worse: it reported that it was recording while every boot was being erased.

Ansible proves itself on first boot

Ansible shipped configured and had never once run — the inventory listed the estate, the dropdown listed playbooks, and “is Ansible working?” was answered by reading configuration rather than by evidence. A playbook now runs unattended on first boot and writes a report naming every host it reached and, more usefully, every host it could not. A count on its own would have read as success while half the estate was unreachable.

Every machine records what built it

/etc/kldload-release carries the version, ISO name and build date, and — the half that turns a support report into a bug report — what the installer was actually told to do: which distro, profile and Secure Boot setting were requested. Asked “which ISO installed this machine?”, the only previous way to answer was to infer it from which packages happened to be present.

Diagnostics on both package managers

smartmontools, nvme-cli, ipmitool, OpenIPMI, lm_sensors, sg3_utils, lsscsi and usbutils ship on every profile. A machine that cannot report its own disk health is not a substrate you would trust with a pool, and without ipmitool a server's sensors, event log and power state are unreachable from inside the OS even though every driver is already in the kernel. They are inert on hardware with no BMC, so they ship everywhere rather than only on the server profile.

Validated on four installs

Both distributions, both boot paths, on real hardware: Fedora and Debian with Secure Boot and encryption, and both again with neither. All four finished with zero failed units, a healthy pool, a six-node Kubernetes cluster and identical codec counts. Rollback was exercised on both boot paths.

Full detail in CHANGELOG.md at the tag.