First of all, I would like to say that I love Gentoo. This is the best (meta)distro because it combines flexibility with easyness. Cheers to all developers. That said, I would like to express some points where I think Gentoo should improve. Most of them are because Gentoo is so big now that some solutions that worked in the past need to be re-thinked.
1. USE flags
1.a. Name conventions
Today there are so many use flags that is very difficult to remember each one. Like many huge projects did with variables, we need to change from the short naming style to long descritive names. As an example, to set apache support, we have 3 flags: apache, apache1 and apache 2.
(Oops.. When looking for the descriptions I couldn't find apache1 flag. But I'm sure I saw it somewhere. That's what I mean with "hard to remember".) How about something like:
net.
www.apache = set support for apache (for the version avaliable in the stable tree)
net.www.apache.version_1 = set support for apache forcing version 1
net.www.apache.version_2 = set support for apache forcing version 2
This may be longer, but it will actualy save us time because it will be much easier to know what a flag does.
1.b. Other flags
There are video, input_device, linguas, etc... How about unifying them all?
2. The tree
2.a. Consistency
We need some rules to consistently locate thing on the tree. There is net-www/apache and www-apache... Why isn't apache in www-apache? What does www-* mean and how is it different from net-www? What should go in one or the other?
There are some ebuids that aren't used to install packages, but actualy to set configurations and extras. I'm talking about things like [[the one that is used to make win-codecs work]] and [[firefox flash plug-in]]. There are two problems here:
2.b. A single way to set things.
Having different ways to set similar things is confusing. There are things set using use flags, some need an extra emerge, and some may even be instaled using the application internal installer. It's great to have options, but not when this options make it difficult to understand how someone set something. If we can install firefox plug-ins using emerge, we should de-activate the internal installation function and give a message like "To install plug-ins use emerge mozilla-plugin-plugin_name". It would be ideal if we could set everything using flags, and extra ebuilds should be emerged automaticaly.
2.c The un-emergeable ebuilds
Those ebuilds that aren't suposed to be emerged should be moved to a different location to prevent confusion and clean the tree. I mean the ebuilds that are automaticaly installed when you set a flag. How about an "aux" directory in the tree, copying ll the tree hierarchy there, and moving these ebuilds there? That way, when someone browse the tree, it would be easier to find relevant ebuilds. (Those thousands of modular xorg e-builds should go there.)
3. Directories and locations
3.a Why is the tree and distfiles in /usr? Why is "world" in /var? Word only changes when you install something in your system, so it should be in /etc. The tree and distfiles change a lot (every emerge --sync). How about putting the tree in /var/gentoo/tree and the distfiles in /var/gentoo/distfiles ??? It's just a matter of changing the default. I already do this and I have to tell you: things run better this way. The /var directory is optimized for heavy use, while hte /usr directory is optimized to be solid (well, I optimize them this way because services need /var to be fast and the system needs /usr to be avaliable after a failure (if you hope to fix things)).
3.b We should move some configurations from make.conf. Use flags aren't make configurations. They are gentoo configurations. How about creating /etc/gentoo and putting these configurations there? I think the world file should also be placed there. That way, make.conf should only be changed when you are changing how you want "make" to behave. Use flags change far more often than the rest of make.conf.
3.c This isn't a critical suggestion at all, but I think it's a good idea. We have this .keep files that are used to say that a directory shouldn't be removed. How about putting something in this files: a description of the directory, what should be in it, and why it shouldn't be removed. Well, when you see a .keep file and want to know why it is there, you will only have to open that file and read. Genial, right?
Well... There are some other suggestions, but I'm without time now. I'll continue this latter. BTW, I`m willing to help implementing these if you like them. I'm not able to do everything by my self, but with some help, I'm sure it's possible to do this. Comments are (very) welcome.