1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-24 22:11:15 +02:00
nix/doc/manual/source
Valentin Gagarin a0d3003bf2 glossary: refine the definition of "package"
This change follows the definition from aptitude, but using precise notions from Nix:

> package managers deal with packages: collections of files that are
> bundled together and can be installed and removed as a group.
> [...]
> If a package A depends upon another package B, then B is required
> for A to operate properly.
> [...]
> The job of a package manager is to present an interface which assists
> the user in managing the collection of packages installed on his or her system.
>
> -- <https://www.debian.org/doc/manuals/aptitude/pr01s02.en.html>

An interesting addition:

> Packages are abstractions defining the granularity at which users can act
> (add, remove, upgrade, etc.) on available software.
> A distribution is a collection of packages maintained (hopefully) coherently.
>
> -- Package Upgrades in FOSS Distributions: Details and Challenges
>    (Roberto Di Cosmo, Stefano Zacchiroli; 2009) <https://arxiv.org/pdf/0902.1610>

Notably these quotes and this change don't say anything about installation,
or what it means for software to be available. In practice, this is
handled downstream, e.g. in NixOS or Home Manager. Nix historically
provides rudimentary facilities for package management such as
`nix-env`, but I claim they are widely agreed upon being discouraged,
with plenty of arguments provided in <https://stop-using-nix-env.privatevoid.net>.

Similarly, the specific structure of packages is determined downstream,
since Nix is policy-free:

> Nix is policy-free; it provides mechanisms to implement various deployment policies, but does not enforce a specific one.
>
> -- The Purely Functional Software Deployment Model (Eelco Dolstra; 2006) <https://edolstra.github.io/pubs/phd-thesis.pdf>

Specifically, Nix mechanisms do not define what a package is supposed to be:

> It's worth noting that the Nix language is intended as a DSL for package and configuration management, but it has no notions of "packages" or "configurations".
>
> -- <https://gist.github.com/edolstra/29ce9d8ea399b703a7023073b0dbc00d>

This is why we say, Nix *allows* denoting packages in a certain way, but
doesn't enforce any particular way.
2025-04-10 22:50:28 +02:00
..
advanced-topics manual: Edit 2025-03-03 19:09:24 +01:00
architecture Document Store Derivations and Deriving Paths (#12290) 2025-02-10 01:30:07 +00:00
command-ref Rename to "content-address*ing* derivation" 2025-02-10 01:12:56 -05:00
development Expose the nix component in header include paths 2025-04-01 11:40:42 -04:00
figures Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
installation Remove character not needed for a command 2025-01-20 14:03:29 +02:00
language Advanced attributes organize 2025-03-12 17:45:51 -04:00
package-management Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
protocols Improve the documentation of store path 2025-03-19 13:45:10 +08:00
release-notes Edit rl-2.28 2025-04-06 17:03:38 -04:00
store Fix minor documentation typos 2025-03-07 23:07:03 -08:00
_redirects Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
c-api.md Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
favicon.png Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
favicon.svg Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
glossary.md glossary: refine the definition of "package" 2025-04-10 22:50:28 +02:00
introduction.md Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
meson.build Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
quick-start.md Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
SUMMARY.md.in release notes: 2.28.0 2025-04-06 17:03:34 -04:00