Use KVM (Kernel-based Virtual Machine) and run windows in a virtual machine
It's a virtual machine that fully supports 'native virtualization'. Meaning, if you have a processor that supports virtualization, the GuestOS can interface directly with the processor. It's also included directly into the linux kernel so it comes with most/all current distros of *nix and is under active development.
The only downside to this option is that hardware virtualization still sucks so you probably won't be able to get your graphics card working to its full potential.
For more info see this article.
I'm currently have working images of windows7 and windowsXP in Linux Mint 9.
If you're looking for a virtualization solution that is more user friendly checkout virtual box.
I have run dual-boot for a few years now and IMHO it sucks because it's too much of a pain to restart every time you want to change systems and you can never work with both at the same time.
Virtualization is the way to go because it's so easy to save a backup of the whole system (just copy the .img file). In the case of using windows, I don't think I'll ever use it in a non-virtual environment again just because I'm so sick and tired of viruses killing my system and the performance hit (and ridiculous cost) of using an anti-virus software full-time just isn't worth it.
Update:
To put this in better context with the question here's a comparison with the alternatives.
Cygwin basically provides most of the common applications and tools common to linux in a custom windows command line application. For example, if you wanted to use gcc-c++ compiler in windows, you'd have to run it in cygwin. It also can provide many of the *nix libraries that those specific apps might need.
The plus side to cygwin is you can run *nix apps in windows. The downside is, those apps still have to be compiled in windows and cygwin may be missing support for a particular *nix specific module.
Dual-boot is probably the best choice if you're looking to do anything that includes a lot of graphics rendering or requires hardware support in *nix. It's a bit of a pain if you're not familiar with partitioning drives and to get the MBR (Master Boot Record) setup so you can see all of the options on boot. If you understand the details of setting up a dual-boot system it's not such a bad option. The only real downside to dual-boot is, you can't use both windows and *nix at the same time. This may not seem like a big deal at first but if you have a preference for one OS over the other, it'll seem like a huge chore to restart and boot the other system (ie about 2min per reboot of wasted time).
Virtual Machines are great if you don't need hardware acceleration and want a system that is portable and easy to deploy. Basically, the VM acts like a virtual computer with its own set of generic emulated hardware. As an example, if you load windows on a VM, you'd only have to install the drivers in the OS once no matter how many different systems you use that image on because the OS only sees the virtual hardware set. IE, you can copy and paste the OS to as many different systems as you want and don't ever have to worry about hardware drivers after the initial install. The downside is you lose hardware acceleration (which basically makes your graphics card useless) in the GuestOS. There have been a lot of advances in Virtual Machines such as, VMs can now interact directly with processors that support virtualization but I haven't heard of any graphics cards so far that have bridged the gap. The greatest advantage to VMs is, the OS partition resides in a single file that can be copied, pasted, put under version control, loaded remotely, etc... like any other file on your system and its size isn't limited to the size of its partition on your hard drive. Another great advantage is, you'll no longer have to reboot to do work in both systems simultaneously.
Here's what it all comes down to:
- If you want raw performance with the most stability, run the os natively using dual-boot
- If you aren't comfortable with *nix at all, don't mind re-compiling your applications in windows, and are ready to scrap your efforts if the application you're using may not work, go with Cygwin.
- If you want a system that is easiest to copy/deploy/backup, don't want to deal with hardware issues and you can accept a performance hit, use a VM.
Personally, I've wasted enough of my life having to re-install windows because of a badly deployed update, spyware/virus, or just general performance degradation over time that I won't run it outside of a VM unless I'm forced to. Ie, I prefer to be able to copy and paste a fresh install of windows to any system if needed. In the case of *nix, it's stable enough that I haven't been forced to reinstall it since I started using if full time (1 1/2 years ago). But, as with all things YMMV. I refuse to waste time/money/processing power to an anti-virus and I have a tendency to abuse my OS more than the average user. Skinny dipping on the net in windows is ill advised ;).