One of the major problems that I have faced in Gentoo is that whatever I was doing on a larger scale made some people really unhappy. I would even say that the specifics of Gentoo make it even possible for users to get outraged (and obviously, let all the world know how outraged they are) by a few files they don’t like having installed.
This brings the question whether we should struggle to keep all of our users happy, or whether keeping majority of our users satisfied is sufficient.
I don’t believe that it is actually possible to keep everyone happy. It’s a kind of never-ending struggle that consumes valuable time and demands sacrifices. You work on making one user happy, the other one doesn’t like the result. You work towards the second one, third one is unhappy. You satisfy all three of them, now fourth comes outraged with the net result.
The slogan of choice
It is usually impossible to satisfy all the needs with a single solution. That’s the problem Gentoo tries to solve through the slogan of «choice». But let’s not fool ourselves, it’s nowhere near the perfection.
Choice helps, that’s true. But it’s mostly replacing a Swiss Army knife with a bag of tools, and expecting user to choose the one best suited for him. Sometimes it goes even further and the «multi-solutions» that satisfied multiple cases are replaced with the requirement of explicit choice of a single solution.
To be honest, I was never a fan of having too much choice. It’s great whenever it really benefits the community but then there’s the point when the amount of choice starts to have negative impact. It starts making things unnecessarily complex.
One of the resulting problems is making Gentoo harder to use. While I agree that it wasn’t ever suited for users who aren’t ready to deal with various issues, there’s also the «middle grade» of users. Those are the users who want to customize their Gentoo setup but have a limited expert knowledge and time. Those users are most likely to waste their time playing with various configurations and those users are most likely to be affected by various bugs.
Unnecessary complexity means also worse maintainability. The ebuilds end up having more branches, some of the branches used less frequently than the others. In the end, there are variants of the ebuild execution path that are never used and therefore not tested for a long time. While at first developers often test most of reasonable branches, the issues arise with version bumps.
In the end you end up with an ebuild that nobody completely understands, users that are unhappy with breakage and you have no idea how to fix it without making someone unhappy (again).
Keeping users relatively happy
The alternative is the «good enough» solution. Since you can’t keep everyone happy, you go for the second best thing. You keep as many users happy as possible while keeping as few users outraged as possible. If we moved this to the technical matters, this would be keeping the most of user needs possible while optimizing for the common cases.
I believe that this is exactly what Gentoo was designed for, and what keeps it the best choice for many of our users. And I think that we should keep following this path that keeps us between the distributions that keep users behind bars and the distributions that struggle for perfection and where all users know one another.
A good example of this is the late process of removing some of the global USE flags in favor of installing the relevant bits unconditionally. The truth is that the process could be communicated a little better and a bit more fluent but that’s off-topic here.
It should be noted that we are not removing a choice nor taking away freedom. We are making it less privileged, say, more low-level. We are replacing one solution with another. We are not moving back or forth, we’re moving sideways.
The previous solution was good enough for the majority but inflicted a severe head-ache to some users. The new solution is different, yet still good enough for the majority (a little different majority, though) and causes lesser issues to a new minority that dislikes it. And we can improve it further.
This is how I see Gentoo — providing the right tools depending on the scope of the problem and the impact of the solutions. We have USE flags to control problematic parts of software and
INSTALL_MASK to let people remove the rest. Then we have USE flags to control important choices and
EXTRA_ECONF to let people use the remaining switches.
Sadly, there always be an outraged minority in Gentoo, and the few people who don’t have anything better to do but to complain and expect everyone else to do what they believe is best. But I’d rather focus on finding a good enough solution that helps the majority and doesn’t leave the minority helpless.
If we try to bend to every minority, we’ll end up being unable to attend more important bugs. Moreover, we will likely cause even more of them due to the added complexity and fatigue. In the end, the relatively happy users will become unhappy due to bugs, and the mentioned minority will turn outraged anytime their precious features stops working.
In this regard, minimalism seems to be most advised. Follow the QA standards, think well before implementing users’ requests and avoid providing features you won’t be able to support long-term. This way you’ll get the least of the outrage our minorities have for you. While this is a bit ironic, it may also be a good way to provide a most stable user experience.