Gentoo Archives: gentoo-amd64

From: Duncan <1i5t5.duncan@×××.net>
To: gentoo-amd64@l.g.o
Subject: [gentoo-amd64] Re: Why Is Gentoo So Far Behind?
Date: Tue, 16 Jun 2009 15:20:00
Message-Id: pan.2009.06.16.15.19.46@cox.net
In Reply to: [gentoo-amd64] Why Is Gentoo So Far Behind? by Frank Peters
1 Frank Peters <frank.peters@×××××××.net> posted
2 20090615222731.b12f5121.frank.peters@×××××××.net, excerpted below, on
3 Mon, 15 Jun 2009 22:27:31 -0400:
4
5 > In a lot of cases, for example perl, Xorg, and gcc, the Gentoo
6 > distribution lags far behind the latest available releases. Even
7 > allowing the "~amd64" unstable series, this remains true. Why is this
8 > so?
9
10 Others posted their take. Here's mine.
11
12 I don't know enough about perl to have a reasonable opinion there, but I
13 besides using them, I follow the Gentoo dev list, and happen to know
14 what's going on with the other two.
15
16 Consider what a well tested and working gcc means to Gentoo, as opposed
17 to what it means for your typical binary distribution. Really, that
18 should be enough right there if you think about it, but let's just put it
19 in writing. In a binary distribution, a gcc that fails to build
20 particular packages is no big deal. In Gentoo, it's a *MAJOR* issue. In
21 a binary distribution, a gcc that gets broken somehow is again, no big
22 deal. In Gentoo, it's a *MAJOR* big deal, possibly necessitating a
23 complicated recovery procedure involving unpacking a stage tarball
24 somewhere and binpkging its gcc, to then install over the broken one on
25 the main system.
26
27 So, naturally, Gentoo's way more cautious about unmasking a particular
28 gcc version. While micro-version changes (4.3.2 -> 4.3.3) are generally
29 bug-fix only anyway and thus get moved thru the process pretty fast,
30 normally for minor version changes (4.3 -> 4.4), the process is far
31 slower and more complex. I regularly unmask and test new gcc versions,
32 so I know from personal experience what it means and the hassle early
33 users go thru.
34
35 First, pre-release, weekly snapshots and definitely the -rcs are
36 available in the overlays, for anyone wishing to go thru the hassle of
37 testing them. Gentoo devs therefore get a bit of a head-start, knowing
38 the trouble areas and often patching troublesome packages to build with
39 the new gcc before it's even released. Then, when it's released
40 upstream, the new gcc ebuild is usually in the tree, hard-masked for
41 testing, the same day. Based on the pre-release overlay testing, they
42 know the ebuild itself generally works by then, and barring unusual
43 issues, gcc itself should compile and install from the ebuild.
44
45 However, at release, there's dozens of packages that have yet to be
46 updated to be able to actually build with the new gcc. Many of them
47 require patches. Others require restricting certain CFLAGS or the like.
48 A gcc upgrade tracker bug is normally open by then, with a list of all
49 the individual package bugs. As patches are developed and applied (at
50 this point, to ~arch packages), the bugs are resolved, and the list of
51 unresolved bugs on the tracker shrinks.
52
53 Meanwhile, keep in mind that another difference between Gentoo and binary
54 distributions is that Gentoo effectively ships often tens, sometimes
55 hundreds, of different versions of the same package, due to USE flags.
56 Obviously, even testing every package with a late gcc -rc version isn't
57 going to catch all the bugs, because each package is effectively many
58 slightly different packages, due to USE flag combinations, and it's
59 simply impossible to test them all, period. Thus, after release, users
60 like me start testing, and often discover NEW ways in which a particular
61 package breaks with the new gcc, filing even MORE bugs to add to the
62 tracker, and eventually get fixed. The binary distributions really have
63 it easy in this regard, as they ship one, perhaps two versions of a
64 package, with various bits enabled or disabled, take it or leave it, or
65 compile it yourself, in which case they do NOT provide support, while
66 Gentoo does.
67
68 So eventually an ~arch version of most packages has been patched and
69 tested to work (under at least some configurations) with the new gcc, and
70 it's considered on the way to stable, enough to unmask it to ~arch.
71
72 Then the process not quite, but almost, starts over again. Not quite
73 because at least they have the list of packages and known ways to fix
74 them, now.
75
76 Normal package stabilization qualification is 30-days in ~arch without an
77 open bug, at which point a package maintainer opens a keyword
78 stabilization bug, asking the various archs to test and keyword stable.
79 (Note that it's not the package maintainer that marks stable, it's the
80 arch devs and their ATs, who test it, marking it stable only if it works
81 with an all-stable system config. Also note that while Gentoo does have
82 package.keywords as a method to run a partially unstable system, such a
83 system is /not/ tested, and thus is far more likely to run into issues
84 than an all-stable or all-unstable system.)
85
86 However, with a toolchain package like gcc, the process is far more
87 complex than that. Remember that list of typically a hundred packages or
88 more that had to be patched to build with the new gcc? NOW all those
89 packages have to make it to stable! Only when there's a stable version
90 of every one of those packages in the list that can build with the new
91 gcc version, can that gcc version /itself/ move to stable!
92
93 /Now/ you should be /beginning/ to appreciate just how complex the
94 journey of a new gcc version is, from pre-release testing in the overlay,
95 to release onward masked testing in the tree, to unmasking to ~arch, to
96 final stabilization, along with /hundreds/ of new versions of other
97 packages with the required patches to build with the new gcc. That's a
98 tough order to follow, and it's really amazing that the process works as
99 well as it does.
100
101 But, let's also consider what happens from a user perspective when a new
102 gcc is setup on the system, and what it might mean if it was done too
103 early and broke some packages, therefore requiring keeping both it and
104 the older version around.
105
106 When a new gcc is installed and people start to use it to compile
107 packages, a lot of things can break, until a full emerge --emptytree
108 @system @world is performed. Again, as a new gcc tester, I'm rather well
109 acquainted with this. But if you've done such an upgrade and removed the
110 old gcc without doing that --emptytree rebuild, you've probably seen at
111 least the most infamous problem, the libstdc++ errors due to all those
112 *.la libtool files pointing at the old gcc libstdc++ location instead of
113 the new one. For that there's the fix_libtool_files.sh script, and it
114 does a /remarkably/ good job. However, consider those guys testing those
115 weekly gcc snapshots in the overlay! How many times are they going to
116 run fix_libtool_files.sh to point to the new weekly snapshot?
117
118 Meanwhile, what about all those packages that break with the new gcc and
119 don't have patches applied yet? Consider for example, kde4. kde4
120 depends on cmake to build. cmake is gcc version sensitive. Even when it
121 builds against a new gcc, that means it won't work with the old one.
122 Thus, while ordinarily if a package won't build with the new gcc, you can
123 gcc-config back to the old one and rebuild it that way, that doesn't work
124 for kde4, because now you must rebuild cmake, and often several other
125 dependencies as well, just to build that one kde4 package that won't
126 build with the new gcc. Then you gcc-config back to the new version, and
127 have to rebuild cmake and possibly other dependencies /again/ to continue
128 with the other packages. Sometimes the dependencies just can't be made
129 to fit together in a working way, and a user must give up, and remerge a
130 significant part of his system with the old gcc again, until a few more
131 patches are available.
132
133 Of course, particularly those who unmask new gcc versions that aren't
134 even in ~arch yet but to some extent ~arch users as well, must get used
135 to searching for bugs on packages that won't compile with the new gcc, to
136 see if there's a patch there, that hasn't been actually applied to a
137 package yet. Sometimes they have to go looking elsewhere as well,
138 Debian, Fedora, etc, for patches that they may have that haven't made it
139 to Gentoo bugs, just yet. All that's a part of running a new gcc
140 version, and why it takes so long to get to stable.
141
142 Now, all this is enough of a problem for someone who deliberately
143 unmasked the new gcc for testing, before it was even ~arch, or even, to a
144 lessor extent as there are fewer issues by then, for ~arch users. But
145 consider the protest stable users would (justifiably) raise if they were
146 subjected to this! It's bad enough that if they follow the
147 recommendation, they have to emerge --emptytree @system @world. If they
148 choose not to do that, they must at least run fix_libtool_files.sh, or c+
149 + apps quit compiling. And we have enough users (and the bugs they file)
150 that don't even know how to do that, or complain about having to do so.
151 NOW consider those SAME users having to deal with all the stuff the early
152 testers and ~arch users deal with, if a gcc version is keyworded stable
153 before its time!
154
155 As you can see, life's a LOT more difficult for Gentoo devs when a new
156 gcc version comes out than it is for your typical binary distribution.
157 If anything, it's actually a wonder that gcc versions get stabilized as
158 fast as they do, and that we're not still back on gcc-3.something.
159
160 The problem with xorg is rather different, and much simpler to explain.
161 Basically, it usually comes down to all those proprietaryware graphics
162 drivers users. As with most distributions, Gentoo is hesitant to
163 stabilize a particular xorg until the users of the various graphics cards
164 using proprietaryware drivers have a supported graphics driver they can
165 upgrade to as well. As the quote in my sig describes, the
166 proprietaryware driver vendors really do in this case serve as xorg
167 masters, holding it back otherwise unnecessarily.
168
169 Then for xorg in particular, there's the whole configuration change thing
170 going. Before a version of xorg with major config changes goes stable,
171 an upgrade guide must be created, detailing how to deal with the config
172 changes along with any other issues that arise. As others have
173 mentioned, docs, formerly an area where Gentoo shined and still an area
174 where they're reasonably good (how many other distributions cover upgrade
175 config changes in such detail, not many!), has been dragging a bit
176 behind, lately.
177
178 Finally, because X is such a major package, there's also a bit of the
179 same issues to deal with that I described for gcc above, but nowhere near
180 to the same level, and at least for stable, as I said, it's very often
181 the proprietaryware driver vendors holding things up, and when it's not,
182 it's often the development of the upgrade docs.
183
184 > I had first considered moving to Gentoo in the fall of 2008, but after
185 > noticing that the only version of gcc available at that time was
186 > gcc-3.x, I postponed the change. In the spring of 2009, Gentoo finally
187 > moved up to gcc-4.3.x and then I made the transition. But the update to
188 > the 4.3 series was a long time in coming.
189
190 The above covers that in great detail. Also, again as others have noted
191 and as I alluded to above, there are in fact snapshot and -rc ebuilds
192 available from long before a gcc version is ever released. But for the
193 reasons covered above, they aren't in the tree prerelease, and when they
194 do hit the tree at upstream release, they're first hard masked, then
195 unmasked to ~arch, thru an extremely complex process that takes quite
196 sometime.
197
198 But they're certainly available for those brave/hardy/stupid enough to
199 try them!
200
201 > The latest perl, released some time ago, is version 5.10 but Gentoo
202 > includes only 5.8.8.
203
204 As I said, no comment there, as I simply don't know enough about it to
205 have an opinion, educated or not.
206
207 > The latest Xorg has restructured certain libxcb dependencies, which has
208 > caused a lot of problems for a lot of packages, and Gentoo is behind
209 > these changes as well.
210 >
211 > (Ironically, it was this libxcb issue as well as the whole Xorg
212 > modularity mess that first motivated me to seek out Gentoo.)
213
214 Actually, libxcb was in fact one of the gcc-like complexity issues of
215 xorg. In this case, previous versions had a particular library that many
216 X based packages built against, that was no longer available in the newer
217 version. For those running LDFLAGS=--as-needed (as I do), the problem
218 wasn't all that bad. However, for those NOT running with that flag
219 (which does break some packages, and used to break a LOT more, before
220 flameeyes started working on the problem), the easiest way around the
221 problem was to recompile everything that broke -- in a specific order
222 that portage didn't always manage properly -- and there were a LOT of
223 package in this broken list.
224
225 So, stabilization (and indeed, the move from the overlay to the tree and
226 ~arch) was delayed while they worked out and tested a solution. There's
227 now a script that can be run that takes care of most of the problems,
228 without a recompile. Again, it's a libtool *.la file issue. Then that
229 solution had to be documented...
230
231 Yes, some binary-only distributions beat us to it, but again, all they
232 have to worry about is getting the compilation correct on the single
233 version of each package they normally provide (for each arch). They
234 don't have to worry about the recompile issue that was Gentoo's big
235 holdup here for xorg/libxcb, or pretty much all the time for gcc.
236
237 > Now I am not actually voicing a complaint. Gentoo, IMO, is still the
238 > best distribution for Linux. I am just wondering why there is such a
239 > great lag before a package version is deemed stable -- or even unstable.
240 > In my experience with maintaining my own Linux system, I never had any
241 > great issues with always installing the latest "bleeding" edge software.
242
243 I'm glad you're not complaining, and actually, I understand why someone
244 not acquainted with the particular issues a from-source distribution
245 deals with, particularly a distribution used by and depended on by as
246 many people as Gentoo... I can well understand how they might find that
247 Gentoo looks slower on the uptake than it should be.
248
249 But once you understand what's going on behind the scenes, and how much
250 work Gentoo devs, ATs and ~arch users put in to ensure a particular
251 package is really stable before it's keyworded that way (and why even
252 with all that work sometimes things slip thru the cracks), the mystery
253 then becomes much more one of how in the world it all gets done, and how
254 in the world it continues to function as well as it does!
255
256 Of course, if Gentoo were to even do something as simple as do away with
257 most USE flags, cutting the number of possible package variables
258 accordingly, it would go a HUGE way toward eliminating all that extra
259 work and all those extra bugs from all the variations. Similarly, Gentoo
260 could do away with the CFLAGS etc settings, or just filter them for most
261 packages, again cutting down on the number of bugs tremendously.
262 Gentoo's offering would then be far closer to what the binary
263 distributions offer. Then, since we'd have just done away with pretty
264 much the entire set of advantages of building from source, we could do
265 away with the from-source entirely, and just ship the binaries, bringing
266 us into pretty much direct comparison with the binary distributions.
267
268 Of course, that would kill the whole reason Gentoo's so great to run for
269 many of us. We LIKE it's customizability, even if it means thinner
270 testing and thus dealing with a few extra bugs and longer stabilization
271 cycles, and even if it does mean waiting a bit for packages to compile!
272
273 Meanwhile, it should also be noted that "in my experience with
274 maintaining my own Linux system", doesn't quite compare to dealing with
275 THOUSANDS of people running one or more systems each, many with entirely
276 DIFFERENT configurations, and the headaches that can mean, trying to get
277 something working on ALL of them at once, without breaking the obscure
278 and rather strange configuration that guy off in the corner with even
279 more customization than usual (umm... that'd be me! see the make.conf I
280 posted a few days ago for just one example of "strange" and "even more
281 customized than usual" =:^) is running.
282
283 Yes, that means even if that system one was maintaining was a Linux from
284 Scratch system. (I've not done Linux from Scratch yet and probably never
285 will, because Gentoo's the perfect balance of customization and
286 automation for me and I discovered Gentoo before Linux from Scratch, but
287 a lot of Gentoo users have.)
288
289 --
290 Duncan - List replies preferred. No HTML msgs.
291 "Every nonfree program has a lord, a master --
292 and if you use the program, he is your master." Richard Stallman