The desktop situation is an example how choice can also be bad. There are so many desktop alternatives on Linux that it cripples app development. Take a look at an succesfull desktop project running on top of the Linux kernel: Android. They (Google) have build a solid set of layers on top with well documented API, SDK's etc. They created a good working app distribution system (Play) including a low threshold payment system. Voila. done.