mirror of
https://github.com/NixOS/nix.git
synced 2025-11-11 04:56:01 +01:00
2.9 KiB
2.9 KiB
Nix is everywhere
Nix is the universal build and configuration management tool.
Software developers use Nix as a matter of course every day, mostly without even noticing. Nix runs trivially, anywhere.
For individuals to large organizations, Nix underpins the entire software supply chain:
- Developer tooling
- Build automation
- Binary distribution
To this end, the Nix team will work towards the following goals.
Make Nix easy to adopt
- Well-defined target user base
- anyone who wants to manage the complexity of - and build - software
- transform bits in a declarative and reproducible way
- Well-defined core user stories
- Ad hoc environments
- One-liner setup (nix-shell)
- Declarative environments
- One-liner setup ("templates")
- Easy modification/extension
- Easy and transparent usage ("direnv"/"lorri")
- Secret management as first-class citizen
- Configurations as first-class citizens
- Configuration/Modules/Nickel/etc.
- Language bindings
- Supply chain trust solution
- Content-addressed derivation
- Build result signing, key distribution
- SBOM/SLSA
- Unprivileged installation and use
- Portable store?
- restricted-root
- ACLs
- rewriting
- ...
- Ad hoc environments
- Linux, MacOS and Windows support at feature parity
Make Nix a tool that users can rely on
- Reliable installer
- Effective testing
- Test coverage for all major use cases
- Memory safety validation (sanitizers, ...)
- Benchmarking infrastructure
- Test reports published and accessible
- Executable language specification
Make Nix a good investment for users
-
Explicit compatibility guarantees (and non-guarantees)
- Commitment to uncompromising reproducibility
- Well-defined release process
- Feature support status
- Deprecation strategy
- LTS commitments
- Close Flakes schism, remove uncertanity/ambiguity/confusion
-
Exemplary contributor and maintainer experience
-
Recommended development setup
-
Testing guidance
-
Formalize review criteria
-
Formalize design criteria (technical invariants)
-
Well-defined architecture of isolated components
- Swappable store
- Formalize store protocol
- Swappable Nix language evaluator
- Swappable scheduler and remote-build system
- Integrate Hydra (modulo UI) into Nix
- Remote protocol speed and reliability improvements
- Binary cache protocol speed improvements
- Swappable store
-
Minimal custom code base (proven off-the-shelf components where possible)
- Git file hashing
- Sandboxing, containers
- Capnproto for RPC
- Bazel RBE protocol
- ...
-