I recently made the switch from using a Windows box for my everyday development tasks to a Macbook Pro 15″ Retina. I’ve gotten a few questions from Windows developers I know about things they’ve heard about blurry displays in Windows VMs, slow Mac performance when running VMs and other unpleasantness. Another side question is whether it is best to use VMWare Fusion or Parellels. I figured I’d take a minute to write down what I’ve learned while it is fresh in my mind.
I’ve been developing on Windows VMs for several years now. I generally keep my productivity stuff in the host and put my development environment in the VM. This lets me snapshot and restore the development environment easily. It also lets me experiment with upgrades. I always develop with multiple screens. I used to insist on three when I was stuck with 1920×1080 but now that 27″ monitors featuring a resolution of 2560×1440 have become affordable, I am quite comfortable using the laptop as one screen and the 27″ as a second screen. When I’m writing Windows code, the development VM runs full screen on the big monitor while I use the laptop screen from the host to look up documentation, handle email and do other office productivity tasks. I usually give the development VM half of the host machine’s memory and CPU. For the last couple years, my hosts have all been I7 quad cores with at least 16gb of RAM and the fastest SSD possible so VM performance has been snappy. It’s not as fast as the host, especially when it comes to disk-intensive operations like compiling applications, but it is still faster than working directly on a host with a traditional hard drive.
I purchased a mid-2012 Macbook Pro with a 2.7Ghz I7, 16GB of Ram and a 750GB on board SSD in May of 2013. I got some discounts since it was near the end of the product cycle, but it still cost about 20% more than a roughly equivalent 15″ laptop from Dell. The Dell in question has a faster, 3.2Ghz processor and a smaller, 512GB SSD. Like the Mac, it does not have a touch screen. Of course, it also has a much lower resolution screen and is a bit heavier and thicker. I’m not doing a comparison review here, but it is important to note that you pay a premium for the Mac’s design and you get significantly less in raw specs. What you get in return is a far better user experience with a crisper display, a better, more usable touchpad and superior battery life. I also purchased the Macbook because it is a better platform for work on things like Node.js since the underlying OS is a Unix derivative.
I first tried VMWare fusion. It installed easily and guided me through the setup of a Windows 8 VM in minutes. It starts out in a scaled mode that basically doubles pixels on the Retina display giving me a perfectly usable experience with sharp text in things like Visual Studio. When I moved the VM to my 27″ monitor, the host re-scaled giving me more screen real estate while maintaining sharp text and graphics. After I manually increased the guest’s memory to 8GB and gave it four cores, performance was a little better than what I was seeing when hosting on my big Windows desktop (3.06Ghz quad core I7, a fast SSD and 24GB of Ram). Visual Studio running Reshaper with code analysis turned on performed well. Compiling and running all the tests on my main work project was about 15% faster than what I was seeing in my old hosting environment.
I tried out VMWare’s Retina mode and that’s when things got a bit ugly. The idea here is to let the Windows guest run at full resolution on the Retina display. It looks crisp, but everything is just too small to read. As recommended by VMWare, I turned up DPI settings in Windows and that’s when I started seeing the blurriness that some of my friends mentioned. At 125% DPI, everything in Windows was sharp but still way to small for my taste. At 150% DPI, menu bars and other navigational elements were barely big enough to use but I started noticing blurriness in graphical elements . This is because Windows applications are not developed or tested to work at high DPI levels. At 200% DPI, text was good, but things really started to break down. For example, maximizing Chrome lost the title bar. I probably could have gotten things working reasonably using 125% DPI and then tuning text sizes and zoom levels of various applications but it was just too much work. Furthermore, turning up the DPI and font sizes in Windows made Windows applications appear way to large when running in Unity mode.
I had a couple gripes with VMWare Fusion. Their choice of hot key mappings for Windows 8 has lots of annoyances. Reaching for what you think should be search for applications shuts down the VM. Unity mode, which lets you see host windows and guest windows side-by-side, is a little clunky. On two occasions VMWare froze and forced me to reboot the host.
My experience with Parellels and Retina were about the same. Setup was a bit easier. Performance was a bit better especially on compiles. The display modes were roughly equivalent with scaled mode the best choice when you are running with the laptop screen and an external, non-Retina, display. Their side-by-side mode, coherence, is much nicer than the one in VMWare. It never crashed on me. Overall the app seems like a much better Mac citizen. It costs more than VMWare, but the benefits made it worth the extra cost for me.