Unix Tools on Your Desktop – Not Just For Mac Users

One of the main reasons I switched to Mac was for the underlying Unix-like kernel and command line. I’ve always had a local Linux server for development, and the ability to roll this functionality into my desktop machine was a great selling point.

As it turns out, while I love Mac OS, I don’t use it as my development server environment – I use a solution which would have worked just as well on a Windows machine.

Virtualization

If you haven’t come across it yet, virtualization software such as VMware and Parallels allows you to create virtual machines within your existing computer, onto which you can install just about any operating system, and run it as an application on your existing OS. From the perspective of the “guest OS” running on the virtual machine, it appears to be running on its very own hardware, and has no access to the “host OS”, except through specially set up sharing tools.

Lucas, our system and network administrator, recently wrote about using virtualization to set up multiple development and staging environments on a spare machine, which is something that saves us a lot of electricity, rack space and money at the office.

Virtualization can also be used to get the best of both worlds out of your desktop machine – the ease of a nice refined GUI, and access to a powerful server-centric operating system.

Mac or Windows – Even Linux

If you’re running Windows or Linux, VMware is the market leader for virtualization, and provide VMware Server for free. A free beta of VMware Fusion for Mac is available, but the final version will not be free.

Parallels Desktop is currently the only non-beta solution for Mac OS, and it has a very strong following. Parallels also offers virtualization software for Windows and Linux.

The software from both vendors is very similar in interface and functionality – both are easy to get up and running. You create a new virtual machine, specify how much disk space, RAM etc you want to allocate, and then install your guest OS from a CD, DVD or ISO image file.

If you’re thinking this would be a great way to get Mac OS running on your PC – well, you’re right. But unfortunately the Mac OS licence does not permit this, and so none of the virtualization platforms support it.

The Trouble With Mac OS

Running a custom development environment on Mac OS is nice in theory, but it can get quite fiddly. Compiling from source works fine 95% of the time, but the other 5% can cost you hours chasing issues with linker issues, OpenSSL conflicts and the likes.

There are package managers like MacPorts and Fink, but they can’t compete with their Linux competitors. As an extreme example, “fink install kcachegrind” triggered about 2 days of automatic downloading and compling of KCachegrind and all its dependencies – including the entire KDE! In contrast, I had the application running within a few seconds of typing “aptitude install kcachegrind” in Ubuntu.

The Trouble With Windows

While cygwin will let you run many ported Unix-like applications under Windows, and many applications such as Apache, MySQL and PHP have Windows versions, Windows just doesn’t offer the standard environment and tools to run a serious development environment to satisfy a command line junky. It’s getting better, but it’s not there.

A Linux Virtual Server

I’m a recent Ubuntu convert, after many years running the slightly aging Slackware Linux distribution. If you’re fairly new to Linux, I’d recomment installing Ubuntu Desktop on a virtual machine for starters. This will give you a nice intuitive GUI while you get the hang of things. I went with Ubuntu Server, which provides no GUI. I run it in the background, accessing it over SSH using iTerm (or PuTTY on Windows) rather than the more clunky VM window.

Ubuntu provides a huge amount of up to date software in their online repository, which can be easily installed using the graphical Synaptic Package Manager, or “aptitude” from the command line. For example, “sudo aptitude install subversion” will sort you out for source code management in a matter of seconds, and “sudo aptitude install rails” will predict your next web application and write it for you! (sorry – I couldn’t resist)

Out of the countless useful applications available, Samba (‘sudo aptitude install samba’) is probably the one most worthy of mention. It provides a file sharing compatible with Mac OS and Windows, so you can connect to your virtual machine as a network drive, and edit the files in place, with your changes just a save and browser refresh away. No more FTP transfer to see every change.

Just two quick warnings. Firstly, there’s an issue that exists between Parallels (up to the current build 3188) and the Linux kernels used by Ubuntu 7 (codename Feisty Fawn) and other recent Linux distributions. While there’s some work-arounds, I’d go with VMware Fusion Beta if you want to run the latest Ubuntu on Mac, until Parallels releases an update. Secondly, running a virtual machine will increase your power consumption a little. While still far more efficient then running two physical machines, you’ll certainly notice the difference on your battery life if you have a laptop. However a Linux VM with 256mb RAM only takes a couple of seconds to suspend and resume, so this hasn’t bothered me much.

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • http://anand.biz AnandC

    VMware is great. I use to all the time. I actually have a write up on my blog about it as well and how to set it up for development. http://anand.biz/?p=30

  • http://www.sitepoint.com Matthew Magain

    Nothing to do with virtualization, but I’ve always been a fan of installing the GNUWin32 suite if I’m using a Windows machine. No substitute for a proper UNIX command line, but at least makes the old DOS box a bit more useful.

  • fyodor

    One of your examples is completely silly.

    You compare the time it takes to download, compile and install kcachegrind on two different machines:that’s a fine idea. Except one machine doesn’t have KDE installed and the other does.

    It doesn’t matter what type of machine or OS it was. If you’re going to install applications that start with “k” you are going to need KDE. Why don’t you uninstall kcachegrind on the Mac then re-install. You’ll probably find it only takes a minute or two now that it has KDE on board.

  • http://www.sitepoint.com/ Paul Annesley

    fyodor: completely silly, and also labeled “an extreme example”. But the fact that it’s not fair to compare the two operating systems on this point doesn’t change the fact that one gives easier access to more open source developer tools than the other.

  • http://www.calcResult.co.uk omnicity

    To give Fyodor a little back-up, I would like to point out that one of those two platforms has access to far more in the way of commercially supported, professionally written applications. To my mind that more than cancels out the dis-advantage of only having access to 95% of all open-source apps.