Coders choosing Mac OS over Linux environment
news.cnet.com
news.cnet.com
Also: focus follows mouse is not an optional or an extra.
I've been using a Linux desktop since 1996, and as far as I'm concerned, it's about 100 times easier than it used to be, so whining about things not being 'just right' fall on deaf ears, especially when for me 'just right' means focus follows mouse and other things like that that I have dialed in just how I want them.
OS X fits that role for me. I just feel like there isn't enough time in the day to hack and tweak my OS and write code for clients and my own projects.
1) I hacked up a patch to make it boot better off of USB keys. Sadly I'm not sure they ever accepted it in the main kernel, despite being way better than their own hacky (wait N seconds for the device to settle) method.
2) I hacked up a nice little environment for a coin-operated internet machine, to stick in the corners of hotels. It was pretty cool, unfortunately the guy running the operation with me screwed up the business side and it never went anywhere.
And I think for most people, a working wireless card is more of an out-of-the-box priority than focus-follows-mouse. (Though personally, I would have liked Linux more if it just didn't cause my keyboard to stop functioning after the computer came out of sleep mode.)
http://en.wikipedia.org/wiki/Disruptive_technology#The_theor...
I agree that desktop Linux is drastically better than it was in 1996, but unless you like hacking your system's innards or just have an ideological opposition to Apple (both of which are reasonable — don't get me wrong), I can't think of a lot to recommend Linux as it exists today over OS X as it exists today.
However, for those who like to explore technology in creative ways (hackers, in other words), and want to deeply understand the systems they use, the freedom involved with a system like Linux is still the place to be, IMO.
And for when you're just getting stuff done, I don't think it poses any major challenges these days; or at least it doesn't for me. If you're a graphics guy and need Photoshop, clearly things are different.
Edit:
http://www.intertwingly.net/blog/2011/08/09/Upgrade-Unavaila...
Why is having a workstation that you don't need to babysit due to version upgrades a bad thing? Note I've used linux since 1997ish, might have been sooner I can't be arsed to check.
Note: I run with chrome/emacs/iterm/vmware basically, and my "day job" gives me more of the linux kernel and scsi/fibre stack than I'd really like. I've dug through enough of their sources fixing problems we encounter that I hope I at least get the title of honorary hacker.
But complete understanding of everything I run? Meh, there is more to life than that, maybe I'm getting old, but administering my home machines has gotten less appealing as time goes on to the point that I really just want to see things mostly working without me needing to spoon feed things.
I can setup a new mac in about 30 minutes. Course I can do about the same on linux. Mostly just a git clone and run a few scripts and I'm setup. As far as distros, i've had them all blow up in one way or another, debian, gentoo, linux from scratch, arch, ubuntu, opensuse, suse, redhat, fedora, centos, those are all I can remember using at the moment. The one thing I've found is after 6ish+ months of updates something managed to break my xorg config or nvidia driver installs. So far Arch is the only one that makes updates simple enough.
Sorry got on a bit of a rant there. And for that upgrade unavailable, the laptop I'm typing this on just got a new lion install from leopard via a usb drive. Yes I couldn't upgrade it, but to be honest I don't do anything overly too off the wall to care. No need to have snow leopard, just do what I did for friends that bought it after they installed it, get a buddy to burn the dmg to a usb drive, or dvd I guess.
The basic problem is that development and hacking are different use cases for the machine than the general public needs. Apple considers the general public primarily, and the development and hacking public secondarily.
Some developers adapt to OSX, but, if you read TFA, you'll realize this is not a cross section of the hard-core hacker types: 80% of the sample prefers Windows.
OSX is quite acceptable in roles traditionally reserved to Windows PCs in the corporate world. It runs Office, Outlook, talks nicely to Exchange and runs Eclipse just fine. Many corporate Java developers (a bunch that traditionally used Windows) can use Macs for work and enjoy some advantages in relation to those who use Windows.
You may argue that Linux is not as polished a Unix as OSX (I disagree, but smart people believe it), but no serious hacker thinks Windows is acceptable for development unless they are also targeting Windows for deployment.
Indeed installing mysql on ubuntu is simpler and faster then on OSX. But installing major packages only happens that often.
What happens much more often is having to constantly fiddling with your Linux machine for it to continue working flawlessly. Upgrades tend to break things, external devices not being supported, etc, etc, etc. You need to constantly invest time in keeping it going. Much less so on OSX.
For me OSX is a Unix that just works and has a beautiful GUI.
And it's more likely your fiddling is breaking your Linux box than the other way around. Either that or 1995 wants its Linux back.
I rest my case
Eh? I've run Slackware for years and it works fine, including upgrades. No fiddling either.
Maybe you're thinking of Ubuntu and extrapolating that to all Linuxes.
The Lion updates will soon (devs need to update their software) make things even better for users. Auto save and built in versioning.
[1] https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/755156
I run the VM headless, sized similarly to a typical Rackspace Cloud server. This setup lets me use the GNU toolchain while being highly mobile.
Activity Monitor tells me my single VM running in the background is taking up less CPU time than Skype (which is also idling in the background).
10 minutes later I was back in business like nothing happened.
Had a physical machine of mine failed it would have been a fun few hours of machine debugging, instead of "oh, I'll just destroy and recreate the VM, no biggy"
On mine (https://github.com/drench/vagrant-base) each branch sets up a different environment (Drupal, node.js, generic "LAMP", etc.). They currently all use shell scripts for initialization, but converting them to Puppet is on the list. I may borrow from your project's Puppet manifest.
I'm actually using VMWare Fusion. My employer had an extra copy. I run VirtualBox at home. The platforms are not exactly the same, but my beefier gaming box running (now older version) of VirtualBox seem slower. For the purpose of developing in a VM, I don't think it really matters between VirtualBox or VMWare technology-wise, as long as you have some sort of command-line tool to bring up new VMs.
I wrote some bash scripts to clone VMWare images, including filters to search name references and rename them to the image. You can use Vagrant to do the same with VirtualBox, and from the demos I've seen, it is a easy way to get into this setup on your MBP.
I built out a template with 256M + 10 GB slices, just like on Rackspace Cloud. On the i5 MBP, I allocated a single core to each slice. On my current i7/8GB setup, I'm allocating two cores. I've also had to beef up two of the slices from 256M to 512M and 1G so that I could run the full rspec against the apps. I have tried allocating all 8 hyperthreaded cores, but I guess VMWare Fusion isn't quite like Xen. I generally run no more than two slices at a time. VMWare Fusion makes it relatively easy to suspend VMs, and I don't jump around on a number of projects so I have not needed to hot-potato things much.
I had not had problems with VMWare with regards to idling. Both VMWare Fusion and VirtualBox are now using Xen-style paravirtualization, so when it is idle, it sits idle. When it does eat up computing cycles when idle, it has more to do with Rails (or Merb) polling inappropriately. With this setup, I've had problems on the i7 MBP kicking up the fan for no apparent reason and I suspect it is Chrome or Flash.
Wakeup/suspend by closing the lid works on the VMs. Linux doesn't even know the VMs have been suspended, so I don't mess with any kernel settings for that. On the downside, these VMs currently run on an independent wall clock which means resetting the clock if I want accurate timestamps on commit logs. There's probably a setting to fix that.
I'm using Gentoo for the distro, but that doesn't matter as much as using the distro you like or better yet, using the distro you are deploying against.
Editor-wise, I am shelling in with ssh and using vim + Rails.vim against screen. (I'm also using Terminal.app + Visor and iterm2 w/ visor mode). I have a customized /etc/hosts file with shortnames for the VMs so I can shell in fast on the occasions I do shell in. (I have flirted with shelling in and using Emacs -- it works wonderfully well, if I wanted to abandon VI modal editing).
Each slice is configured with two virtual ethernet devices, one going to physical ethernet device (bridged) and one going to the virtual LAN (no NAT). Since I sometimes go use free wifi and they require IP authentication, I don't see the point of exposing the internal slices to the world. Instead, I installed Nylon through MacPorts and have it turned on to accept SOCKS5 requests from anything inside the virtual LAN. On the VM side, I have proxychains set to talk to Nylon on the outside. This way, I only have to web-authenticate once on the free wifi and prepend my git pushes with proxychain. With the virtual LAN, the intent was so I can always shell into my vm on my laptop regardless of my external network connectivity.
One nice thing about this setup: at some point, when the Gems start accumulating and start bogging down load time for Ruby and Rails, I can drop it and clone a new VM.
Due to some circumstances, I'm going to be getting an i7 Air by the end of this month and I'll replicate the setup. I may use Homebrew or Gentoo Prefix on the host side, but I'll still continue to use some sort of virtualization of Linux. I'm skeptical about drinking the 'brew ...
I have a friend with a similar setup. The friend has to run Windows to do proper browser testing so he has different requirements. He also has FUSE running with a Samba shared folder so he can use TextMate on the host side and run things on the Linux side. I've only had a few occasions where I wished I could do that, virtual DropBox-style, but it hasn't reached the level of scratching-itch yet.
Ultimately, I think Homebrew will win out because:
(1) It is on github (http://redmonk.com/sogrady/2010/04/01/github/)
(2) The Homebrew DSL is far, far easier to work with than Gentoo ebuilds
(3) From what I've seen, you don't need root privs to develop Homebrew formula, but setting up fakeroot to develop Gentoo ebuilds is a pain.
Homebrew or not, VM'd Linux hosted under OSX is a sweet spot for what I'm working on.
When sitting in very long, boring meetings, or very long train/airplane rides, I can still hack away on vim (or occasionally eclipse) for hours despite the complete lack of power outlets. The fact it's bash/posix means that I can run most of my tools locally as is necessary when I cant ssh to my real development servers.
So basically its not that I prefer OSX as a dev environment, it that OSX provides the same dev environment with a much, much longer battery life.
(oh also good Exchange integration via ical and mail.app don't hurt).
My current laptop is a Thinkpad x200, which goes for at least 8 hours of real use (the manufacturer rates it at about 11 hours).
The convenience of something like apt for quickly assembling or installing your machine with all software automatically updated is hard to beat. Mac OS also tends to ship with older versions of software and rarely gets newer versions without a full OS update - meaning they will get older and older with time.
OTOH, there are many scenarios where a Mac is the only option. Any development for iPhone or Mac is painful on other platforms.
The list of packages available in homebrew is growing at a pretty crazy rate as well. It's currently the most forked project on github (https://github.com/popular/forked).
So then, I've got 2 ubuntu boxes, and a mac that needs rebuilding. Dev stuff has been moved from hw linux to a redundant array of cheap virtual machines. One of the HW linux consoles is repurposed to run vms, run the vm generator, and also do some ui stuff, since Xemacs and chrome are pretty much the same anywhere. All well and good.
So, linux box #2 doesn't like to have a keyboard plugged into it for any length of time. It starts to ignore it. (Why, I don't know). But it runs VMs like a champ, so there it is.
Linux box #1 does fine for months, until this morning, when Xorg fubars itself, and then proceeds to do it every 15-20 minutes.
So, now, I guess, I'm back to the mac. Since it's hd has been rebuilt in the intervening time. Though I'm still getting used to the terminals in Lion.
But that's not what I came here for, The real point of the story is:
emacs --daemon
and emacsclient -c.
So now, in the dev vm start up emacs in daemon mode. Then, you can connect to that process from any tty or xserver. With all your state. I like state.
But when I see what is gnome on Ubuntu 11.04, I don't really know if I would like to switch back know. I don't know how to put it, but my desktop pc is _not_ a touchscreen, I don't understand why they changed everything as if it everything was an iPad... Moreover it seems to me that the state of Firefox (yeah I'm still rooting for FF) on Linux is largely lagging behind win/mac at least for its UI. And worst of all, I'm feeling that a lot of skilled developers have switched to Mac OS recently and putting their skills to develop .app instead of .deb now.
I'm actually a bit sad because I love Linux more than anything.
On a tight budget, my kids use the much older x60 and x61 (on Ebay for about $150-$200), and even the (quite old) x40 and X41.
I used a Mac laptop for years (PowerBook 12") and, although the OS was pretty good (that's high praise from me) from a user perspective, the hardware was awful.
Aluminium is not an appropriate shell material for a mobile device. Being able to swap the hard-drive is essential, unless you want to buy a new device each time you drop it.
The Thinkpad is so much better than the Apple in every way. I run Ubuntu on mine, and it works perfectly.
The Thinkpad even looks better than a Mac. Not immediately out of the box of course (new Macs look lovely), but after a few months of use, the Thinkpad's magnesium alloy shell still looks pretty good, while a Mac's aluminium is scuffed and scratched.
No real scratches on it of huge amount, but aluminium as shell works quite nice thank you very much. I've had this laptop for almost 3 years now, outside of the whole case being warped around due to impact its pretty much same as it ever was.
Apt > (ports,mac,brew) anyday, but rarely is it an issue.
Trivial to fix if you know about it, but you have to figure it out which easily wastes as much time as having to install macports.
Finally gave up, installed Ubuntu on a VM, and synced my dev files on OS X with my dev environment with Dropbox. Ran all my code on in my Ubuntu VM just fine.
Some things I love OS X for, other things I leave to Linux because they're still much much easier to develop for.
Of course, it's not as good as Linux for some things, and in those cases, it's not hard to get Linux access.
OSX is great.
I use Linux desktops for serious sysadmin tasks, due to focus follows mouse, but I really like having CS5.5, iWork, etc. even on a desktop. I'm also a lot happier with OSX for mobile devices due to power management, device drivers, etc. And, I love the iPad and iPhone, and the Mac is a much better host for those.
Really, mac ports covers 95% of what I need on a machine. Being able to scroll in a non-focused window really covers most of my need for pointer-focus too.
So then, I've got 2 ubuntu boxes, and a mac that needs rebuilding. Dev stuff has been moved from hw linux to a redundant array of cheap virtual machines. One of the HW linux consoles is repurposed to run vms, run the vm generator, and also do some ui stuff, since Xemacs and chrome are pretty much the same anywhere. All well and good.
So, linux box #2 doesn't like to have a keyboard plugged into it for any length of time. It starts to ignore it. (Why, I don't know). But it runs VMs like a champ, so there it is.
Linux box #1 does fine for months, until this morning, when Xorg fubars itself, and then proceeds to do it every 15-20 minutes.
So, now, I guess, I'm back to the mac. Since it's hd has been rebuilt in the intervening time. Though I'm still getting used to the terminals in Lion.
But that's not what I came here for, The real point of the story is:
emacs --daemon
and emacsclient -c.
So now, in the dev vm start up emacs in daemon mode. Then, you can connect to that process from any tty or xserver. With all your state. I like state.