Launchpad, Github, Bitbucket
I’m not a programmer. I don’t harbor dreams of writing elaborate code that gets lots of users and has lots of programmers follow my lead. But once I get into it, I enjoy hacking on code, and am happiest to have just a few lines of minimal and/or clever code that a few other people with odd tastes might also enjoy making use of. I like to share.
I’ve been thinking a lot about distributed revision control and online code hosting lately. I’ve stirred up a few conversations on twitter because of these thoughts, and wanted to lay them out here.
I tried with Git. And I got far enough with it to get into trouble. I eventually made a mess of a few commits on a public (SVN) repository. Since I couldn’t make distributed revision control work with subversion, then I ended up learning subversion better (and rsyncing between my private, local branch and the mainline). From the start, I found git to be too far from my own mental model, and too optimized for situations I didn’t value (huge code bases, distributed teams of mergers, fast performance and in-place context switching). So I didn’t try very hard. That’s fine. There were other choices in distributed revision control.
I liked Bazaar from the start, largely on its stated values (easy model, one repo is one directory, concentrate on getting it right before making it fast), and that it got me up and running quickly. It wasn’t only from the out-of-box experience, but the excellent documentation on different prototypical users and their workflows, and the fact that there was an easy path to push repositories to a remote server using only sftp .
When I was looking at these solutions, I set Mercurial aside, because it didn’t seem to have a lot mindshare at the time, and I had difficulty installing it on the Mac the first time. (Actually, I had problems recently, until I realized that using the Makefile was far less effective than using my oft-incanted ‘python setup.py install‘.)
It’s a bit over a year and a half later, and some of the sheen has definitely gone off bzr for me. There are some little annoyances that have built up over time:
- The admirable striving towards “getting it right” has resulted in many updates to the repository format since I got started, and countless updates to the mainline program. This commitment to keeping the project up to date is admirable, but it’s annoying to chase.
- My dependency on the rspush command (I like to have a working copy of my most important repositories on remote machines, and not have to rely on installing bazaar if something goes horrifically wrong) means that I must always install the BzrTools plugin, which multiplies the annoyance of the development churn.
- bzr-svn was extremely unsuccessful for me.
I could deal with these small issues easily, but the big issue is becoming hard to ignore: if I want to share my repositories with other people, then I don’t have a clear way of doing it.
Yes, I know about Launchpad. I’ve even hosted a now-abandoned project on it. It’s an impressive bit of engineering and a wonderful, completely free service. There are numerous interesting projects with a home there . I just don’t think any of my near-future projects could have a home there.
As a dilettantish coder , I am drawn to the sorts of odd little projects that one sees on Github. I can easily bookmark a project for later inspection, and do so often. Github’s prolific social model clearly works. It knows that its users are developers, and makes every part of its interface geared towards that. I feel comfortable enough with git that I might branch, modify, and push back existing code, but I don’t feel comfortable using it to organize a project of my own doing.
Launchpad’s hosting, by contrast, feels “heavy.” In fact, it feels like a SourceForge clone, where it hides the code away, and concentrates on end users. That’s great for users, and sounds very appropriate to the user-centric focus Canonical has. But I don’t need a bug reporter and project planning and translations and a knowledge base. I want programmers to see my code and to get my code if they want. I want to provide some context in the form of a README. That’s more or less all I need to publish.
On Launchpad, giving a context involves writing text in a web form that’s half the size of the form that you are given for telling people how to report bugs. Nothing is integrated with the excellent revision control system other than the code itself — and the code is consistently four (non-obvious) clicks away from the project home page.
I have devised a crude way of making a permanent note of a project’s code I want to remember, but it’s a multi-step process (involving “subscribing” to a code repository, but disabling all email notices of changes) that I keep forgetting how to do. I’m not saying Launchpad isn’t usable: it’s not easily usable by me, who likes using the developer-as-user-centric Github model.
(Google Code, as an aside, is nice. It’s unobtrusive interface has a nice set of features, and they get out of your way when they’re not needed. It’s not instant to – for example – assess how fresh a project is from the date of its last commit, but that information is a couple consistent clicks away. I just don’t want to initiate a project using subversion, knowing that, given my history, it will reach some state of abandonment eventually: if I’m the only developer, then the SVN repository is essentially locked away in an immutable state forever. I’d rather let people discover my code three years down the line and branch freely.)
So, what am I thinking about now? Despite some encouraging words I heard from a local developer who’s on the LP team, I’m very dubious about the prospect of Launchpad bending to my will. It would involve de-emphasizing the work of half a dozen teams in the web interface, all in the interest of Making Things Nicer for Adam. However, building something new up from something minimal might work well. It wouldn’t be that hard to expand Loggerhead, the core Bazaar repository-view web app, to include basic social web features. It’s a foolish thought for me to have at this time (when I need to put all my available energy into the thesis).
On the other hand, Bitbucket looks like a pretty reasonable Github clone, and from my experience, hg‘s model is not too far from bzr‘s. Right now, barring any further developments, I’m considering publishing future projects there. Yes, it would involve changing to hg (Snej‘s Murky makes that a bit more inviting.) On one level, that’s mad, to change my revision control system on account of an social web application (that’s an unapologetic clone of a different, wildly successful service). But that’s what’s important to me right now: if I want to share with the world, I want enough people to see my code and take it home with them. I want it to be easy for me to manage changes and evolve the code for as long as it engages me, then set it free.
Well, I think I’ve said some fairly dismissive things about just about anyone’s favorite tool and/or service. I’m opinionated, but I’m ready to learn from those who like to inform and engage politely and productively. I’m not, however, interested in zealots.