Gentoo Archives: gentoo-dev

From: Martin Vaeth <vaeth@××××××××××××××××××××××××.de>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] Re: Please consider removing use.stable.mask and package.use.stable.mask
Date: Wed, 13 Nov 2013 14:05:22
Message-Id: slrnl871nv.h62.vaeth@lounge.imp.fu-berlin.de
In Reply to: Re: [gentoo-dev] Please consider removing use.stable.mask and package.use.stable.mask by Tom Wijsman
1 Tom Wijsman <TomWij@g.o> wrote:
2 >> The new "features" use.stable.mask and package.use.stable.mask
3 >> have turned maintaining systems with mixed ARCH and ~ARCH keywords
4 >> into a nightmare:
5 >
6 > They are considered unsupported by many
7
8 We can make a vote, but I would be very surprised if there are
9 many stable users without any unstable package.
10
11 >> As I understand, it tries to solve a "social" issue
12 >> (that an ARCH user might set a USE-flag which eventually
13 >> pulls in an ~ARCH package) on a technical level
14 >> (by forcibly disabling the USE-flag for the user).
15 >
16 > That's one approach, it might also be used when a package can be
17 > stabilized but a certain of feature of the package cannot; eg.
18 > USE=3D"minimal" could be broken on a certain package because it removed a
19 > bit too much, thus it could be stabilized with USE=3D"-minimal" forced.
20
21 As I said, it is a technical means to solve a social issue:
22 Instead of communicating to the users that Gentoo does not consider
23 USE=minimal stable, one *forces* USE=-minimal behind their back, even
24 if they should have decided to select it explicitly.
25
26 > Sometimes problems can be resolved by better communication too; perhaps
27 > there are things we can inform the user about in pkg_postinst
28
29 This would be the reasonable case for the USE=minimal example
30 (maybe even already in pkg_setup). There are also other ways to
31 communicate this to the user; I_KNOW_WHAT_I_AM_DOING names etc.
32 is another one.
33
34 > improve Portage to let the user know of a particular forced USE flag.
35
36 If you just remove use.stable.mask, portage will tell exactly
37 this to the user: That some package needs to be unmasked for
38 a certain dependency to be satisfied.
39 Then it is up to the user to decide whether he wants unmasking
40 or setting the use-flag. Instead making the choice behind his
41 back (against the use-flag) is bad IMHO.
42
43 > That are indeed the two approaches, I don't see a problem with putting
44 > the version itself in accept_keywords or overriding the profile;
45
46 Putting a stable version into accept_keywords will (correctly) be
47 considered redundant by all tools which cleanup your accept_keyword:
48 It makes no sense, and using it only to work around the issues
49 which use.stable.mask introduced appears plainly false.
50
51 Overriding in the profile of e.g. use.stable.mask cannot be done
52 for a single package; you can only negate a whole entry. In fact,
53 if you want something here, you are more or less almost forced
54 to negate all entries of {package.,}use.stable.mask
55 This is why I ask whether the latter must be there in the first place.
56
57 In fact, checking what actually is there, you find:
58
59 1. Hundreds of packages with abi_x86_32
60 2. python_{single,}targets_*
61 3. 5-10 packages with USE-flags like "unstable" or "clang" for which
62 it should be clear for any stable user that he does not want to
63 activate it without knowing what he is doing resp. caring about
64 the dependencies.
65 4. Nothing else.
66
67 So practically only stuff which already caused grief plus very few
68 normal stuff which better should be communicated if it is not
69 obvious anyway.
70
71 >> The really bad thing is that this is happening by magic
72 >> "behind the user's back"
73 >
74 > System upgrades have to be done carefully; so, the user skipping it is
75 > something we cannot account for
76
77 So just to get it right:
78 There was something introduced to avoid communication which does
79 something behind the user's back which in many cases can be just
80 the opposite that the user wanted. You expect the user to check
81 the output carefully so that he can recognize that somebody is
82 trying to trick him, and if he analyzes the profiles he can
83 eventually find out what it is.
84 Do you really consider this better than reporting to the user
85 that some testing package is pulled in by a USE-flag he had set?
86 (Which would be the effect without use.stable.mask)
87
88 >> Since there are many reasons why use-flags can appear in ()
89 >> he will probably not even conjecture that actually something
90 >> will not be working as he expected.
91 >
92 > Most of these reasons can be uniquely determined from the output
93
94 Any mask is displayed the same. But this is not the point:
95 stable.mask was introduced to avoid communication with the user
96 by trying to guess what he means (in contrast to: doing what he
97 writes in the config-files).
98 Now you expect him to read carefully output and even improve
99 output only that he can decide whether portage's guesses are
100 right or whether he has to work against his profile.
101
102 Such tools which try to be more clever than the user always
103 cause trouble. Please recall this mechanism which was used
104 previously to "guess" useflags based on installed packages
105 (I even forgot the name, since this was fortunately removed).
106 This is nothing compared to the magic which stable.mask forces,
107 since the latter cannot simply be overrided by configuring
108 package.use appropriately.
109
110 >> But suddenly portage spitted unexplainable dependency errors,
111 >> and I only expert users manually reading the profiles can
112 >> understand that the reason is that use.stable.mask requires
113 >> that stable versions need to be keyworded ~amd64
114 >> (or use.stable.mask has to be overridden in my profile).
115 >
116 > This confuses me; isn't the goal to have one multilib apprach or the
117 > other? Especially due to the blockers between them.
118
119 This discussion does not belong here; I decided for ABI_X86="32"
120 and expect portage to respect this decision and not disabling
121 it randomly for some packages just because I did not mark a
122 stable package testing.
123
124 Yes, I understand the mechanism and how to override it, but this
125 is all tricky and cumbersome: Essentially, you have to spend a
126 lot of time just to work against the stable.mask mechanism.
127 The intention was probably that this mechanism should be
128 helpful and simplify things, but it turns out that it does
129 just the opposite. So one should think it over and remove it
130 (or replace it by something better if one finds something).
131
132 >> 2. Just a few days ago dev-lang/python-exec:2 became stable
133 >> on amd64, but dev-python/python-exec:2 is still ~amd64.
134 >> Just to be sure to not miss anything, I have put the latter
135 >> into package.accept_keywords, and hell break loose:
136 >
137 > Hell indeed breaks loose if you mix stable and unstable
138
139 Again, one might do a vote, but I would be surprised if not
140 80-90% of the stable users also have unstable packages.
141
142 > but note that this package had an accident, see the related
143 > news item for details.
144
145 This is why it took me so long to find out; of course, I thought
146 that the problem is related with the news while it was actually
147 related with use.stable.mask
148
149 >> Portaqe wanted me to emerge the git version of
150 >> dev-lang/python-exec:0 and reemerge dozens of packages.
151 >
152 > This is a consequence of that hell; if you don't agree and this is due
153 > to the Portage tree, please show the dependency chain that causes this.
154
155 Please read, what I had written: I have explained why this happened.
156 It is because use.stable.mask horribly interacts with the dependency
157 chain: Use flags change out of nothing if you are forced to add an
158 unstable keyword somewhere.
159
160 >> I needed hours to find out what is the actual cause:
161 >> The package.accept_keywords caused the use.stable.mask of
162 >> python_targets_pypy2_0 und python_targets_python3_3 to become
163 >> ineffective for dev-python/python-exec,
164 >
165 > It doesn't matter, dev-python/python-exec installs no contents.
166
167 This is the point: You have an actual "useless" package which
168 due to use.stable.mask hinder dependencies from being corrrectly
169 resolved. And which even forces other packages to be rebuilt,
170 also because of changes only in use.stable.mask.
171
172 >> but of course it is still
173 >> effective for dev-lang/python-exec which is not be the case
174 >> if I unmask the git version of dev-lang/python-exec.
175 >
176 > Which one is not meant to do anyway; and from what you wrote, I don't
177 > think you intent to either.
178
179 Exactly, but this is the only solution which portage can
180 find; again, because use.stable.mask implicitly changes the
181 dependency chain.
182
183 >> This is completely confusing since nowhere the git-version
184 >> is marked differently than the non-git version.
185 >
186 > Marked in which way? One is stable, the other unkeyworded.
187
188 They provide exactly the same USE-flags, and whenever they
189 occur in profiles or dependencies they occur both or none.
190 So one has a hard time to guess why the git version satisfies
191 a dependency which is not satisfied by the stable version.
192 Of course, if one knows the answer (use.stable.mask), it is clear.
193 Instead of making things simpler for the user, use.stable.mask
194 causes problems to the user.
195 It causes much more problems than it solves: Actually the only
196 problem which it solves (or better: tries to solve) is a
197 communication problem...
198
199 > If it is due to the hell above, we warn users up front for that.
200
201 Most users mixing stable and unstable have valid reasons
202 for each case. Telling "we have told you not to do that"
203 only to keep a smart-ass mechanism which produces more
204 problems than it solves is a bad idea.
205
206 >> 3. As a side effect of 2., I realized that libreoffice and a dozen
207 >> further packages get forced a rebuild. So, if eventually
208 >> python-3.3 becomes stable and is removed from use.stable.mask, [...]
209 >
210 > That is to be expected on such stabilizations, I doubt they are
211 > unnecessary
212
213 Only because some package which I have not even installed changed
214 its stability, it should be necessary that I reemerge everything?
215 And even *if* I should have installed it, the change of its
216 stability would make it necessary to reemerge my world?
217 Things appear very strange in Gentoo land meanwhile...