replaceRuntimeDependency, Guix grafts, and other approaches to the fast-upgrade problem

Forked from:

What do grafts do that replaceDependency and replaceRuntimeDependencies don’t? What are the downsides to both approaches relative to what people want right now?

I think both of these approaches have the downside that the store has to contain a copy of the ungrafted software along with a copy of the grafted software (is this true?).

Personally, I’d be interested in a lower-level solution that allows for a symlink directory to be overlaid atop the Nix store. If the overlay happens as part of NixOS activation, different link directories (or none at all) can be swapped in and rolled back atomically, but the paths that the links cover may or may not exist underneath. And the other benefit relative to grafting is that no software other than the library(s) being emergency-updated needs to be touched.

I had hoped that the local-overlay RFC would move in this direction but it seems to have landed on a very industry-specific use case and doesn’t cover patterns that would be suitable for desktop users.

But also I’m a dummy who hasn’t worked through everything that this would entail. What are some other people’s thoughts?