Agile Zone is brought to you in partnership with:

Full-time developer on a small team. Writing great specs and code, delivered on time. Chase is a DZone MVB and is not an employee of DZone and has posted 47 posts at DZone. You can read more from them at their website. View Full User Profile

Development on a Mac versus Linux

12.31.2013
| 21973 views |
  • submit to reddit

I love the Mac computing experience. Their laptop hardware, like their phones, feel solid and elegant. OSX usability is excellent, though it is myopically geared towards the lowest common denominator of user. For most tasks, I appreciate that trade-off of affordability versus advanced power features. But not when I’m doing development. Even though I use a Mac as my home laptop, I prefer a Linux machine for work. I also keep a Windows desktop at home for gaming. To me, that’s just using the right tool for the job.

Package Management

By far my biggest complaint with OSX (and Windows) is the state of package management. Once you have experienced installing a piece of software in totally automated fashion from the command line, it’s hard to go back to Googling for a binary (or worse, the source) and struggling on from there. I feel dirty, like I’m hanging out on a BBS trawling for warez. That’s why almost every new language these days has package management built-in. Would you consider adopting a language without one? Then why do you put up with that for software?

Whereas on Windows there is literally nothing (that I have heard of, anyway), on a Mac at least there is the App Store, and brew. The App Store is not what I would consider a package manager for development purposes; generally you can’t install stuff like MySQL, Redis, Python, etc from there. That’s what Brew is for. But their “packages” consist of essentially bash scripts that go out an download a binary from the same website you would get to if you Googled it, and they have per-package code that checks for things like dependencies. Often the veil is lifted and you will be presented with a GUI installer; exactly not the point.

In my experience, brew fails to properly install something too often. Whether it’s a 404 on the download, a missing dependency it did not offer to install or just plain botched logic, it’s frustrating just as often as it’s useful. Blind rage ensued when installing brew itself, which required me to go register for an apple.com account and download a MASSIVE XCode installer manually. Arg! A good effort, but about what you would expect from trying to bolt-on a package manager after the fact.

APT, on the other hand, is extremely reliable, and is much faster. It has binaries ready to go for almost every conceivable platform. It’s dependency management is excellent. You can even upgrade and remove packages reliably. Imagine that!

System Updates

Recently I upgraded a Mac from OS 1.7 to 1.8. All of a sudden my Python dependencies are broken due to some path change. XCode isn’t even installed anymore. All of my project’s virtualenvs needs to be re-installed from scratch.

This is one problem I have never run into on Linux. APT knows exactly what I have installed, and makes sure everything is up to date, even if you’re doing a full distro upgrade. Because package management is built-in and continuously exercised on production machines, you have a much better chance of not having to manually futz with anything.

Passive DevOps Education

If your only experience with Linux starts with asking Amazon to clone an existing image, then you’re missing out on a whole bunch of ancillary knowledge. Configuring X is it’s own little world, complete with kernel panics and un-bootable systems. You will probably learn how to emergency boot into different run levels, and REISUB restart a seemingly dead system, both of which could come in handy if you even need to rescue a physical server. Maybe your video is skipping, so you learn all about nice levels and end up using that later on your production database. If you learn all about PPAs by tracking down a custom fork of GVIM with a transparent background, you may end up using that knowledge to easily install a commercial HBase version.

The more exposure you get to the platform, the broader your knowledge base about Linux in general. This is especially valuable if you’re not really in a devops role trouble-shooting production systems every day. Sure, seemingly mundane tasks can take an unreasonable amount of time on Linux, especially for new users. But it builds character ;)

Trade-offs

Now, you might rightly point out that you don’t spend a very large percentage of your time installing packages. Nor do you update your operating system very often. You already learn a remarkable amount about Linux by simply SSHing into servers. True enough. That’s why, despite my rant, I don’t feel super strongly about this preference. Certainly there are times when I’m struggling to get multiple monitors working in X that I would just as soon not be wasting my time. In the end, I just like running all three of the major operating systems regularly, keeping my toe in the water for each.

