"Package Managers à la Carte, A Formal Model of Dependency Resolution" preprint out today: a new package calculus to describe the cambrian explosion of systems that exist today https://arxiv.org/pdf/2602.18602 lead by @ryan
@ryan I find it interesting that Nix is considered to do singular dependencies only, albeit there's the mention of the various frontend to transform into singular dependencies. I wonder if it has been considered that Nix could provide a builtin to perform version resolution in a package set, e.g. it should be possible given a large enough lockfile to do `builtins.resolveVersions pkgs "gcc" "≤ 14, > 9"` — nonetheless, I understand why the focus is on the peculiar approach of Nix-like systems
@raito @ryan that's all expressed in the Nix DSL currently. If a future Nix does expose a builtin for version resolution then the semantics of that would hook into the package calculus

@avsm @ryan Yes, I absolutely agree

I have been contemplating introducing generic SAT solving primitives in the Nix language to experiment with these ideas, but I'm not convinced that version resolving is a good idea except by doing it like what Golang is doing but it's not permitted by all ecosystems…

@raito @ryan I could imagine that being a cool 'package FFI' though, for Nix to request version solutions from other ecosystems and then continue executing the rest of the package formulae
@avsm @ryan What is wondered too is whether that should be application ecosystems which should call into Nix FFI to produce .drv files that can be consumed by a more global system formulae, that way, application ecosystems can translate their build steps into the Nix formalism and reuse all the build machinery (remote builds, sandboxing, caching, etc.) while rendering these paths available to the rest of a Nix expression
@raito @ryan Yes! Ryan and I have discussed exactly that interface to the both .drv and /nix/store (the latter seems to exist now, not tried it yet)