Frank Peters <frank.pet...@comcast.net> posted 20090615222731.b12f5121.frank.pet...@comcast.net, excerpted below, on Mon, 15 Jun 2009 22:27:31 -0400:
> In a lot of cases, for example perl, Xorg, and gcc, the Gentoo > distribution lags far behind the latest available releases. Even > allowing the "~amd64" unstable series, this remains true. Why is this > so? Others posted their take. Here's mine. I don't know enough about perl to have a reasonable opinion there, but I besides using them, I follow the Gentoo dev list, and happen to know what's going on with the other two. Consider what a well tested and working gcc means to Gentoo, as opposed to what it means for your typical binary distribution. Really, that should be enough right there if you think about it, but let's just put it in writing. In a binary distribution, a gcc that fails to build particular packages is no big deal. In Gentoo, it's a *MAJOR* issue. In a binary distribution, a gcc that gets broken somehow is again, no big deal. In Gentoo, it's a *MAJOR* big deal, possibly necessitating a complicated recovery procedure involving unpacking a stage tarball somewhere and binpkging its gcc, to then install over the broken one on the main system. So, naturally, Gentoo's way more cautious about unmasking a particular gcc version. While micro-version changes (4.3.2 -> 4.3.3) are generally bug-fix only anyway and thus get moved thru the process pretty fast, normally for minor version changes (4.3 -> 4.4), the process is far slower and more complex. I regularly unmask and test new gcc versions, so I know from personal experience what it means and the hassle early users go thru. First, pre-release, weekly snapshots and definitely the -rcs are available in the overlays, for anyone wishing to go thru the hassle of testing them. Gentoo devs therefore get a bit of a head-start, knowing the trouble areas and often patching troublesome packages to build with the new gcc before it's even released. Then, when it's released upstream, the new gcc ebuild is usually in the tree, hard-masked for testing, the same day. Based on the pre-release overlay testing, they know the ebuild itself generally works by then, and barring unusual issues, gcc itself should compile and install from the ebuild. However, at release, there's dozens of packages that have yet to be updated to be able to actually build with the new gcc. Many of them require patches. Others require restricting certain CFLAGS or the like. A gcc upgrade tracker bug is normally open by then, with a list of all the individual package bugs. As patches are developed and applied (at this point, to ~arch packages), the bugs are resolved, and the list of unresolved bugs on the tracker shrinks. Meanwhile, keep in mind that another difference between Gentoo and binary distributions is that Gentoo effectively ships often tens, sometimes hundreds, of different versions of the same package, due to USE flags. Obviously, even testing every package with a late gcc -rc version isn't going to catch all the bugs, because each package is effectively many slightly different packages, due to USE flag combinations, and it's simply impossible to test them all, period. Thus, after release, users like me start testing, and often discover NEW ways in which a particular package breaks with the new gcc, filing even MORE bugs to add to the tracker, and eventually get fixed. The binary distributions really have it easy in this regard, as they ship one, perhaps two versions of a package, with various bits enabled or disabled, take it or leave it, or compile it yourself, in which case they do NOT provide support, while Gentoo does. So eventually an ~arch version of most packages has been patched and tested to work (under at least some configurations) with the new gcc, and it's considered on the way to stable, enough to unmask it to ~arch. Then the process not quite, but almost, starts over again. Not quite because at least they have the list of packages and known ways to fix them, now. Normal package stabilization qualification is 30-days in ~arch without an open bug, at which point a package maintainer opens a keyword stabilization bug, asking the various archs to test and keyword stable. (Note that it's not the package maintainer that marks stable, it's the arch devs and their ATs, who test it, marking it stable only if it works with an all-stable system config. Also note that while Gentoo does have package.keywords as a method to run a partially unstable system, such a system is /not/ tested, and thus is far more likely to run into issues than an all-stable or all-unstable system.) However, with a toolchain package like gcc, the process is far more complex than that. Remember that list of typically a hundred packages or more that had to be patched to build with the new gcc? NOW all those packages have to make it to stable! Only when there's a stable version of every one of those packages in the list that can build with the new gcc version, can that gcc version /itself/ move to stable! /Now/ you should be /beginning/ to appreciate just how complex the journey of a new gcc version is, from pre-release testing in the overlay, to release onward masked testing in the tree, to unmasking to ~arch, to final stabilization, along with /hundreds/ of new versions of other packages with the required patches to build with the new gcc. That's a tough order to follow, and it's really amazing that the process works as well as it does. But, let's also consider what happens from a user perspective when a new gcc is setup on the system, and what it might mean if it was done too early and broke some packages, therefore requiring keeping both it and the older version around. When a new gcc is installed and people start to use it to compile packages, a lot of things can break, until a full emerge --emptytree @system @world is performed. Again, as a new gcc tester, I'm rather well acquainted with this. But if you've done such an upgrade and removed the old gcc without doing that --emptytree rebuild, you've probably seen at least the most infamous problem, the libstdc++ errors due to all those *.la libtool files pointing at the old gcc libstdc++ location instead of the new one. For that there's the fix_libtool_files.sh script, and it does a /remarkably/ good job. However, consider those guys testing those weekly gcc snapshots in the overlay! How many times are they going to run fix_libtool_files.sh to point to the new weekly snapshot? Meanwhile, what about all those packages that break with the new gcc and don't have patches applied yet? Consider for example, kde4. kde4 depends on cmake to build. cmake is gcc version sensitive. Even when it builds against a new gcc, that means it won't work with the old one. Thus, while ordinarily if a package won't build with the new gcc, you can gcc-config back to the old one and rebuild it that way, that doesn't work for kde4, because now you must rebuild cmake, and often several other dependencies as well, just to build that one kde4 package that won't build with the new gcc. Then you gcc-config back to the new version, and have to rebuild cmake and possibly other dependencies /again/ to continue with the other packages. Sometimes the dependencies just can't be made to fit together in a working way, and a user must give up, and remerge a significant part of his system with the old gcc again, until a few more patches are available. Of course, particularly those who unmask new gcc versions that aren't even in ~arch yet but to some extent ~arch users as well, must get used to searching for bugs on packages that won't compile with the new gcc, to see if there's a patch there, that hasn't been actually applied to a package yet. Sometimes they have to go looking elsewhere as well, Debian, Fedora, etc, for patches that they may have that haven't made it to Gentoo bugs, just yet. All that's a part of running a new gcc version, and why it takes so long to get to stable. Now, all this is enough of a problem for someone who deliberately unmasked the new gcc for testing, before it was even ~arch, or even, to a lessor extent as there are fewer issues by then, for ~arch users. But consider the protest stable users would (justifiably) raise if they were subjected to this! It's bad enough that if they follow the recommendation, they have to emerge --emptytree @system @world. If they choose not to do that, they must at least run fix_libtool_files.sh, or c+ + apps quit compiling. And we have enough users (and the bugs they file) that don't even know how to do that, or complain about having to do so. NOW consider those SAME users having to deal with all the stuff the early testers and ~arch users deal with, if a gcc version is keyworded stable before its time! As you can see, life's a LOT more difficult for Gentoo devs when a new gcc version comes out than it is for your typical binary distribution. If anything, it's actually a wonder that gcc versions get stabilized as fast as they do, and that we're not still back on gcc-3.something. The problem with xorg is rather different, and much simpler to explain. Basically, it usually comes down to all those proprietaryware graphics drivers users. As with most distributions, Gentoo is hesitant to stabilize a particular xorg until the users of the various graphics cards using proprietaryware drivers have a supported graphics driver they can upgrade to as well. As the quote in my sig describes, the proprietaryware driver vendors really do in this case serve as xorg masters, holding it back otherwise unnecessarily. Then for xorg in particular, there's the whole configuration change thing going. Before a version of xorg with major config changes goes stable, an upgrade guide must be created, detailing how to deal with the config changes along with any other issues that arise. As others have mentioned, docs, formerly an area where Gentoo shined and still an area where they're reasonably good (how many other distributions cover upgrade config changes in such detail, not many!), has been dragging a bit behind, lately. Finally, because X is such a major package, there's also a bit of the same issues to deal with that I described for gcc above, but nowhere near to the same level, and at least for stable, as I said, it's very often the proprietaryware driver vendors holding things up, and when it's not, it's often the development of the upgrade docs. > I had first considered moving to Gentoo in the fall of 2008, but after > noticing that the only version of gcc available at that time was > gcc-3.x, I postponed the change. In the spring of 2009, Gentoo finally > moved up to gcc-4.3.x and then I made the transition. But the update to > the 4.3 series was a long time in coming. The above covers that in great detail. Also, again as others have noted and as I alluded to above, there are in fact snapshot and -rc ebuilds available from long before a gcc version is ever released. But for the reasons covered above, they aren't in the tree prerelease, and when they do hit the tree at upstream release, they're first hard masked, then unmasked to ~arch, thru an extremely complex process that takes quite sometime. But they're certainly available for those brave/hardy/stupid enough to try them! > The latest perl, released some time ago, is version 5.10 but Gentoo > includes only 5.8.8. As I said, no comment there, as I simply don't know enough about it to have an opinion, educated or not. > The latest Xorg has restructured certain libxcb dependencies, which has > caused a lot of problems for a lot of packages, and Gentoo is behind > these changes as well. > > (Ironically, it was this libxcb issue as well as the whole Xorg > modularity mess that first motivated me to seek out Gentoo.) Actually, libxcb was in fact one of the gcc-like complexity issues of xorg. In this case, previous versions had a particular library that many X based packages built against, that was no longer available in the newer version. For those running LDFLAGS=--as-needed (as I do), the problem wasn't all that bad. However, for those NOT running with that flag (which does break some packages, and used to break a LOT more, before flameeyes started working on the problem), the easiest way around the problem was to recompile everything that broke -- in a specific order that portage didn't always manage properly -- and there were a LOT of package in this broken list. So, stabilization (and indeed, the move from the overlay to the tree and ~arch) was delayed while they worked out and tested a solution. There's now a script that can be run that takes care of most of the problems, without a recompile. Again, it's a libtool *.la file issue. Then that solution had to be documented... Yes, some binary-only distributions beat us to it, but again, all they have to worry about is getting the compilation correct on the single version of each package they normally provide (for each arch). They don't have to worry about the recompile issue that was Gentoo's big holdup here for xorg/libxcb, or pretty much all the time for gcc. > Now I am not actually voicing a complaint. Gentoo, IMO, is still the > best distribution for Linux. I am just wondering why there is such a > great lag before a package version is deemed stable -- or even unstable. > In my experience with maintaining my own Linux system, I never had any > great issues with always installing the latest "bleeding" edge software. I'm glad you're not complaining, and actually, I understand why someone not acquainted with the particular issues a from-source distribution deals with, particularly a distribution used by and depended on by as many people as Gentoo... I can well understand how they might find that Gentoo looks slower on the uptake than it should be. But once you understand what's going on behind the scenes, and how much work Gentoo devs, ATs and ~arch users put in to ensure a particular package is really stable before it's keyworded that way (and why even with all that work sometimes things slip thru the cracks), the mystery then becomes much more one of how in the world it all gets done, and how in the world it continues to function as well as it does! Of course, if Gentoo were to even do something as simple as do away with most USE flags, cutting the number of possible package variables accordingly, it would go a HUGE way toward eliminating all that extra work and all those extra bugs from all the variations. Similarly, Gentoo could do away with the CFLAGS etc settings, or just filter them for most packages, again cutting down on the number of bugs tremendously. Gentoo's offering would then be far closer to what the binary distributions offer. Then, since we'd have just done away with pretty much the entire set of advantages of building from source, we could do away with the from-source entirely, and just ship the binaries, bringing us into pretty much direct comparison with the binary distributions. Of course, that would kill the whole reason Gentoo's so great to run for many of us. We LIKE it's customizability, even if it means thinner testing and thus dealing with a few extra bugs and longer stabilization cycles, and even if it does mean waiting a bit for packages to compile! Meanwhile, it should also be noted that "in my experience with maintaining my own Linux system", doesn't quite compare to dealing with THOUSANDS of people running one or more systems each, many with entirely DIFFERENT configurations, and the headaches that can mean, trying to get something working on ALL of them at once, without breaking the obscure and rather strange configuration that guy off in the corner with even more customization than usual (umm... that'd be me! see the make.conf I posted a few days ago for just one example of "strange" and "even more customized than usual" =:^) is running. Yes, that means even if that system one was maintaining was a Linux from Scratch system. (I've not done Linux from Scratch yet and probably never will, because Gentoo's the perfect balance of customization and automation for me and I discovered Gentoo before Linux from Scratch, but a lot of Gentoo users have.) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman