Gentoo Archives: gentoo-dev

From: Brian Harring <ferringb@×××××.com>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] new `usex` helper
Date: Tue, 20 Sep 2011 21:21:36
Message-Id: 20110920212057.GA14344@beast
In Reply to: Re: [gentoo-dev] new `usex` helper by Donnie Berkholz
1 On Sun, Sep 18, 2011 at 10:16:46PM -0500, Donnie Berkholz wrote:
2 > On 04:22 Sun 18 Sep , Brian Harring wrote:
3 > > On Sat, Sep 17, 2011 at 10:59:08PM -0500, Donnie Berkholz wrote:
4 > > > On 13:43 Fri 16 Sep , Brian Harring wrote:
5 > > > > What I said from the getgo and you're missing is that pushing EAPI
6 > > > > implementation into the tree and ignoring EAPI, or having this notion
7 > > > > that every repository must automatically use gentoo-x86 (pushing the
8 > > > > format into the tree) is /wrong/;
9 > > >
10 > > > I'm not necessarily requiring that every repository must automatically
11 > > > use gentoo-x86 ??? just the ones that want to use features in an eclass
12 > > > distributed with gentoo-x86. It sounds to me like the logical
13 > > > consequence of what you're saying is that every useful function that's
14 > > > now or could eventually be in an eclass must instead be incorporated
15 > > > into EAPI. I guess I just don't see where you're drawing the line.
16 > >
17 > > Drawing it back to what spawned it; usex. This isn't git.eclass, this
18 > > isn't svn.eclass, nor is it any of the other complex eclass
19 > > functionality. It's a core function that benefits the rest and should
20 > > be in EAPI.
21 >
22 > OK, so the implication of what you're saying is that everything in
23 > eutils.eclass, base.eclass, toolchain-funcs.eclass, flag-o-matic.eclass,
24 > versionator.eclass, multilib.eclass, prefix.eclass, savedconfig.eclass,
25 > and maybe even linux-info.eclass and autotools{,-utils}.eclass should go
26 > into EAPI. All that stuff is pretty generally useful features.
27
28 Approximately... yes. Some of that (base.eclass for example) is EAPI
29 compatibility that can't be folded in (would require retroactively
30 addding to an EAPI), others aren't yet stabilized (true multilib for
31 example, seems to still be under discussion), etc.
32
33 You get the jist.
34
35 > > > What I'm suggesting is that we should add useful stuff to eclasses
36 > > > by default. If people want to use that stuff, they can stack on the
37 > > > gentoo-x86 repo and inherit the eclass. I don't know why EAPI needs
38 > > > to come into it at all.
39 > >
40 > > Stacking on gentoo-x86 means you get *everything* for that repository.
41 > > If all you want is a random function out of eutils, that's a *lot* of
42 > > uncontrolled change to have intermixed with your overlays eclasses
43 > > (even worse, if the eclasses truly overlay into gentoo-x86, that
44 > > introduces compatibility issues there too).
45 >
46 > Yeah, it seems like the ability to do partial stacking would be nice.
47 > Perhaps to do so, one wouldn't stack by default but would have a way to
48 > specify cross-repo dependencies (including eclasses) or file-specific
49 > UUIDs of some sort.
50
51 We can specify cross repository dependencies (this repo needs
52 that repo) already via layout.conf; partial gets a bit messy, but may
53 be useful at the user level.
54
55
56 > > > > aside from meaning that the format definition can now *vary*,
57 > > > > which is great for wasting dev time and screwing up compatibility,
58 > > > > it opens up tweaking/customizing that functionality- aka,
59 > > > > fragmentation/divergence.
60 > > >
61 > > > People doing that outside gentoo-x86 should do it the same way as
62 > > > ones within it, by bumping the eclass to a new unique name. Ideally
63 > > > one that's not just a numeric value so it won't conflict with ours,
64 > > > in the same way as EAPI naming.
65 > >
66 > > They should, but api compatibility of an eclass *can* be fluid- in the
67 > > past it was a locked API purely because of portage environment saving
68 > > issues. That's been resolved, there isn't any strict requirement that
69 > > the eclass maintain API compat now. You're trying to rely on people
70 > > doing best practices- for format building blocks
71 > > (use_with/usex/unpack/etc), that's not sane.
72 >
73 > Which still pisses me off. It's like a shared library changing its API
74 > without bumping SONAME.
75
76 I think you're viewing this wrong; if we're talking about openssl
77 breaking API/ABI w/out bumping soname, sure. It's one component that
78 is distributed alone, but consumed by others. There is no way to
79 atomically deploy the new API at the same time as all of the consumers
80 being updated for it.
81
82 That is /not/ the case of gentoo-x86; eclasses for us are equivalent
83 to bundled libs. Overlay stacking just makes it possible for a third
84 party component to reach in and use what is effectively an internal
85 lib.
86
87 This is even more true for repositories other than gentoo-x86;
88 gentoo-x86 is just in the weird position of being both public and
89 private.
90
91
92 > That makes me wonder whether there's some way we
93 > could "enforce" it, at least on the level of repoman or test suites to
94 > examine whether the public interface changed, perhaps by generating a
95 > cache of the interfaces and comparing to them.
96
97 Not without some doc/annotation of each function. The fact functions
98 are basically jump targets, w/ the function doing shift's/$@ to get at
99 it's args makes this very, very hard to introspect and validate.
100
101 Tests are the realistic option, or parsing an annotation defining the
102 functions prototype, caching that, and comparing it across versions.
103
104 That's realistically a seperate discussion- one snagging betelgeuse
105 (and that libbash gSoC student) might result in some benefit.
106
107
108 > > I suspect an easier way to wrap this thread up is if you just state
109 > > what you want for backwards compatibility- in a seperate thread you
110 > > already proposed basically locking out systems older than 6 months,
111 > > and this discussion (moreso the "eapi slows our development" subtext)
112 > > is along the same lines.
113 >
114 > Actually Zac said that, and I was trying to clarify if that's really
115 > what he was saying. 9-12 months is more my feeling, as it gets extremely
116 > difficult to maintain Gentoo systems without guru-level knowledge around
117 > there. (Spoken as someone who still gets support emails from a couple of
118 > previous positions.)
119 >
120 > While I would like there to be a "proper" way to express repo-level
121 > dependencies, properly announce deprecation and updates (e.g. to bash 4)
122 > in advance as a feature integrated with the PM, and so on, I don't think
123 > we should block our ability to move forward on these things.
124
125 We're not really blocked, frankly. For repository format changes,
126 while we lack versioning... it can be done. There just hasn't been
127 enough of a reason to do it, *yet* (it's been on my todo for a while
128 since there is some stuff I want that requires it).
129
130 For deploying EAPI, we're able to do it pretty quickly if we wanted
131 to; where we're boned is in profiles, and that will /not/ change.
132 There is no magic solution to it- from a data structure standpoint,
133 either we have to duplicate chunks of the profiles for backwards
134 compatibility, or we have to keep it very low in EAPI deps.
135
136 That's just the fact of life for profiles; it's a central data struct,
137 as such it's fairly bound to LCD requirements.
138
139
140 > The
141 > situation is essentially the same as it's always been, but our old
142 > solution is no longer considered good enough and we don't have a new one
143 > in place, so we're just sitting here.
144
145 Not really; the old solution was "deploy, then have to wait 6 months
146 for small stuff, year for big stuff".
147
148 For format changes, we can move *much* faster- 2 months basically
149 (month of portage sitting in unstable, allowing unstable ebuilds to
150 use the EAPI, then portage stabled in the second month effectively
151 stabling the EAPI).
152
153 For the profiles, we can move forward at the same rate if desired in
154 terms of using the new functionality, although for avoiding lock out
155 (preserving the EAPI upgrade pathway) duplication may be required or a
156 slower rate of EAPI consumption.
157
158 Those times are accurate- that's what we *could* do. EAPI versions
159 being cut slower is a whole other issue (council having to sign off,
160 bribing portage to add stuff, etc), and that issue should be addressed
161 directly- any compat mechanism will run into the same issue there, so
162 the mechanism isn't the issue.
163
164
165 > > how derivatives should be handled,
166 >
167 > With white gloves. More seriously, people making derivatives should have
168 > maximal freedom to experiment, and I'm guessing most of them don't want
169 > to deal with modifying 3 different PMs written at least partially in 3
170 > different languages. They'd rather instantaneously support things in the
171 > same language they use for everything else.
172
173 Full experimentation has typically required modifying the PM to extend
174 functionality- you're focusing just on bash bits. Bash bits are easy-
175 you can hack that at the eclass level w/out an EAPI half the time.
176 Frankly, that's not the stuff people get hung up on.
177
178 Realistically, the interesting stuff that people want have been more
179 than just bash.
180
181 Simple example, you can't do USE deps, slot deps, repository deps,
182 iuse defaults, etc, w/out modifying the PM. That's just the way it
183 is, as such you choose your preferred PM, get the custom eapi going,
184 if it's more than a one off prototype you bribe others to support it,
185 they do.
186
187 I don't see that changing; while folks can complain about it, there
188 are hard technical reasons this is how it is- those issues have to be
189 solved (no amount of complaining can solve 'em) ;)
190
191 ~harring

Replies

Subject Author
Re: [gentoo-dev] new `usex` helper Donnie Berkholz <dberkholz@g.o>