Russ Cox

Russ Cox

Software developer (Plan 9, RE2, Go)

Posted

Filed under:

Who are you, and what do you do?

I write programs. For about a decade I worked on the operating system Plan 9 from Bell Labs. I now work at Google, where I created Google Code Search and along with it the RE2 regular expression library. For the last two and a half years I've been one of the core developers of the Go programming language. In free time outside of work, I wrote the last two major versions of the software behind the Online Encyclopedia of Integer Sequences.

I also write about programs. The writing I'm most known for is my series about how to implement regular expressions and my construction of a zip file that contains itself.

What hardware do you use?

I lost interest in having the new shiny a long time ago. I like to find things that work for me and stick with them. I also rarely bother to pay for something new when I can get the previous model for less.

At home that means a refurbished Mac Mini from 2006, a used Dell 2001FP 20" LCD from 2004, and a Samsung ML-1750 laser printer from 2004. More recent additions include an Apple Time Capsule for backing up the Mac and running the home network, a Netgear ReadyNAS Duo (with mirrored disks) for networked storage, and a Fujitsu ScanSnap S510. I swear by the small Apple keyboard (in stores they have one that size with a USB cable too) and the Evoluent mouse. They all continue to serve me very well. The only thing I might replace if I were starting over would be the ReadyNAS box. The low-end model I have runs Linux on what appears to be a SPARC simulated by an FPGA; saying it's slow is an understatement, but it's only a disk. The printer and the scanner both seemed extravagant at the time, but they have been absolute workhorses and well worth the money.

When I'm not at home, and even often when I am, I work on my laptop. I used an IBM Thinkpad X40 running Linux from 2004 until very recently. It was small, light, sturdy, and had three mouse buttons. What more could you want? I recently replaced my X40 with a refurbished Lenovo Thinkpad X201s, which is also small, light, sturdy, and has three mouse buttons. On top of that, it has a gorgeous high-resolution screen, an SSD, 4 cores, and 4 GB of RAM. I know it won't seem like much in a few years, but right now it sure feels like I'm living in the future.

As far as gadgets, the ones that have lasted are my Bose QC2 headphones (the QC15 are just as nice), Nexus One phone, Nikon D90 with 18-200mm AF-S lens. I bought a Kindle 3 recently, and I like it, but it hasn't stood the test of time yet.

I also use a lot of pens and 8.5x11 paper pads. I scribble constantly when I'm trying to work things out. I don't save any of it, but it helps me think.

And what software?

I ran Plan 9 from Bell Labs as my day to day work environment until around 2002. By then two facts were painfully clear. First, the Internet was here to stay; and second, Plan 9 had no hope of keeping up with web browsers. Porting Mozilla to Plan 9 was far too much work, so instead I ported almost all the Plan 9 user level software to FreeBSD, Linux, and OS X. The result is called Plan 9 from User Space and is probably much more widely used today than Plan 9 ever was.

I run acme full screen as my day to day work environment. It serves the role of editor, terminal, and window system. It's hard to get a feel for it without using it, but this video helps a little.

Rob Pike's sam editor deserves special mention too. From a UI standpoint, it's a graphical version of ed, which you either love or hate, but it does two things better than any other editor I know. First, it is a true multi-file editor. I have used it to edit thousands of files at a time, interactively. Second, and even more important, it works insanely well over low-bandwidth, high-latency connections. I can run sam in Boston to edit files in Sydney over ssh connections where the round trip time would make vi or emacs unusable. Sam runs as two halves: the UI half runs locally and knows about the sections of the file that are on or near the screen, the back end half runs near the files, and the two halves communicate using a well-engineered custom protocol. The original target environment was 1200 bps modem lines in the early 1980s, so it's a little surprising how relevant the design remains, but in fact, it's the same basic design used by any significant JavaScript application on the web today. Finally, sam is the editor of choice for both Ken Thompson and Bjarne Stroustroup. If you can satisfy both of them, you're doing something right.

Aside from the Plan 9 tools, I live mostly in Google software. I use Google Chrome to get at my Gmail on my vanity domain swtch.com, I use Blogger to manage my blog posts (but I write them in acme), I use Google Reader to follow sites on the web, I use Google Voice to direct my phone calls.

I use Picasa to manage photos on my Mac and upload them to SmugMug for sharing with friends, and then I use SmugFolio to sync them nicely onto my Android phone. When I'm traveling, I'm a big fan of TripIt and their Android app. I'm excited about being able to run Android apps like SmugFolio on my Google TV box.

I use Unison to sync files between my various computers. Dropbox seems to be the hot new thing, but I like that Unison doesn't ever store my files on someone else's computers.

What would be your dream setup?

The thing I miss most about Plan 9 was the way that no matter which computer you sat down at, you had the same environment. Because we were working off a shared file server - there were no local disks on the Plan 9 workstations - you could go home and log in and all your work was there waiting. Of course, it only worked because we had good, fast connectivity to the file server, and only file state - not application state - transferred, but it was still a huge win.

Today it's taken for granted that everyone has local files on disk and you need programs like Unison or Dropbox (or for the power users, Mercurial or Git) to synchronize them, but what we had in Plan 9 was completely effortless, and my dream is to return to that kind of environment. I want to be working on my home desktop, realize what time it is, run out the door to catch my train, open my laptop on the train, continue right where I left off, close the laptop, hop off the train, sit down at work, and have all my state sitting there on the monitor on my desk, all without even thinking about it.

Moving everything into "The Cloud" may be a path to that dream, but we are definitely not there yet.