Christian Schaller, an engineering director at Red Hat and longtime contributor to GNOME and Fedora, faced a familiar Linux problem: hardware that worked on Windows but lacked driver support on his preferred platform. A Plustek OpticFilm 8200i scanner he'd purchased sat unused after discovering the manufacturer had swapped in a chipset—a Genesys GL128—that no existing Linux driver recognized. His initial attempts to generate a working driver using Claude Code stalled for months until he tried a fundamentally different approach.

Schaller's breakthrough came after seeing a post from Tom Crider (known as Glorious Eggroll) describing how an AI agent had fixed a mouse driver by accessing a working Windows implementation. He adapted this method for his scanner: Claude would run the manufacturer's Windows software, capture USB traffic, and compare it against what his experimental Linux driver was sending. Within hours, he had his first recognizable scan. Within days, infrared scanning worked too.

The key difference from his earlier attempts was giving Claude a working reference implementation to study. As Schaller explained, the agent could identify where the Linux implementation diverged from the Windows driver and make corrections. "As Schaller put it, Claude "doesn't get bored." The iterative testing process still required human validation—a working driver presents different challenges than code that merely appears correct—but the AI agent could handle the tedious reverse-engineering work that would exhaust human patience.

Reverse-engineering the scanner driver

Schaller's finished driver supports infrared dust removal and exposure adjustments for dense negatives, with color and grayscale scanning from 300 to 7,200 dpi. When he benchmarked it against the upstream SANE driver that had arrived in September courtesy of another developer, his implementation completed a full-resolution scan in 34.6 seconds compared to 54.4 seconds for the official version. Both resolved identical detail at 3,600 dpi, though SANE offers more resolution options.

Rather than maintain a competing driver, Schaller plans to migrate to the upstream version once it includes the features he needs, keeping his own as a proof of concept. The scanner project also motivated him to build Negative Vibes, a GNOME application written in Rust with Claude's assistance. The app preserves the original 16-bit scan data including the infrared channel, allowing users to remove dust, adjust images without altering originals, calibrate colors using ArgyllCMS, and export results as TIFF, JPEG, PNG or DNG files.

Fixing the ThinkPad camera

Schaller encountered a separate problem with the camera on his Lenovo ThinkPad X1 Carbon Gen 14 Aura Edition. Under Linux, images appeared too dark with noticeably darker corners and a yellow-green color cast. The device uses a Sony IMX471 sensor paired with Intel's IPU7 imaging system, but unlike the scanner, its internal MIPI camera lacked USB traffic for Claude to examine.

He worked around this limitation by providing Claude with the Windows driver's configuration files, registry entries, ACPI tables, and device properties, then connected a USB webcam to serve as a working reference. This proved decisive. By day's end, Schaller had patches for both the Linux kernel and libcamera.

The kernel fixes addressed three issues: a crop-selection bug that caused libcamera to use the wrong pixel area, an incorrectly defined test-pattern register, and an analog gain limit reducing camera sensitivity by roughly 1.8 stops. Claude also identified problems in libcamera's image processing pipeline: missing lens-shading correction darkened the corners by approximately 2.7 stops relative to the center, while a mismatch in how sensor data and black levels were calculated degraded white balance.

The improvements were quantifiable. In Schaller's low-light test, frame brightness increased from 31.1 to 90.9, and color ratios moved substantially closer to the reference webcam. However, neither patch set has been merged. Kate Hsuan, an AI developer technology engineer at Nvidia, is reviewing the kernel changes, while Wim Taymans, principal software engineer at Red Hat, handles the libcamera work. A separate Claude-generated Linux page-cache fix recently encountered a race condition during review.

Inside the hw-harness toolkit

Schaller has published hw-harness on GitHub under an MIT license. The released version differs from the exact tooling he used for the scanner and camera projects, instead running the manufacturer's Windows driver in a KVM virtual machine with the physical device passed through to the guest. Claude operates the Windows session remotely while usbmon captures traffic on the Linux host. The developer then switches the device back to Linux, repeats the operation with the experimental driver, and has Claude compare the traces.

The repository includes several components: winctl for controlling the Windows VM, usbcap for capturing traffic, hostdev for switching devices between host and guest, and hwdbg for Linux-side debugging. PowerShell scripts gather device descriptors, registry entries, ACPI tables, and INF files.

Schaller believes the approach can produce a driver that "a maintainer can actually merge." Licensing questions remain unresolved, and the generalized harness has not yet been tested across a broad range of hardware.