A Few Tips for Using Saros for Remote Pairing

Saros (pronounced “zar-ose”, btw) is a set of extensions to Eclipse to support real-time collaboration. It is a research prototype at the moment, and as such has some rough edges. In 15 or 20 years, most programs will be written through real-time collaboration, so for me it’s worth a bit of pain today to experience the future.

This post describes what I learned from the Saros team about what is required to get started successfully. Unfortunately all the lessons are in the form of arcane magic (that is, I can’t explain to you why they work), but fortunately they do work.

Use Jabber.Org

Initially David Saff and I tried to use gmail.com as our Jabber server. For mysterious reasons, that doesn’t work. Sign up for an account at Jabber.org instead.

Preload Projects

When one person shares a project, the other people in the session theoretically don’t need to have the project. However, Saros is slow at transferring whole projects. Instead, make sure that you have both checked out and imported the same version of the project before you start. Then, when you accept the invitation to share, make sure you select “Share existing project” instead of “Create new project”.

HTTP Proxy Magic

If you are using Mac OS X, you need to trick Eclipse into not using HTTP proxies. Select Eclipse>>Preferences>>Network Connections. Change from “Active Provider>>Direct” to one of the other settings. Press “Apply”. Select “Active Provider>>Direct”. Press “OK”.

You only need to do this once per Eclipse installation. Don’t you just love computers?


…to Lutz Prechelt, Karl Beecher, and Björn Kahlert for their help.


Maggie Leber (@MaggieL)November 19th, 2010 at 12:14 pm

Hey Kent–

Sometime, I’d like to invite you to sit in for one of our “Wonderland Wednesday” sessions. In WW, members of the OpenWonderland.org project work colllaboratively on our code in an open-source virtual world environment….our IDE tool of choice for Wonderland is NetBeans, but what we do would work just as well with any tools that will run under XWindows or VNC.

Here’s a blog post on the subject with some screenshots:


All you need is a browser able to launch Java Web Start applications. A working headset is advised; Wonderland provides high-quality immersive voice chat.

“Open Wonderland is a 100% Java open source toolkit for creating collaborative 3D virtual worlds. Within those worlds, users can communicate with high-fidelity, immersive audio, share live desktop applications, and collaborate in an education, business, or government context. Wonderland is completely extensible; developers and graphic artists can extend its functionality to create entirely new worlds and add new features to existing worlds…”

MattNovember 19th, 2010 at 12:16 pm

“In 15 or 20 years, most programs will be written through real-time collaboration”

Is this a quote from Engelbart’s Mother of All Demos in ’68?


adminNovember 19th, 2010 at 12:17 pm

Nope, that’s just my opinion.

MattNovember 19th, 2010 at 12:45 pm

Hehe… I agree, though it might come sooner.

My wife and I watched the documentary “Objectified” recently and I mentioned some of the early work that Engelbart and others did with regard to interaction design. Amazing how much foresight some of those guys had back then. Saros is a long ways removed from his demo but it was still cool stuff for 1968.

Now if I can get my kids’ teacher to set aside his love of Netbeans, maybe he can try some collaborative stuff in class. :) Thanks for the tips on setting it up.

Lutz PrecheltNovember 22nd, 2010 at 12:21 am

When you use “Use existing project” when invited to a session, please be aware that any changes you have made relative to the session host’s version will be brutally overwritten by Saros.
In that case “Create copy of existing project” is the appropriate choice.
After the session, that copy can either be thrown away or be reused during a subsequent session.

In both cases however, everything that is identical between your starting-point project and the session host’s shared project will save a lot of time because it does not need to be copied over the network.


OliDecember 11th, 2010 at 7:45 pm

I’ve had several successful pair programming sessions recently using LiveMeeting to work with a colleague remotely. This allows you to use any IDE, and you both see exactly the same thing and can control mouse or keyboard on one host machine.

In many ways it’s actually been easier than physically sitting with someone, as you are physically more comfortable.

Not sure if it helps, but on a similar theme…

Mike SmullinMay 14th, 2011 at 7:02 pm

I’ve been following Saros and alternatives since 2008. I agree with Kent that it is the future–once an implementation is completed with the sync bugs worked out. Saros remains the best implementation of all, though, still today.

Cloud9Ide.com also looks promising, but the collaboration part of it is not complete yet (based on Mozilla Bespin).

Saros takes pair programming to a new level because of the multi-driver support (e.g. two cursors, one file). Not many other pairing solutions support this. This is an added productivity multiplier beyond the keyboard sharing / looking over shoulder style.

I love using it whenever I get the opportunity, but its so hard to setup. So what I recommend is set it up in a VirtualBox VM one time, then share that VM with others.

I’ll never forget the name Kent Beck thanks to “Ease at Work”. Changed my life. Thanks for all you do Kent.

Yuriy OkhoninJune 7th, 2011 at 6:18 am

Hello, Kent.

Can i ask a bit awkward question here?
I own a small company in Russia and I want to create rss aggregator with your and some others rss feeds for my developers.
Is it acceptable?

Thank you for your books they help us a lot :)

Yuriy OkhoninJuly 19th, 2011 at 7:07 am

Hello, i have an example of TDD fail for you :(
well we are doing incremental development with tiny steps for a while, some data serialized to xml.
/*php+simpletest used*/

function testAnyXmlToArray() {
$Xml = ”

$this->assertEqual(Xml::FromArray(Xml::ToArray($Xml)), $Xml);

function testAnyArrayToXml() {
$Array = array(1,2,3,”strkey”=>”value”);
$this->assertEqual(Xml::ToArray(Xml::FromArray($Array)), $Array);

Oops.. some things just can’t be done

adminSeptember 20th, 2011 at 7:33 am

Yes, that’s fine.