I’ve been using Cygwin for years. Mostly, it’s to give me a consistent work environment since most of my work is on Unix machines. Partly, I suppose, it’s to put off learning how to do the same things I can do on the Unix command line – programming tools, text processing, sysadmin. It’s worked well for me and I’ve developed a standard setup of tools and configurations that I’m familiar with. This gets installed on every Windows machine I work on, using a little script. With over 50 machines to keep running (mostly they’re single-user compute nodes), this makes life easier.
I like the Cygwin tools for adding new features. You can do this through the gui or using the apt-cyg utility to do it from the command line or a script. Once Cygwin is in, I set up Perl and the various libraries I use using Cpan. This can be automated too.
Cygwin is great but I’ve found a few things that remind you you’re not running a Unix machine, but a program on a Windows machine. File protection can get messed up, and I have problems sometimes with corrupt files, files that can’t be deleted, corrupt names, and other strangeness. User admin is through local files so it’s hard to deploy a number of machines. File sharing uses Windows protocols, more inconsistencies. There are others, like these, they’re mostly related to using a number of machines in a mixed Unix/Windows network.
So recently I tried switching to Interix. It’s a native Windows product that is supported by Microsoft but developed independently. Since it’s integrated into the Windows kernel it can implement file and user protection using more information than is available to the Cygwin application. It’s pretty easy to set up standalone installation but of course I immediately wanted to add Unix file sharing and SSH login. There’s a package manager that makes this pretty simple, and you can install bundles of packages to make life easy. So far, I like it.