The problem I had with Open source *nix is too many sub-choices.
BSD or Linux?
Which distribution?
KDE or Gnome?
MySQL or PostgresSQL?
Oh... this app dosn't work with KDE, switch to gnome.
hmm, this daemon requires PostGres, switch to that.
Oh, but this other app dosn't like that.
setup virtual machines to have different configs in each one...
notice common security issue root with Linux that Root = User number zero.
OK, I'll digress into a short rant here.
Why choose the default value to represent be the all powerful super-user?
What I had done was run a server process in each virtual machine starting each one as it's own user "UserA" "UserB", etc. so I gave a command line like "service -runas UserA" and "service -runas UserB"; and everything worked.
However, what was happening was the service launcher parsed "UserA" into a numerical value; and since there were no digits, it returned the default of 0. Which was root, so for a short while I could have been running with a huge security vulnerability.
There was also the case of a code submission that basically, and intentionally did "if (user = 0)"; which if you know C style languages means to SET the user id to 0, not to test for equality.
Basically, '0' is too easy to get accidentally or slip in by stealth.
Nowdays I would design it so the root user ID is randomly generated (or specified) per install; so that instead of checking for '0' you have to say "if (user == GetRootIDFromSystem)"; and it would be easier to scan code for all uses of that function call, instead of all uses of the number zero!