IUSE defaults are used in a few different ways:
1 To ensure that critical functionality is enabled.
* Example: force the "unix" module for apache.
2 To avoid an unsatisfied REQUIRED_USE by default.
* Example: having a non-empty RUBY_TARGETS by default.
3 To make Gentoo defaults the upstream defaults.
* Example: right now the defaults for dev-lang/php build
you a "normal" PHP installation.
4 To make the default build agree with the maintainer's personal
preferences.
* Example: enabling hpn in net-misc/openssh by default.
We don't have a policy for how to use them, so we get all four in the
tree. I don't think there are any downsides to #1.
The downside to #2 is that the default choice may be wrong, but the
benefit outweighs that. For a given package, the user either cares about
the USE flags or he doesn't (if it's some deep dependency). Both cases
turn out fine in #2.
A bigger problem arises from #3 and #4: it's no longer simple to get a
minimal system. When various USE flags default on at random, you get
users doing things like USE="-*". We can tell them not to do that,
because of the flags in #1, but in fact very few IUSE defaults are
critical, and most of them are junk. The only way to turn off all the
junk ones without a huge waste of time is USE="-*".
Can we discourage IUSE defaults except for #1 and #2? I'm equally guilty
of #3 and #4, but I now regret them. I would also like to see
explanations in metadata.xml of why +flags are on by default.