I know the OTA dismissed Windows, but when I switched from OSX to Windows a couple of years ago, I found Scott Hanselman's "Ultimate Developer and Power Users Tool List for Windows" [1] to be indispensable. I've been doing Rails work on Windows since switching, but ymmv depending on what your workflow and toolchain are.
I also found that there were a lot of workarounds/alternatives to software/tools that I thought I would miss on Mac. I've managed to find pretty much everything I needed and/or realized I could easily live without the stuff I couldn't find alternatives for.
Having said all of that, if you have a dependency on something like XCode because you're maintaining an iOS app, you're kinda stuck with a Mac. My experience with Hackintoshes is that even if you buy the right hardware off the latest Hackintosh compatibility list, it's still a bit of a time suck. Alternatively, you could also run OSX in VMWare Workstation/Player, but you don't get graphics acceleration and some OSX software won't run properly in a VM.
I gotta say I've tried to do the VM thing. I REALLY tried. But it just isn't something that will work for any significant amount of time.
It would break with any updates, half the time xcode just wouldn't work, and it would sometimes be so slow that you'd need to wait minutes for some fancy animation to run.
And this wasn't even to get around buying a MacBook, we had one, I just wanted to compile and sign a hybrid app for iOS easier than using another physical machine.
Then we also found later that you can't sign an app on OSX while SSH'd into the machine... It just fails with a generic signing error.
So now I have a MacBook with remote-desktop software that's just permanently on in the corner of the room so I can open the GUI once a month or so and re compile and sign the latest version of our app...
I've also tried to use a Linux VM on Widnows due to issues with Node, paths in various Scala libs, and a dozen other problems.
Cygwin works for 50%, but not for everything.
I've tried Win 10 with Subsystem for Linux (Ubuntu Bash) and unfortunately it is not even close to production ready. Besides, I'm terribly disappointed with Win 10 after having been really happy with Windows 7 since its release.
Running a few Java and Javascript projects in IntelliJ on a VM is an exercise in frustration, even on a very powerful Dell Precision with an I7, SSD, and 32 GB of ram.
It works somewhat, but I'm very happy with my work provided 2015 MB Pro with only 16GB of ram. With Brew, Docker, etc. everything works great. If work hadn't paid for the Mac, I don't think I'd buy a new model due to the price and lack of upgradability, no escape key, ports, etc.
That being said, I've just installed Fedora 25 on a second m2 drive I put into my one Win 10 laptop. So far it is pretty good for dev work. It's not perfect, but it's approaching usability with a small Win VM for Office.
I have also been disappointed with the Bash-On-Ubuntu-On-Windows thing from MS. It seems like they fixed a lot of the frustrating issues recently but it's gonna take a few months for it to get to stable so it's still a non-option for me as well.
But i've had extremely good results by using the terminal and "GNU-ish tools" provided by "git for windows" which has worked fantastically. I can interop with the windows system perfectly, I get all my favorite tools like git, cat, sed, grep, awk, all the bash shell stuff, and ssh and more, and it looks a lot nicer than the default cmd.
Until the interop with the "host" windows system is better, and they push the fixes to the missing features like inotify and some others, I'm gonna stick with that.
If you're running Win10 Anniversary Update (AU), know that this was our first formal release of the Windows Subsystem for Linux (WSL) and was, as we made very clear prior to release, missing several key features and capabilities. However, we wanted to get it into users' hands ASAP so that we could asked the community for help to identify what worked and what didn't.
And the community leapt to help-out, resulting in literally hundreds of fixes to WSL and to the Windows Console.
All these improvements have resulted in Bash/WSL now being very, VERY usable as a real-world dev environment. We've a few more fixes and improvements in the pipe that'll emerge in the next few weeks, but you can feel confident that Bash/WSL is rapidly becoming a viable, highly productive, genuine, Linux compatible environment for running your favorite *NIX-first tools, platforms and technologies.
Try using Linux with a Windows VM (if required). I have a computer running Arch Linux + Plasma and it is quite nice. With a bit of tweaking you can get a OSX like or Windows like desktop environment. I will use the Windows VM to connect to a VPN and run work applications that require windows, but I can get my email and documents easily through Office365 90% of the time.
Have you trued ConEMU/CMDer? For my uses, I found it to be an adequate replacement for the terminal in OSX. Outside of "watch" not working properly in Windows, the stuff I've done in Node has worked fine, but I probably do simple stuff compared to most.
"watch" works great in Node when "natively" installed, rather than Bash on Ubuntu on Windows. Natively installed Node is a great development experience on Windows these days (just make sure you install a version with NPM >= 3, which is now no longer an issue as even current LTS has NPM >= 3).
On the flipside, Ruby remains a nightmare to install natively and Ubuntu Bash is the easiest way to work with it. There I really do miss having a working "watch" for Jekyll builds.
I cheated and used RubyInstaller for Windows, and it's worked great for me for the past couple of years, but I guess it really comes down to how you use it and what you need.
I always seem to need to install native dependencies for Ruby (often dependencies of dependencies of github-pages; I know github-pages seems to be trying to remove native dependencies, but as with all dependency cleanup games, it seems like a bit of whack-a-mole) and installing the DevKit and getting the DevKit working and getting the native dependencies to install has been a different beast every time I've ever tried to do it.
Eventually I always seemed to hit a non-cross-platform-capable makefile somewhere, and could only throw my hands up in despair and give up.
Definitely a lot easier in the Ubuntu on Windows userspace. (Though I was still fighting some weird fires with rvm and whatnot. Given I pretty much only ever need Ruby for github-pages/Jekyll work, I'm sure there is much I don't know about Ruby and a lot of the pain of the Ruby ecosystem to me is simply the fact that of the major 'modern web dev' ecosystems [node, python, ruby] it is the one I know and use the least.)
Yeah, native dependencies in Ruby Gems, node modules, etc., are the bane of the open-source developer. This is why we built the Windows Subsystem for Linux: Sometimes, you've just gotta run native Linux code or code that expects a genuine Linux environment.
btw, what do you mean by Node when "natively" installed. I used the Windows installer from the node site. Is that what you meant?
The issue I get with watch is that it doesn't properly detect added files in a watched subfolder, although changes and deletions are detected with no issue.
It's been a bit, so I might be wrong on some of the details here, but...
I did have keychain access, and was able to fully unlock the keychain and use it in other areas. However after chasing down several issues (including the keychain expiring after 300 seconds by default, moving the keys around between different keychains, various "jump up and down and spin around 3 times"-esque solutions of using multiple commands on the same line, or different lines, or in different orders, or others). I finally eventually figured out that I could unlock the keychain on the system manually, ssh in, then i'd have till it timed out to sign, only to have it be rejected on the upload...
Once I moved to just using a remote-desktop software and doing it through the GUI, it just worked. However now it's a 2 step process where our build system does literally everything but the signing then i need to manually remote in and click a button to sign and upload.
I also found that there were a lot of workarounds/alternatives to software/tools that I thought I would miss on Mac. I've managed to find pretty much everything I needed and/or realized I could easily live without the stuff I couldn't find alternatives for.
Having said all of that, if you have a dependency on something like XCode because you're maintaining an iOS app, you're kinda stuck with a Mac. My experience with Hackintoshes is that even if you buy the right hardware off the latest Hackintosh compatibility list, it's still a bit of a time suck. Alternatively, you could also run OSX in VMWare Workstation/Player, but you don't get graphics acceleration and some OSX software won't run properly in a VM.
[1] http://www.hanselman.com/blog/ScottHanselmans2014UltimateDev...