> But having 10 good choices is clearly better
Not exactly.
tl;dr: Even if separate Lego pieces are really good by themselves, it's no good if you can't stack them together effortlessly.
------
The problem I see with GNU/Linux ecosystem is incompatibility issues. There are many ways to do one thing, but all of them are incompatible (completely or to a significant extent) with each other.
This is how modern GNU/Linux desktop is a Frankensten's monster made from ton of software pieces somehow glued together with duct tape and compatibility adapters. No consistency, every app works differently etc etc. There are higher-tier projects that try to unify different lower-level modules (e.g. NetworkManager or PulseAudio), but then something still relies on something else, like distro-specific stuff like ifup or netctl or wants raw ALSA, etc etc. Really, it's a mess, and even though I like GNU/Linux as my desktop it's sometimes quite painful to make it "just work", hoping for some sane levels of consistency.
I know, this is not about desktops but it's just most visible there. The actual point is, too many different incompatible implementations lead to integration fatigue. Or frustration because you have to make sacrifices (get either this or that but not both).
This problem is by no means unique or specific to GNU/Linux or FOSS, but it's most visible there.