I do most of my development on an OS X box. I do it mainly because I like the hardware and because apps like Mou are available on OS X.

But OS X has limitations for stuff like PostgreSQL and Nginx (stuff that's at the core of Telegram.) So I need to run a Linux machine as well as an OS X machine.

For a while, I was dual-booting my OS X box, but that's a pain.

So, I started using virtualization. I installed Ubuntu 12.04 on both Fusion and VirtualBox. Here's my experience:


VirtualBox is less than optimal for GUI front-ends. Switching between the GUI window and OS X was tedious. It also seemed that graphics performance was not as good in VirtualBox.

Running Ubuntu server, however was much better in VirtualBox once I got stuff configured correctly.

Basically, I had to add a second network interface that was host-only, then I could SSH into my VirtualBox server.

Also, configuring a shared directory was more difficult in VirtualBox.

However, VirtualBox is very fast and stable in server mode and has been performing very well as a server running and developing Telegram. Even better, because I'm running a shared drive, I can use IntelliJ to edit the files on the Mac, but they are running in the virtual machine.


Fusion is easy to set up, but has a bunch of issues that pushed me to look into VirtualBox:

  • It doesn't play well with gfxCardStatus. There's a polite message informing you that your VMs will crash if gfxCardStatus switches the graphics chip. Yep… that happens.
  • Fusion crashes running Ubuntu server, even with gfxCardStatus removed. Basically, every couple of hours, the VM would consume all the cores it was allocated and I had to hard-kill it and restart it. Not optimal.

On the other hand, Fusion is great for GUI operating systems.

I had a bunch of Windows XP and Vista VMs laying around from a few years ago when I was writing Beginning Scala. I opened these VMs in Fusion and voila, I had running Windows machines including ones with IE 6. This is very, very sweet.

Which do I choose?

I am using both VirtualBox for Ubuntu server and Fusion for my Windows VMs. It's nice to have both on the machine. I also trust that VMWare will keep backward compatibility with old VMs which means I can keep old machines floating around and use them when I need them.