But there are two big meta-reasons:
The first one is that since much of Open Source in general is done to "scratch ones on itch", Linux can be seen to be "by developers, for developers". This is generally seen as a negative for non-developers, but for developers it is a positive.
The second one is that if you're a web developer, your deployment platform is going to be very similar to your development platform. This means that you only have to deal with half the number of platform specific bugs and configuration. More importantly, you discover these platform specific bugs and configuration issues sooner.
Having a desktop like this means I get to practice all the intricacies of sys-admining (nginx configs etc) just by turning my machine on and running my apps on localhost and it shows when I compare my sysadmin skills to all my peers using MBPs
Don't miss anything from Macbooks except the battery life but I'm on a bootstrapped budget so my beater will have to do until we get enough customers to pay for a new computer.
Questions like "Is my webserver going to perform well under load?" would be answered if you knew what epoll() was and if your server had it enabled, but you wouldn't really learn that until you messed with it on Linux. Plus it's just fun to tinker with your app's performance and Linux lets you do that in spades.
I'm glad you mentioned this because Sputnik is very awesome for this. They included our new service orchestration tool [Juju](https://juju.ubuntu.com/) (along with a bunch of other useful stuff) on it to do just exactly what you're talking about.
This lets you deploy your application locally on the laptop using LXC containers, assuming you're set up with an environment called "local" and your AWS account called "amazon", hack on your local app, let's say it's node.js, when you're ready to test:
juju deploy -elocal node-app whatever-yourapp
juju deploy -elocal mongodb
juju add-relation -elocal mongodb myapp
Then just `juju status` gives you a listing of your environment. What happens on Sputnik is you've deployed three [LXC containers](http://lxc.sourceforge.net/), one for orchestration, one for your node app, and one for mongodb with Ubuntu server just like they would deploy on EC2. Then you iterate a few times, commit, deploy, test. After you've done this for a while, now you're ready to deploy in EC2: juju deploy -eamazon node-app whatever-yourapp
juju deploy -eamazon mongodb
juju add-relation -eamazon mongodb myapp
juju expose -eamazon whatever-yourapp
Then `juju status`, snag the public URL for your AWS instance, paste it into your browser, and you're deployed.The nice thing there is you're doing all your app development locally on sputnik in containers that are pure Ubuntu Server, just like you'd get on AWS or HP Cloud, except now you're not running up a bill testing every little thing, you can replicate those kinds of deployments locally, which is nice when you're on a plane.
Sorry to sound like a commercial but Dell lent me a Sputnik to show this off at OSCON and it's really really nice to be able to just fire up deployments locally on a fast SSD and then push willy-nilly to the cloud, all right out of the box.
Also, diversity: on Ubuntu, you either install .deb packages or compile stuff yourself. OS X has three competing packaging systems (macports, homebrew, fink), binary installers and manual compilation. Files can end up in very different places according to how they're installed.