NixOS is not reproducible
Scope of “Reproducible”
- Many argue Nix/NixOS is not truly “reproducible” in the strict, bit‑for‑bit sense because:
- Store paths are currently input-addressed (hashes of dependency graphs), not content-addressed.
- Toolchains and upstream build systems often inject nondeterminism (timestamps, concurrency, filesystem quirks).
- Others distinguish:
- Strict reproducibility (identical artifacts) vs.
- Practical repeatability/determinism (same versions, same behavior).
- Some note ongoing work on content-addressed derivations and reproducibility dashboards, but acknowledge it’s incomplete.
Practical Benefits Cited
- Strong support for:
- Declarative system configuration in one place.
- Atomic, transactional upgrades and easy rollbacks via bootloader generations.
- Reusable configs across machines; consistent dev environments and CI parity.
- Deep control over dependencies, SBOMs, and patching sub-dependencies.
- Several users say NixOS reduced “random breakage” vs. traditional distros and increased confidence in updating.
Complexity, UX, and Onboarding Problems
- Frequent complaints that:
- Nix language is odd, dynamic, and hard to discover; ecosystem APIs feel ad hoc.
- NixOS configuration replaces simple
/etcedits with layers of modules and options. - Non-FHS filesystem and heavy symlink use are confusing.
- Overlays and abstractions hide complexity, making debugging failures harder.
- Examples: adb/Android tooling needing extra config; broken or missing packages on some platforms; hard integration with Python, Flutter, iOS, macOS apps.
- Documentation and messaging described as fragmented, flakes vs “old” Nix confusing, poor search discoverability.
- Some feel community often frames problems as user “skill issues”, which is off-putting.
Alternatives and Comparisons
- Guix mentioned as philosophically similar (and stricter on free software) but niche; ideological stance on non-free software is a turn-off for some.
- Other strategies: Docker/containers + config management; immutable distros with snapshots; Btrfs+Snapper; language-specific tools (e.g., Zig build).
- Some see Nix as over-engineered for typical desktop/server use; others say once learned, it makes other distros feel fragile.