To quote other more experienced developers:
"GNU is, and always has been, a political movement that writes software as a means to an end!"
Dynamic Linking is an infinite source of complexity, security leaks, incompatibility, unreliability etc. and yet many perceive it as "good" or even "necessary".
Dynamic linking allows fixing bugs in libraries / updating libraries in one place.
It also allows introducing new bugs whose cause might be hard to find.
Programs are not self-contained, complicating debugging and deploying.
Versioned symbols don't allow fixing bugs in one place.
Most programs don't benefit from library updates.
Dynamic linking is secure.
Few have provided a viable model how dynamic linking is supposed to be secure. But many exploits are actually possible just because of dynamic linking, just look at your favourite exploit site.
"Open Source doesn't magically make anything good. Many open source people are idiots!"
Linux for the most part tries to adhere to Unix principles, this is good. But it also keeps stuff from Unix which should have long been replaced. (terminal madness, anyone?)
And it follows POSIX and all open source best practices.
Clipboard handling totally sucks so incredibly much. Not even lobotomized monkeys on crack could fuck up this badly.
Distributions are incompatible. Most Software has a Windows binary, an OS X binary and a Debian binary, a Ubuntu binary, a Fedora binary, ...
Countless duplicated folders, binaries in /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /opt/bin, ....
There is no canonical way, ever.
Backwards Compatibility, what's that? Compare running twelve year old Windows 98 software on today's Windows to running two year old software on today's Linux.
Linux people love to replace working solutions with giant broken cluster-fuck solutions (see also: Network Manager).
Dynamic linking, even worse than usual.
Linux Desktop Environments usually try to emulate Windows which sucks. Compare that GNOME's thing to the Windows registry.
GNU shit like Auto-tools all over the place.
Cross compilers, what's that.
How does /dev work today?
So far I wasn't able to stand this long enough to seriously comment on it.
hostname is stored in xml in /System/Libraries/Something/Computer/Buttfucking/Documents/Properties.plist
That GUI. What the fuck. You can't maximize windows reliably? No task bar or anything (lolexpose)?
Fucking menubar at the top. Trying to avoid locality as much as possible.
I have to start the file manager to start programs? What the fuck fuckedy fuck fuck fuck?
Everything is giant, rigid, monolithic block.
There is no simple way to combine two things.
In Unix you solve problems by combining existing programs.
In Windows you just add another monolithic block.
Shitty GUIs all over the place. Seriously.
As a result, it's hard to automate things.
Naming sucks. Always. C:\Users and Settings, seriously? (Yes, it has been fixed)
As a hilarious example: syswow64 contains x86 DLLs, system32 contains amd64 DLLs.
Special cases abound.
Compare Unix daemons to Windows services.
Compare Unix X11 programs to Windows magic graphical programs.
Compare Unix text config files to the Windows registry.
The system as a whole is insanely complicated and impossible to understand.
The whole system is impossible to debug. For many problems the only solution is "reinstall".
Swapping out the kernel. Etc..etc..etc