Choosing an Operating System

First things first: choose an operating system the site will run on.  To most people this is super obvious -- websites run on Linux variants.  They don't run on Windows unless there is a corporate mandate lock-in for running on IIS.  

When it comes to Linux we're talking about the following available distributions:

  • Ubuntu
  • CentOS
  • RHEL/Fedora Core
  • Debian

Speaking from experience:

RHEL is always too old to use with the newest and latest and greatest packages.  It tends to be a year behind in available software from its repositories.  Fedora Core is better but often ends up with experimental code in the core packages.  Unless there's a corporate mandate, skip.

Debian is for Debian lovers.  There's nothing wrong with it and people who use Debian should continue but it's very... meh.

That leaves Ubuntu and CentOS.  Personally, I prefer to program on Ubuntu and prefer apt to yum but have run into some issues with incompatibility between major Ubuntu versions that make it an eyebrow-raiser.  The 10-11-12 upgrade burned.  Also, under intense load, Ubuntu likes to crash.  It doesn't handle edge cases managing high rates of swap all that great even with release 12.04.  However, Ubuntu is a popular choice and for most things other than databases there's nothing wrong with it.

Also, the default AWS AMI is based on CentOS.  This might not sound like much of a consideration but as the code base moves out of private developer systems into continuous integration and out into the cloud CentOS has proven to be stable all through the distribution chain to production.  Yum is nothing to write home about but the repos are kept up to date and the software available list without having to do a hand-compile is lengthy.  So CentOS it is.

Philosophically, engineers should develop on the OS they will ship on to ensure no late compatibility issues.  I do know Mac peeps like to develop locally and then check out to a VM to check compatibility -- especially with web scripting languages where I don't recommend developing on Windows (at all) but works fine on MacOSX.  

I recommend popping for some cheap laptop or tower to run as a server local.  If that isn't feasible either:

  • Get an AWS account and develop on m1.xsmalls using the target AMI.  This will have some super interesting pluses and minuses -- already developing in AWS!  On the target OS!  Using AWS tools!  Learning to live with VMs randomly disappearing!  This is also a very cheap option to getting started on building a whole system.  
  • Rent a server in Rackspace and develop on a hosted system there.  Cheap, monthly, targeted OS, also in the cloud.  
  • Do local development on a VM until ready to start continuous development.  VirtualBox is free but will occasionally eat itself and isn't CentOS friendly (it has a big list of compatibilities on its list).  VMWare Fusion is much better but costs $60.   I run VMs on Mac in Parallels.  It works fine.  

For this project we're going to go with CentOS.  I already own Parallels so I will develop there.