I have gone full circle from Windows to OSX to Ubuntu to Debian and now back to Windows, and to be honest, I've never been happier or more productive.
Frustrated with cygwin and practically nothing open source that compiles for windows with any ease or reliability I switched to OSX
I never really liked OSX for how they handle multiple monitors and 1 single menu bar for all open apps and always in the middle monitor. However for the most part, shit just worked. Until I needed to customize things, there would be random gotchas and dead ends with brew. I'd switch to ports and ran into similar issues. Frustrated with those random occurrences I thought why do I need OSX, just go straight to the source where everyone is using apt-get or yum
So off to Ubuntu land I went. It sure wasnt as polished as OSX is, really Apple knows how to polish things to a shine (at least in appearance) however packages always compiled for my programming needs, not a single issue. But then as I was trying to recreate functionality I enjoyed in Win7/OSX I kept running into weird errors with various desktop packages/enhancements. 3+ monitor support is just crappy. Why do I need some other program to slow down my mouse (which was already at the lowest possible setting and still humanly unusable). Ran into similar issues as OP. It's just a really subpar UX experience in Ubuntu. I realize it's free, but people need to be honest and admit it is not as polished as it could be.
I tried Debian and Centos, but same issues, theres always SOMETHING that annoys me.
I don't trust any distro anymore. Claims of "trust me, it 'just works'" always fall flat when you realize thats only for their approved packages which may or may not include what you want to use or use the latest version.
In addition, the programs available just aren't as polished. Everything just felt crappy to use, like a slightly more polished Mac OS9 program.
Then I discovered Unity, and not Ubuntu Unity, but VMWare Workstation Unity. I can run any OSX/Ubuntu/Centos program as if it was a normal windows app. I have access to a shell as can bash to my hearts desire. IntelliJ or Eclipse can remote debug against my VM. If I need to load up XCode I no longer have to dual boot, just launch it from windows via my hackintosh VM. Feel like using VIM, np!
I can simulate my own network. A VM for database, a VM for memcache, a VM for my app server, just like in production. I don't typically do this, but it's possible.
On top of all that, I can snapshot my various VMs so easily. I no longer have to worry about really messing something up with a custom build. If somehow I just destroy something, restore is a click away and takes seconds.
Additionally, with web work, while services like BrowserStack are very good to have I can do this natively in Windows w/o viewing pages through flash. I have an XP, OSX, Ubuntu, and CentOS VM (I've never noticed any FF/Chrome differences between Ubuntu/Centos, I just have CentOS b/c it closely mimic's Amazon Linux)
Now there can be times I'm sure where a specific browser on specific OS version will still need BrowserStack (b/c who wants to manage all those VM combinations) but this covers 99% of my local testing.
Shit just works, for everything, b/c I have a VM I can use for anything specific. Plus there are just more native windows programs that plain work better.
The cherry on top, if you ever want to play some crazy game resolution in eyefinity, I can suspend all VMs and my PC has all the cpu/ram it needs for games.
Virtual machines are just a godsend to me. I get the best of all worlds and the pain of none (well except making sure java/flash is up to date so I don't get a virus)