October 31, 2025

Schrödinger’s Ruby, now with drama

Nix Derivation Madness

Ruby is real, its recipe isn’t — Nix users meltdown

TLDR: A Nix user found Ruby installed but the ‘deriver’ recipe in the cache didn’t match what was on their machine, thanks to fixed-output quirks. Comments split between calling the deriver field a mistake, pushing future content-addressed fixes, and yelling to rewrite Nix entirely.

Ruby shows up, but its “recipe” vanishes? That’s the chaos Farid bumped into with Nix, the brainy package system. He installed Ruby, checked the cache, and discovered two different "derivations" (think: build instructions) pointing to the same Ruby — one missing locally, one present but different. Cue the comments, cue the popcorn.

The crowd quickly split into camps. beardsciences waved a hopeful flag: content‑addressed derivations (aka Ca‑derivations) are coming and should make this “ghost recipe” a normal, explainable thing — not a bug (wiki). Then edolstra (the Nix creator!) dropped a mic: the deriver field was “always a misfeature,” a source of confusion that never truly provided traceability. Translation: the label is lying and everyone’s been gaslit by metadata.

Meanwhile, ronef backed the diagnosis: fixed‑output derivations (recipes where the output path depends only on the content) can change their recipe without changing the final path — so you get Schrödinger’s Ruby, same result, different paperwork. eviks turned it into a naming rant: why are the file names so ugly; can’t we start with "ruby-3.3.9" so lists are readable? And amelius went nuclear: “Nix was a great research project. Time to rewrite it from the ground up.” The memes flowed: “The deriver is a deriver of drama,” “dragons ahead,” and “my package manager gaslit me.”

Key Points

  • The Ruby 3.3.9 binary is present in the Nix store, but the recorded .drv path is invalid locally.
  • Attempts to realize the missing .drv from the NixOS cache fail, indicating it cannot be built.
  • Local SQLite DB and cache narinfo both record the same Deriver .drv for the Ruby output.
  • A different local .drv exists that produces the same Ruby output path, showing a mismatch.
  • A fixed-output derivation example demonstrates that identical output paths can arise despite differing .drv files.

Hottest takes

"upcoming Ca-derivations will fix this" — beardsciences
"The deriver field in Nix has always been a misfeature" — edolstra
"Now is the time to rewrite it from the ground up" — amelius
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.