The hardware operators
(backfilled 2026-08-25)
I kept pressing Claude to cough up ideas for how we could extend this hardware system more broadly. I expressed a whole-home A/V vision, but what I wasn’t seeing at the time was that we were missing a key layer of abstraction between liken and a multimedia fever dream.
liken sees hardware the same way that the kernel does, because, well, that’s all there are, liken and the kernel. The kernel doesn’t see a pair of Bluetooth headphones, it sees a Bluetooth radio that acts as a gateway to an alien network of other devices. It doesn’t see a monitor, it sees a GPU that has two HDMI ports. It doesn’t see audio channels, it sees a sound card with some PCM sinks. I could easily claim the radios and the GPUs and the cards, but they weren’t really shaped correctly to just hand to a workload. A music player doesn’t want a Bluetooth radio, it wants a socket to stream audio to some speakers.
I noticed a common pattern: userspace services that owned a lower-level liken
device (like a Bluetooth radio), handled the
bluetoothd/bluez user-space side, and then
published back to the cluster resources like a game controller or a Bluetooth
speaker. This pattern played out the same way across
displays, audio, and
bluetooth, so I focused on trying to give them as
common a shape as we could.
The results are pretty cool! The audio-operator and display-operator didn’t even
need any new
CRDs
because they just claimed a liken resource and republished the child devices as
new
ResourceSlices
in-cluster. Bluetooth was an interesting exploration and I learned a lot about
Bluetooth pairing and protocol negotiation.
I think the real joy came when I realized we could have the bluetooth-operator and audio-operator collaborate on exposing things like Bluetooth speakers and headsets. We still don’t have microphones implemented yet (even now in late August) but the groundwork is definitely all there.