mirror of
https://github.com/NixOS/rfcs.git
synced 2025-12-02 15:11:10 +01:00
[RFC 0089] Collect non-source package meta attribute (#89)
Co-authored-by: asymmetric <lorenzo@mailbox.org>
This commit is contained in:
parent
b5181c9246
commit
6cd3a49c9a
1 changed files with 117 additions and 0 deletions
117
rfcs/0089-collect-non-source-package-meta.md
Normal file
117
rfcs/0089-collect-non-source-package-meta.md
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
---
|
||||||
|
feature: collect-non-source-package-meta
|
||||||
|
start-date: 2021-03-14
|
||||||
|
author: Robert Scott
|
||||||
|
co-authors: (find a buddy later to help out with the RFC)
|
||||||
|
shepherd-team: @asymmetric, @aforemny, @alyssais
|
||||||
|
shepherd-leader: @asymmetric
|
||||||
|
related-issues: (will contain links to implementation PRs)
|
||||||
|
---
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
[summary]: #summary
|
||||||
|
|
||||||
|
Collect and maintain a new `meta` attribute in packages allowing users to easily
|
||||||
|
identify and manage their preference for binary (more broadly "non-source")
|
||||||
|
packages.
|
||||||
|
|
||||||
|
# Motivation
|
||||||
|
[motivation]: #motivation
|
||||||
|
|
||||||
|
Different users have different expectations from a software distribution. We
|
||||||
|
acknowledge that much with the collection of license information and the
|
||||||
|
existence of the `allowUnfree` nixpkgs option, much as Debian maintains a
|
||||||
|
separate `-nonfree` repository.
|
||||||
|
|
||||||
|
Similarly, there are a number of different reasons users may have to disfavour
|
||||||
|
those packages not built-from-source:
|
||||||
|
|
||||||
|
- Transparency: an ever-growing concern with more focus than ever on
|
||||||
|
supply-chain attacks.
|
||||||
|
- Malleability: being able to conveniently override packages with patches or an
|
||||||
|
altered build process is a key advantage of Nix, and for nixpkgs maintainers
|
||||||
|
it's not generally possible to backport security fixes to binary packages.
|
||||||
|
|
||||||
|
For some users, these concerns are enough to deter them from using Nix entirely.
|
||||||
|
|
||||||
|
# Detailed design
|
||||||
|
[design]: #detailed-design
|
||||||
|
|
||||||
|
Add a new `meta` attribute to non-source-built packages, `sourceProvenance`.
|
||||||
|
The value of this attribute being a list of at least one entry from a
|
||||||
|
collection of possibilities maintained in `lib.sourceTypes`. These possibilities
|
||||||
|
should have entries to represent at least "built from source", "binary native
|
||||||
|
code", "binary bytecode" and "binary firmware".
|
||||||
|
|
||||||
|
Packages built from source can be left as-is with the assumption of a missing
|
||||||
|
attribute being the equivalent of `[ lib.sourceTypes.fromSource ]`.
|
||||||
|
|
||||||
|
Multiple values present in a package's `sourceProvenance` would be used to
|
||||||
|
mean that the package contains parts that fall under each of these categories.
|
||||||
|
However, a "source type" not appearing in a package's `sourceProvenance` would
|
||||||
|
_not_ necessarily mean that the package _doesn't_ contain parts which fall
|
||||||
|
under that category - it could simply mean that a package hasn't been fully
|
||||||
|
assessed yet. See "Future work" for discussion of adding the ability to make
|
||||||
|
such a "comprehensive" declaration.
|
||||||
|
|
||||||
|
Add a mechanism to allow `.nixpkgs/config.nix` to specify
|
||||||
|
`allowNonSource = false` to prevent use of these packages in a similar manner
|
||||||
|
to `allowUnfree`. An `allowNonSourcePredicate` parameter would allow the
|
||||||
|
distinction to be customized, but the default predicate should take into account
|
||||||
|
the possible hierarchical nature of `lib.sourceTypes` entries.
|
||||||
|
|
||||||
|
# Alternatives
|
||||||
|
[alternatives]: #alternatives
|
||||||
|
|
||||||
|
The original proposal used a simple boolean attribute to declare whether the
|
||||||
|
package contains any binary parts, mostly in an attempt to avoid having
|
||||||
|
to go down the route of devising and debating an ontology of source types. This
|
||||||
|
was deemed by the shepherding meeting to not embrace extensibility enough.
|
||||||
|
|
||||||
|
Another suggestion involved using a single value from a collection of "source
|
||||||
|
types" to describe the source provenance in an effort to avoid complexity, but
|
||||||
|
this appeared to have the disadvantages of requiring an ontology to be agreed
|
||||||
|
upon and still yet not providing sufficient flexibility to cover many cases.
|
||||||
|
The missing ability to express multiple provenances might even encourage
|
||||||
|
maintainers to proliferate source types that represent combinations of others.
|
||||||
|
|
||||||
|
There already exists a rather informally-applied convention of adding a `-bin`
|
||||||
|
suffix to the package names of "binary packages". This is non-ideal because:
|
||||||
|
|
||||||
|
- It doesn't allow a user to filter the use of these packages in a better way
|
||||||
|
than simply not requesting a package with a `-bin` suffix. Binary-package
|
||||||
|
_dependencies_ of non-`-bin` packages will still be installed regardless.
|
||||||
|
- It falls into the terminology trap over the term "binary", and if we expanded
|
||||||
|
the definition of what a "binary" package is, *very many* packages in nixpkgs
|
||||||
|
would have to be renamed, causing not only visual clutter but possible
|
||||||
|
breakage and churn.
|
||||||
|
|
||||||
|
If we _don't_ do anything about this, then I think we continue to signal to
|
||||||
|
users who have such concerns over the source of their software that
|
||||||
|
nixpkgs/NixOS isn't for them. Far from being a concern just for obscure
|
||||||
|
extremists, most Debian users would probably balk at our appetite for binary
|
||||||
|
packages.
|
||||||
|
|
||||||
|
# Drawbacks
|
||||||
|
[drawbacks]: #drawbacks
|
||||||
|
|
||||||
|
- It could spur us to disappear into endless navel-gazing conversations over
|
||||||
|
the `lib.sourceTypes` ontology.
|
||||||
|
|
||||||
|
# Unresolved questions
|
||||||
|
[unresolved]: #unresolved-questions
|
||||||
|
|
||||||
|
Exact attribute names and contents of `lib.sourceTypes` are open for debate.
|
||||||
|
|
||||||
|
# Future work
|
||||||
|
[future]: #future-work
|
||||||
|
|
||||||
|
The author is willing to spend a significant amount of time finding and marking
|
||||||
|
non-source packages in nixpkgs.
|
||||||
|
|
||||||
|
Addition of a simple accompanying boolean flag could allow the meaning of the
|
||||||
|
`sourceProvenance` field to be changed to imply the declaration is
|
||||||
|
"comprehensive" and that "source types" missing from the declaration are not
|
||||||
|
present. This is something that could be added once a maintainer has thoroughly
|
||||||
|
inspected a package, but should not place extra burden on someone wanting to
|
||||||
|
simply flag up that they have spotted some binary element in the package.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue