Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC 0127] Nixpkgs "problem" infrastructure #127
[RFC 0127] Nixpkgs "problem" infrastructure #127
Changes from 21 commits
60cb23d
ee72999
c109c31
ff2e2d4
f83067a
2daf978
2b63424
e5c0e13
3212d31
ecdbe2c
c907adb
d232a2d
ff6e33d
6ffce6d
24a8985
1b1424e
1e6725e
81564e6
c5c64ec
2a78241
4f311de
b253df1
7939f49
33ec9a6
83319ec
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this section should introduce the different handler values and show the default one for each problem kind.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think packages that have EOL dependencies should be marked as deprecated, they can still be maintained while having EOL dependencies.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The general concept here is correct, although I agree that the name may be misleading. The representative use case for "deprecated" is the Python 2 EOL: some packages can be fixed by upgrading to Python 3 or otherwise removing the Python 2 dependency, others are probably hopeless and doomed.
IMO it's the other way around: packages with EOL dependencies are in need of maintenance
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, EOL packages receive security fixes or maintenance only via paid subscriptions usually.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(But I'm open to an EOL explicit flag.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello, came to read the rfc after fcp was announced, this is the only thing that bugged me while reading..
It seems there was no conclusion to this comment.
The distinction can be hard to grasp, but I think deprecated and eol/obsolete are clearly different and should be handled differently.
Mozilla's JS docs uses deprecated/obsolete here:
To me (french, not english-native), obsolete also means that something else took its place.
eol
would be stronger and wouldn't mean that.Random guy on english stackexchange says:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bew, I don't see how this distinction is relevant in this context. The idea behind "deprecation" is, that some package has a problem related to software for which upstream dropped support, and thus needs fixing or removal. Whether or not it currently works is not relevant to me, since this is from a maintainer perspective and not a user perspective.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While I wanted also a distinction, I feel like it's not that important from a maintainer perspective, and I agree with @bew ; though, if, in practice, we found ourselves wanting more, we can always discuss this after extensive experience with that RFC in production.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok for the distinction between deprecated/obsolete/eol.
I'm now also thinking about the wording vs semantic difference between
removal
anddeprecated
.Something that is marked for
removal
should not be used anymore, this actually looks like the definition ofdeprecated
🤔Might be confusing, maybe we can rename:
removal
todeprecated
(or don't use rhe worddeprecated
at all?)deprecated
toobsolete
/eol
What do you think? @piegamesde @RaitoBezarius
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm fine with changing names as long as we keep the originally intended semantics. I'd prefer to keep "removal" because it's for things "that are about to be removed" so I find it quite fitting. "removal" is a least resort measure, and "deprecated" would be too weak of a word for it.
I'd be fine with renaming "deprecated" to "obsolete" or "eol". Personally I don't mind "deprecated" and don't think the alternatives are a big improvement, but they're fine so if people prefer it we can do that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I was deciding between gentoo and nixpkgs, this was the major strike against gentoo. The OS sends you email. And you sort of have to read it, because all the other users do.
That, plus wanting less Python in my life rather than more, is what tipped the balance.
Let's not go that way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Currently, nixpkgs errs on the other side of the spectrum. It is difficult for you to get notified about changes you care about, especially on the unstable channel. This RFC has started because people wanted to do some backwards-incompatible changes but did not have a good way to properly inform all stakeholders.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This "unmaintained" boogeyman is a problem endemic to poorly-scoped software. Cough cough browsers cough.
dnscache
,tinydns
, andrunit
have been "unmaintained" for over a decade and work better than most of their competitors. The same is true ofunfs3
, but its alternatives (i.e. in-kernel nfs) can't be run in an unprivileged sandbox, which turns the wholeunmainained==insecure
on its head.Is this RFC going to affect their presence in nixpkgs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not the kind of "unmaintained" the sentence is referring to. Yes, eventually people may start to enforce
maintainers != []
using the features provided by this RFC if they want to, but this will be a new and separate discussion for sure.This sentence is about all a) packages that are effectively unmaintained, i.e. they require some work to keep going but there is nobody and b) packages that are unmaintained or abandoned by upstream with no hope of fixing.
And no, "unmaintained" does not imply it's insecure by any means. Personally, I'd like to get to a point where we treat "end of life" as kind-of insecure. And this is not only about security, but also about workload: I do not want us to patch things on software if it is end of life, instead we should have a graceful way of removing it from
nixpkgs
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add as sub-point: out of band warnings would be impure if they stopped evaluation like they currently do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I imagine such a tool not blocking evaluation at all, but providing the metadata, comparing it to local policy, annotating the drvs produced with said metadata, and (when used interactively) providing a "continue anyway" knob if anything happens that's not already permitted by local policy.
I don't count that as an impurity, since I don't want it to be able to modify the evaluation results at all -- only observe evaluation and decide what to do afterwards (which also allows getting all the warnings at once, and displaying all those that local policy considers as "blocking" at once).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I consider environment variables to overwrite the "refusing of evaluation" quite important.
For example, i quite often install packages with
nix profile
(previously withnix-env
), because it is faster and i don't want to edit my NixOS configuration for these minor package additions. I also useallowUnfreePredicate
to only enable some unfree Packages. Sometimes the need arises to install an unfree package withnix profile
, so i doI haven't done that for broken packages, yet, but i can imagine it being an inconvenience if it wasn't possible for the issue handlers to be overwritten impurely.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to be clear: Existing environment variables will continue working.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At the same time, they will be the only way to mass-override
unsupported
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure I understand your question. Why the only way?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you lower from
error
towarn
viamatchers
? I thought thathandlers
need to be package-by-package, andmatchers
cannot lower severity below the default?(Presumably if
unsupported
replacesplatforms
it defaults toerror
)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a good point. Arguably problems like
unsupported
orbroken
should be safe to ignore generally, whileinsecure
ones aren't..Maybe the distinction here is that
unsupported
andbroken
are errors at evaluation time that would otherwise happen at build/runtime, whileinsecure
wouldn't give any other error.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've personally almost never interacted with
unsupported
and only rarely withbroken
, do you think that not being able to mass-disable them is a big issue?On the other hand, my previous design for this RFC included some pretty YOLO wildcard capabilities, so I'll have no problems with selectively relaxing the "no downgrade" restriction should there be need for it.
Also, for better or for worse, the existing environment variables will keep working for a long time due to backwards compatibility. It's a bit weird, but there's nothing we can really do about it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe some thing can be downgraded to warn but not to nothing.
The use case for mass-overriding unsupported/broken/etc. is e.g. «so with the new and improved stdenv for this kind of BSD which has partial Linux compatibility, which of the presumed-Linux-only-packages will now build?»
Sure, on non-cross Linux
broken
usually is in some connection to reality; for new or reworked exotic stdenvs (Tier 3 or 4 platforms, including cross or maybe musl or whatever) «there were reasons to guess Linux-only or x86_64-only, and nobody had a setup to try» is pretty normal and quickly estimating the amount of work to get something working is useful.