Gentoo Archives: gentoo-dev

From: Alexis Ballier <aballier@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] [RFC] Forced/automatic USE flag constraints (codename: ENFORCED_USE)
Date: Thu, 15 Jun 2017 18:05:19
Message-Id: 20170615200503.0524b1a2@gentoo.org
In Reply to: Re: [gentoo-dev] [RFC] Forced/automatic USE flag constraints (codename: ENFORCED_USE) by "Michał Górny"
1 On Thu, 15 Jun 2017 19:38:48 +0200
2 Michał Górny <mgorny@g.o> wrote:
3
4 > On czw, 2017-06-15 at 18:07 +0200, Alexis Ballier wrote:
5 > > On Thu, 15 Jun 2017 17:59:13 +0200
6 > > Michał Górny <mgorny@g.o> wrote:
7 > >
8 > > > On śro, 2017-06-14 at 16:09 +0200, Alexis Ballier wrote:
9 > > > > On Wed, 14 Jun 2017 15:57:38 +0200
10 > > > > Michał Górny <mgorny@g.o> wrote:
11 > > > > [...]
12 > > > > > > [...]
13 > > > > > > > > > > > [1]:https://wiki.gentoo.org/wiki/User:MGorny/GLEP:ReqUse
14 > > > > > > > > > >
15 > > > > > > > > > > I really don't like the reordering thing. Even the
16 > > > > > > > > > > restricted syntax does not fix the issue with '^^
17 > > > > > > > > > > ( a b ) b? ( a )' already mentioned here. It'd be
18 > > > > > > > > > > much better and simpler for the spec just to assign
19 > > > > > > > > > > a fixed value and use the solving rules with
20 > > > > > > > > > > those.
21 > > > > > > > > >
22 > > > > > > > > > You're not going to convince me by providing examples
23 > > > > > > > > > that are utterly broken by design and
24 > > > > > > > > > meaningless ;-).
25 > > > > > > > >
26 > > > > > > > > Well... if it's so obvious that the example is broken by
27 > > > > > > > > design that you don't even bother to explain why, I
28 > > > > > > > > assume you have an algorithm for that. Where is the
29 > > > > > > > > code ? What are the numbers ? How many ebuilds might
30 > > > > > > > > fail after reordering ? How can this be
31 > > > > > > > > improved ?
32 > > > > > > >
33 > > > > > > > Are you arguing for the sake of arguing here? I just
34 > > > > > > > presumed that this example is so obviously broken there
35 > > > > > > > is no point wasting any more time on it. The code of
36 > > > > > > > nsolve clearly detects that, so I don't really understand
37 > > > > > > > what you're trying to prove here.
38 > > > > > >
39 > > > > > > Those are real questions. You should take breath, think a
40 > > > > > > bit about it, and try to run the 2 possible orderings of
41 > > > > > > the ^^ through nsolve or even solve.py. They both are very
42 > > > > > > happy (and are right to be) with the above ordering. You
43 > > > > > > might want to think a bit more about what is the relation
44 > > > > > > between this broken 10 chars example and the 10 lines
45 > > > > > > python targets one below.
46 > > > > > >
47 > > > > > > You should also realize that all the above questions have
48 > > > > > > already been answered in length if you do as I
49 > > > > > > suggest.
50 > > > > >
51 > > > > > No. I have already spent too much time on this. We're already
52 > > > > > long past all useful use cases, and now I feel like you're
53 > > > > > going to argue to death just to find a perfect algorithm that
54 > > > > > supports every absurd construct anyone can even write, if
55 > > > > > only to figure out the construct is completely useless.
56 > > > >
57 > > > > I'm not going to argue to death. It's already proven reordering
58 > > > > is broken.
59 > > > >
60 > > > > > If you want to play with it more, then please by all means do
61 > > > > > so.
62 > > > >
63 > > > > There is nothing to do for reordering. It's broken by design.
64 > > > >
65 > > > > > However, do not expect me to waste any more of my time on it.
66 > > > > > I've done my part, the code works for all reasonable use
67 > > > > > cases and solves all the problems I needed solving. If you
68 > > > > > want more, then it's your job to do it and solve the
69 > > > > > resulting issues.
70 > > > >
71 > > > > Like... writing code handling all the cases and describing how
72 > > > > it works ? We're past that. The only thing we're not past is
73 > > > > that you fail to understand it and attempt to block it.
74 > > > >
75 > > >
76 > > > Then please provide a single valid example that:
77 > >
78 > > app-text/wklej-0.2.1-r1 ^^ ( python_single_target_pypy
79 > > python_single_target_pypy3 python_single_target_python2_7
80 > > python_single_target_python3_4 python_single_target_python3_5
81 > > python_single_target_python3_6 ) python_single_target_pypy?
82 > > ( python_targets_pypy ) python_single_target_pypy3?
83 > > ( python_targets_pypy3 ) python_single_target_python2_7?
84 > > ( python_targets_python2_7 ) python_single_target_python3_4?
85 > > ( python_targets_python3_4 ) python_single_target_python3_5?
86 > > ( python_targets_python3_5 ) python_single_target_python3_6?
87 > > ( python_targets_python3_6 ) vim? ( ^^
88 > > ( python_single_target_python2_7 ) )
89 > >
90 > >
91 > > Simplified as:
92 > > ^^ ( a b ) c? ( b )
93 > >
94 > > (see the pattern now ? :) )
95 > >
96 > > > a. is completely 'correct' (that is, provides a valid, predictable
97 > > > and acceptable solution) with the default ordering O_a,
98 > >
99 > > c? ( b ) ^^ ( b a )
100 > >
101 > >
102 > > > b. is not 'correct' with at least one reordering O_b (assuming
103 > > > only
104 > > > > > , ^^, ?? is subject to reordering),
105 > >
106 > > c? ( b ) ^^ ( a b )
107 > >
108 > > >
109 > > > c. nsolve reports O_a as all good, and O_b as not good.
110 > >
111 > > I'll let you run this. It does.
112 > >
113 > > > The best way to convince me is through valid examples.
114 > >
115 > >
116 > > It is also easier to be convinced when you try to understand and ask
117 > > for clarifications instead of just rejecting without thinking :)
118 > >
119 >
120 > Ok, now I get your point. Not that I like it but I don't see any sane
121 > way around it.
122 >
123 > The question then is, how can you reliably ensure that developers will
124 > use the same ordering in cross-relevant packages? For example,
125 > consider the following:
126 >
127 > ^^ ( provider_ssl_openssl provider_ssl_libressl )
128 >
129 > Since those providers block each other, all packages will have to have
130 > either openssl or libressl consistently (or another provider).
131
132 Yep that'd be a problem for things having a global impact but since
133 REQUIRED_USE is merely local there's not much to be done at that level
134 I think.
135
136 > The reordering idea was mostly addressing this. However, it just
137 > occurred to me it only solved some the case when user selected both
138 > and not the one where neither was preferred over the other.
139 >
140 > Without reordering, I think we need to enforce the specific ordering
141 > consistently across the tree. Any idea how to achieve that?
142
143 There will always be the case where one developer uses the implication
144 form with one ordering and another one the form with the other
145 ordering, so I don't think there would be any solution on the spec or
146 algorithmic side. It should rather be some policy or guideline that
147 aims to that. If there's too much duplication then an eclass defining
148 the proper order and the deps to use could be added (like python
149 eclasses do); we could add some repoman warning that e.g. openssl must
150 be preferred over libressl (e.g. there is never a 'libressl? !openssl'
151 nor '!openssl? libressl' sub-implication in the implication form). For
152 the eclass case, it might be that one day we will want to reverse the
153 order, potentially breaking the solver, but hopefully your CI checks
154 will catch that.
155
156
157 Alexis.