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 |