What must an Operating System do to satisfy web developers’ needs? This is a tricky question, as each person is a whole different world, so it’s impossible to have a single answer to satisfy every person.
One could say “Well, because each person is different, the OS must be able to adapt to all different kinds of people”. Basically, meaning the OS must be easy to customize. This is great, but when is it too much customization? Systems that are very customizable also tend to be hard to use. In this post I’ll compare the three most used Operating Systems out there, namely Windows, OS X and GNU/Linux. I like FreeBSD but the userbase is so small I sadly won’t consider it here.
When talking about customization, I’d say Linux is king. Windows, on the other hand, is not natively customizable, but easy to use and with sane defaults. OS X gets the best of both worlds. That’s just my humble opinion, as I don’t consider myself to be a full power user of any of those systems, I just use them to get work done on a daily basis.
I don’t mean Windows cannot be customized or has a lesser extent of customizability than Linux, I just mean that it feels like Linux was designed to be customized, where OS X and Windows are an out-of-the-box awesome experience, so you don’t feel obligued to change anything at all.
Now, What happens when you want to do web development in any of those Operating Systems? TLDR; Not having a terminal sucks, so Windows is out. Between Linux and OS X it’s a very close call, but I’d give the slight edge to OS X when it comes to web development. If you want to know my reasons, keep reading 🙂
Let’s say you are a PHP developer. You’ll need Apache, PHP and MySQL installed in your development machine. No worries! There’s XAMPP right?
Well, right off the bat, you’ll have issues installing PEAR packages and Composer. You’d also be running PHP in a case-insensitive environment which will risk having silly errors in production. It’s always better to run a development environment as similar to the server as possible, so you don’t get surprise errors.
Now, consider you manage to fix all those issues, you’ll have to use the Windows command line to use composer or any decent framework’s CLI, like Symfony, Cake or Laravel. Using Windows’ command line sucks, plain and simple. So you’ll most likely use something like cmder, which kind of fixes the problem by giving you a dumb shell powered by Git installer.
But still, once you grow a little in your terminal usage, you’ll find it falls short. Every instruction you see online is a copy-paste ready for a UNIX-like OS, like Linux and OS X. There are a lot of things that makes the Windows terminal feel like a second class citizen.
It doesn’t get better for Ruby developers. There is a nice Rails installer for Windows, but you won’t be able to compile native gems unless you read the documentation and do some steps detailed in the installer’s website. Not a big deal, but still, Ruby’s performance on Windows is so very slow. It makes running tests almost impossible. For some reason this also applies to PHP, in Windows it just runs slower for some reason. It might be a XAMPP thing, but that’s my experience.
Don’t even think about using RVM or RBENV on Windows. You are stuck with the version you installed.
For Node developers Windows isn’t that bad I guess, you can just install it from the website, and start using node and npm just fine. I didn’t find Node to be slower on Windows or anything bad to be honest. I guess the only downside is having to use a Windows command line for installing packages with npm, bower or using gulp or grunt.
A Windows Fix
If you really want to use Windows, there’s Vagrant. That’ll run a virtual machine with Linux, and you’ll get a real terminal to play with, in a UNIX environment.
There are some downsides though: soft links compatibility with Windows is bad. Very bad. Also sometimes it randomly breaks for some reason, mostly the shared folder, but overall it works decently.
I find that, if you’ve never tried switching to Linux before, you might want to do it now though. Vagrant gives you another taste of a great command line for web development.
Now if you use Linux, you might not be as used to the system as with OS X or Windows, but for web development needs, you are covered! You can simply copy-paste most of the code from the instructions online, and easily google what’s missing.
You are covered for PHP, Ruby, Python and Node. Actually you are most likely covered for all web development technologies as they all run in Linux.
Working in this environment feels pretty good if you come from Windows. So much you won’t want to go back for this.
What’s the downside? Well, it’s not a web dev thing, it’s more of a general usage thing. Plain and simple: It’s harder to use.
Linux users are very accustomed to adjusting their OS to their needs, and they love it! You get to pick things like the Graphical Environment (GNOME, KDE, XFCE, Lxde, Cinnamon, Mate, etc), the drivers (open source or proprietary) and whether to install primative software like flash and vendor video card drivers. Some more “manual” distributions like Arch Linux allow/force you to even pick the low-level tools you’ll need, like a Network Manager and Boot Loader. Some more extreme distributions like Gentoo even allow you to choose the C compiler and the options you want to use for each program you install. This makes you feel it’s your computer, you decide what to run. If tuning the OS is your thing, Linux’s got you covered.
But this comes with a heavy burden. The learning curve is much steeper than other OSes. You’ll have to learn some basic things, like users and their permissions, terminal utilities, where to look for configuration files, binaries, logs, services, etc.
Don’t be scared though! You don’t need to know all this if you just want to use Linux. Some awesome distros such as Ubuntu, Mint, ElementaryOS and openSUSE allow you to learn at your own pace. Those distros have installers with great instructions, easy to follow and with a nice GUI to guide you though a pain-less installation process. They give you a pretty and fully functional Linux desktop out-of-the-box for you to play with, abstracting a lot of “hard” tasks for you by giving you GUI applications to download software and configure the system, a-la Windows and OS X.
This, for me, is the best platform for web development. My reasons might be silly though, it’s just what I feel. Linux is great for web development, but it’s hard to use. Windows is easy to use, but sucks for web development. I’d say OS X is the middle ground, but that’s not entirely true. It’s much more than that. OS X is easier to use than Windows and just as powerful as Linux. It has the very best of both worlds, and more. It has a very solid userbase, and for web development, it’s easily the biggest userbase. That translates into very good support online.
One of the reasons it’s easier to use is the great user experience it provides. Linux and Windows fail to do this, as every developer seems to have something different in mind for each Windows or Linux application you run. In OS X, everything makes sense. Everything follows the same design guides and UX flow. This makes things so much easier. This is by far my favorite feature of OS X. It also has awesome application support as well! All big names work here: Photoshop; Office; Skype; UNIX Terminal, you name it! Even some OS X-only apps like Quicksilver, that simply makes life easier.
PHP, Ruby, Python and Node are all covered by OS X. If you ever have a problem, no worries, because the userbase is so big, you’ll most likely fix it by just googling and clicking in the first link.
Yet another advantage OS X has is better collaboration. At Beezwax, OS X is the most used operating system. Thus if you are an OS X user you can compare notes about tools, utilities and best practices that are platform specific. Nevertheless, you are not limited to that. There are some beez that use Linux, and the vast majority of the tools web developers use in Linux (rvm, tmux, git, ack, etc) are also available in OS X, so you don’t miss anything.
The few downsides I can find for OS X is that it’s hard to get. You need a Mac machine unless you want to get your hands dirty and build a hackintosh, in which case OS X is suddenly harder than Linux. The other much more subtle downside is that if you are a regular Linux user, you might find it hard to customize, but I must say that the defaults are quite good and you won’t likely need to change much. Even if you do want to change some things, beeing UNIX based, it’s quite powerful! For example you can change the Window Manager, that’s a very Linux-y thing to do.
I think that if you’ve gotten this far, you know by now who the winner is, but for the sake of completeness, I’ll make it clear. The winner is OS X. For web development, in my opinion, it has the best combination of features.
Disagree? Please let me know in the comments! It’s not like this article will never change, as it’s just my opinion, and opinions change.