Graphics display configuration is definitely not the only downside to using Linux as your desktop. Some software may not be compatible at all, such as XCode. Some, like Hipchat, have half-baked Linux versions. God help you if you try to hook up a projector to a Linux laptop, or try to get the damn thing to sleep properly. Oh, and I hope you didn’t want any kind of remote desktop solution that doesn’t perform like you’re on a 14.4bps dial-up connection, even though Windows had that nailed back in 2000.

On the other hand, at least you have your Linux desktop merit badge. Always impresses at parties.

Published at DZone with permission of Chase Seibert, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Choco Lim replied on Fri, 2014/01/03 - 4:08pm

Did you try Homebrew or MacPorts?

Riccardo Cossu replied on Fri, 2014/01/03 - 5:31pm in response to: Choco Lim

I use Macports and doesn't even come close to apt or pacman (those are the two I'm familiar with on linux, I guess most of the other ones will do as well); and things take ages to install, because they are compiled on the fly. Not exactly what one wants when he needs that package right away...

As far as package management is concerned, Linux is light years ahead of Mac Os and Windows put together; most things a developer wants are just a "apt get install" or "pacman -S" away.

I like Mac Os as a desktop platform, but I prefer developing on linux for the same reasons as the author; I also find that in linux is far easier and straightforward to configure development servers and tools.
On Mac Os you can do most of the things you do on Linux (it's UNIX after all), but many of those will always feel somewhat "alien" to the enviroment and you will sometimes have the impression that the OS is working against you. Linux is more friendly in that regard. 

Thai Dang Vu replied on Sat, 2014/01/04 - 6:31am

 I like pacman most.

Heinrich Goebl replied on Wed, 2014/01/08 - 7:47am

If you have (or buy) the right hardware you won't have any problems with Linux (hook up to a projector, multiple screens, sound, ...). Just try a live-DVD of Linux Mint and you'll see!

I prefer Linux over OS X, because it's open and runs everywhere. I cannot stand Windows any longer (I loved it a decade ago). I'd accept working on a Linux or Mac box, but I'd demand compensation for pain and suffering when having to work on Windows.

There are only two programs I miss under Linux: an Adobe Reader version where I can comment and highlight text, and the Map/Routing software from Garmin. And I don't understand why Google Canary is not available under Linux, but I don't really need it.

Anand George replied on Wed, 2014/01/08 - 8:59am

I use a Linux laptop for practically everything. One thing it certainly doesn't have is a decent Screen recorder/ video editor software like Camtasia, something I need often for educational purposes.

Joao Osorio replied on Wed, 2014/01/08 - 9:28am

 As far as "Whereas on Windows there is literally nothing (that I have heard of, anyway)" I can contribute to this debate by introducing you to the "sudo apt-get install" tool that handle most dependencies: Chocolatey 

Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with Windows in mind.



Darren Lewis replied on Wed, 2014/01/08 - 9:29am

Nice article.  Package management on Windows isn't up there with Linux but there are a couple of options.  For development there's the Web Platform Installer  and for a more apt-get like experience there is Chocolatey.

Xavier Callejas replied on Wed, 2014/01/08 - 10:17am

Well, of course Linux is a better development environment! It is also the most powerful environment for work, but it needs more commercial support for work tools, yet.

Mac is a very pretty toy,

Windows is a very cheap toy.

(I also use the three).

Wojciech Kocjan replied on Wed, 2014/01/08 - 11:23am

I had the exact same issue (except I use Windows instead of OS X for daily things). 

What I ended up with is using VMs in VirtualBox - basically I run all my work related things in a VM (that I can also safely upgrade using snapshots), share the drives and wrote a small tool that basically allows me to run Linux commands from my computer.

This works great if you are not working on things that require tons of RAM - i.e. I use Ruby a lot, and those are not that memory consuming, and it is easier to test on same OS that the deployment is on, especially for 3rd party tools like redis.

About APT - I have been upgrading multiple servers and I have seen APT fail a lot of times with dist-upgrades. It does a very good job, though, and mostly it does not fail.

Ahmed Othman replied on Tue, 2014/01/14 - 5:26am

Use Vagrant (http://www.vagrantup.com/) to get the benefits of Mac GUI and Linux terminal.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.