3 ms·
I'm not a unix guru, but from my experience with C++ build systems I feel the reproducible build thing seems completely at odds with rolling releases. When I ha
by geokon 5y ago
I'm not a unix guru, but from my experience with C++ build systems I feel the reproducible build thing seems completely at odds with rolling releases. When I have a reproducible built with C++/CMake/Hunter, what I want is a stable package base that everyone is building against - that's got a ton of eyeballs on it and that is patched and maintained. You do whatever you want on top of that and you can deterministically reproduce your whole stable setup. You do it all carefully enough and you can even build against any architecture.
You take the example of Ubuntu LTS - everyone eventually adjusts their libraries and applications to be able to run with the suite of library versions they provide and everyone is on the same page.
Sure, sometimes you may need a particular package at a different version. You can either static link that in, or bring it in separately with a PPA (as long as you're careful to not link two versions of the same library) - but generally that's not really necessary
By contrast a rolling release seems sorta nuts... Sure I can reproduce the GUIX/NIX package world at some random point in the past - but I'll be basically the only person stuck at that version. If libraries have issues all I can do it try to rebuild at a newer version.. but then why do I care about reproducibility if I'm rolling? Or I end up with a hodge-podge of libraries at different versiosn that work for one application, but don't quite work for another. Orrrr I have a soup of libraries/dependencies all at different version.. but then I might as well statically link everything and forget about package management!
From a lot of the blog posts and tooling I get the sense that people don't really care about having a stable system frozen in time. Is that right?
I admittedly haven't played with either system (b/c they're really hard to grok) - but I feel I must be missing the point a bit. Or maybe I'm not seeing an obvious usecase for reproducible rolling releases
- rgoulter 5y agoRight, I've seen "an LTS set of packages would be nice" as a point before, I agree that it would be good to have.. but I think the communities for this are too small to support it. I've not used Guix, but have used Nix. > I must be missing the point a bit In terms of reproducing how software is built/run? At the risk of starting a flamewar, I believe one of the reasons use of Docker is so popular is how easy it made it to deploy software in a way that you've got confidence it will run the same way. But I'd suggest a point worth considering about Nix/Guix is more that advantages like "reproducible package behaviour" or "straightforward installation rollback" etc. are easy with Guix or Nix, but difficult to get elsewhere (or even benefits you can't get with other tooling).
- geokon 5y agoYou know the rollback aspect is something I really overlooked! Thanks for pointing that out
- LanternLight83 5y agoGuix let's you create "inferior" channels that are pinned to older channel commit(s) and build packages from them into your system, so if you have a particular package that's broken beyond a point, you can still pin it and roll everything else forward. I do wish there was a branch that was pinned to eg. the latest commit with a successful CI build of the Guix installer, but CI load is currently it's own issue, so I'd be as happy to see a mechanism for creating your own CI that merges master like weekly and runs custom tests (a la "guix system test"'s VM-based test suite).
- kaba0 5y agoNix uses to channels for this sort of versioning, which is pretty analog to ubuntu’s versions. It basically freezes a set of lib versions and everything builds against that, so far nothing different from what other distros do. What makes Nix and Guix superior is that you can still install a package depending on an older/newer/compiled with specific flag or whatever version of libc or anything basically, and it will be removed once it is no longer in use. And also, if a package worked at a particular nix repo state, you can be almost sure that it will work again.
- geokon 5y agoOh right, I keep forgetting Nix has official stable channels :). I think they're pretty short lived though. 6 months from what I remember. Nonetheless definitely a leg up on GUIX. Thanks!