News for hackers. Stuff that matters.
Re:NixOS for the Impatient by kevincox on Friday June 09, 2023 @09:21PM (#36266597)
Reproducible is key here. I remember trying to manage servers with Ansible, Chef and Puppet in the past but was always disappointed that trying to spin up a new server, or move a service between two usually failed. This is because service S1 forget to declare dependency D, but it happened to work because S2 needed the same dependency and declared it. Or simply that in the past S1 declared D but the config was "cleaned up" and it wasn't realized that D was still needed. (Or it wasn't needed at the time but then needed again, but you didn't declare it).

These types of problems are very rare in NixOS (although I do occasionally see it with the module system, but at least this is config dependent, not system-state dependent). If I apply the same config I have a very high confidence that I will get the same system. I lost my desktop's drive the other day and I was back fully functional within an hour. Most of the time was spent logging into Firefox, Email and various websites rather than installing the system. Managing servers is similarly easy, I would have a hard time moving to something else.

Intrinsic state (like user data or application databases) is still hard, but at least that is the only real concern. Better than dealing with state and config.

Re:NixOS for the Impatient by rgoulter on Friday June 09, 2023 @10:07PM (#36266834)
> Reproducible is key here.

I like the terms this article used: Divergent, Convergent, Congruent.

https://blog.flyingcircus.io/2016/05/06/thoughts-on-systems-...

In a 'divergent' system (e.g. managed by bash scripts), the resulting system state might diverge from what the bash scripts have, because of manually running commands on the system.

In a 'convergent' system, the system tries to reach a target state by comparing what's there with what it's got.

In a 'congruent' system, the system is forcibly built to equal the target state.

[dead]
Re:NixOS for the Impatient by klysm on Saturday June 10, 2023 @12:05AM (#36267495)
In what sense? I don’t think you’ve helped clarify your definition at all
Re:NixOS for the Impatient by rgoulter on Saturday June 10, 2023 @12:12AM (#36267527)
Probably "reproducible" as in "reproducible build" https://reproducible-builds.org/
Re:NixOS for the Impatient by klysm on Saturday June 10, 2023 @07:13AM (#36269512)
Yea but nixos has reproducible builds
Re:NixOS for the Impatient by rgoulter on Saturday June 10, 2023 @12:10AM (#36267517)
The term 'reproducible' in 'reproducible build' (https://reproducible-builds.org/) conveys "bit-for-bit identical output". -- The benefit of that is security; others can compile the same sources and check that they get the same binaries.

But more generally, 'reproduce' just means 'create the same thing again'.

Nix uses "reproducible" in a more general sense: you provide the same inputs, and you'll get a program which behaves the same way, regardless of whether you compiled from source or downloaded binaries from a cache.

IMO, I think "reproducible build" is enough to unambiguously refer to the former. But, if you can think of a nicer word for "you get the same behavior from the same inputs" than "reproducible", it would be worth suggesting.