Hacker News new | ask | show | jobs
by _piif 1113 days ago
Which I'm glad has been the case here since it results in the most stable and trouble-free Linux distro and package manager I have ever used. Complete with full source reproducibility for everyone to top it off. It'd be hard to convince me to switch back to a traditional distro at this point.
1 comments

> Complete with full source reproducibility

if you have full source reproducibility, why are artifacts needed then?

To not force every user to build (potentially all) derivations which is very time consuming, especially considering the way Nix derivations work which requires a rebuild each time a dependency changes in any way meaning something like a glibc update results in a recompile / redownload of the entire userspace.

So it's not a necessity per se but constantly rebuilding a significant amount of packages would easily turn the majority of users away. I'm not sure how many Nixpkgs revisions the Hydra build server keeps hold of or if they even clean up older revisions at all - perhaps it might be time to start doing so at this point. That would be an issue for ancient Nixpkgs revisions which point to broken urls though as the archival of sources is out of the scope for the NixOS infrastructure. Nix is only concerned about the state of a given source using checksums, not the availability itself. So in that sense "full source reproducibility" is only a guarantee that the input doesn't differ (and optimally should result in the same output bit-for-bit which is a completely different beast and something that is being tackled not only by NixOS but by several other distros). It's not a guarantee for "I will be able to grab this Nix derivation in 30 years and be able to get an output out of it" unless you have a mirror of the original sources.

The artifact caches not only save a ton of build time, but also add a layer of resilience to failures, outages, and deletions from upstream source repositories, since source artifacts are also cached in the same way as binaries.