I actually wrote this rant about 2 years ago, but I never got around to actually submitting it.
In the last 4 years, I've installed Cygwin probably 8 different times. It never works on the first try, and its always something different. I was forced to install it again, for some Software I was required to use for class. Last night, I downloaded setup.exe, ran it, selected a mirror, and installed the default packages, which included vi and gcc, and I added Tcl/Tk. The first time, it got through about 80% of the install process before it aborted on its own, something about not being able to connect to the mirror. Fair enough, that happens. So I run setup.exe again and select a different mirror. I would have expected that it only downloaded that which it hadn't already downloaded, but instead it decided to download everything again. Fair game, I thought, I have a flat rate anyway. By that time, I'm tired so I go to bed.
Next morning, its finished installing, though it gives me an error about a missing cygncurses-8.dll, yet still telling me it installed successfully. I tried to open up the shell, just to find that it doesn't work because cygncurses-8.dll doesn't exist (apparently it's a dependency). I did a search on my computer, and it was nowhere to be found. I load up setup.exe again, look for libncurses8, and it says its already installed. I tell it to reinstall only libncurses8, and in the process, it installs a bunch of other stuff I don't know about. The problem still persisted, however, and cygncurses-8.dll still didn't exist on my machine. I did a quick Google search and found some University software which had a copy of it in its binary distribution, so I downloaded that and put the .dll where it belongs.
Once that was done, bash started up, but there were no fancy colors like you usually see in the Cygwin shell. I typed ls and was greeted with a friendly "bash: ls: command not found" - the equivalent of a hearty "fuck you, haha" reverberating from C:\cygwin\. I run setup.exe again, tell it to uninstall. Before it uninstalls, it asks me if I want to install certain components which had dependencies - in other words, it asked me if I wanted to install everything that I'm about to remove to fill these dependencies. I said no, and it proceeded to uninstall. "Uninstall", in that it deleted a few files but left the bulk where it is (what a great installer). I deleted most of the cygwin tree and ran setup.exe again and did a clean install. 'Lo and behold, this time it just happened to work, and bash loaded up with the pretty colors and a working ls command. But wait - I installed the same packages as I did above, yet everything that I could ever need cygwin for it decided it wouldn't install afterall. That means, no text editor for writing a script (I tried vi, emacs, nano, pico, joe, even ed), and no C or C++ compiler. I had to go back and install those again, with that absolutely godawful setup.exe tool.
So, that's that. I've had a few more troubles since. I installed Cygwin, which just happened to work fine the first time, to be greeted by, again, the friendly "ls: command not found" prompt. After some rather ... "interesting" conversation with two cygwin developers on IRC, I was told that most likely I had some other software installed that was using cygwin. I couldn't think of any, though the problem was right in front of me - I was using irssi for Windows, which used cygwin-1.dll internally. Apparently, Cygwin cannot work with more than one cygwin.dll, so once I quit irssi, I was able to correctly get cygwin to work by ... rerunning setup.exe.
So the above is bad enough, but this whole thing combines with those very interesting cygwin developers that I have been in contact with because of issues. EVERY TIME, it was MY fault that it didn't work - I did something wrong, I did something "weird" to my Computer, I hacked the cygwin install so it didn't work on purpose, I installed irssi knowing it would fuck up the install. Well, I didn't know the irssi binary used cygwin, and I also didn't know cygwin was so fucked up that it's only possible to have one .dll of it otherwise they'll step all over each other with weird, seemingly impossible bugs. Oh yay. If I wrote code like that at work, I'd be fired immediately. And what gives you, dear cygwin developers, the moral right to insult me and my intelligence in this manner? I was thoroughly friendly throughout the entire exchange, I did not get condescending even though you immediately accused me of doing everything wrong, and I stayed calm when I found out a major shortcoming of cygwin was causing this.
It's a free product though, so I can't vote with my wallet. That's fine, I'll vote with something else instead - freedom of speech. I don't intend to use cygwin ever again, and now that I'm out of University, I can't think of a single reason why would ever need to. I'd rather run linux in VMWare or on another partition or on another computer, and I urge you to do the same.