PeriodicPreoccupationsProjectsPicturesPersonPing

Recent musings

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.

/files/images/github.png

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.

/files/images/step1.png /files/images/step2.png /files/images/step3.png /files/images/step4.png

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.
So. Thoughts?

Related Entries:
About the Dissociated Mixes
Twitstream
Writing on remix
My mash
The hidden cost of the UK iPhone: £269 + £252?
Comments (9)  Permalink

Comments

Jesper Noehr @ 08.05.2009 09:27 London/GMT
"on account of an social web application (that's an unapologetic clone of a different, wildly successful service)."

That's an interesting notion, especially since I don't feel there's anything to apologize for. If GitHub had supported Mercurial, Bitbucket wouldn't be here.

I think what you really need to choose is a tool you're comfortable with, and disregard the "social hosting" aspect, as it is, by definition, zealotry.
adam @ 08.05.2009 09:56 London/GMT
Jesper, nor am I calling on you to apologize! I made that point to say that your service is the convincer. If I'm calling on you for anything, it's to add bzr support. :-)

The social hosting is more important than zealotry: it's a part of the tool—much more important than I first imagined. If you are looking to have your code have a life beyond what you've done, you're looking for a way for it to spread, for other people to take it up. GH & BB have shown that a good way to do this is to put the code up front.
Jesper Noehr @ 08.05.2009 10:15 London/GMT
@adam,

My apologies then, I misunderstood ;-)

I think you're right that the social aspect is important, but my point is that since facilities for ~all major DVCS's is available, choosing a tool *entirely* due to the site is a bit on the rough side of things.
David M. Besonen @ 08.05.2009 11:03 London/GMT
HG-Git Mercurial plugin:

http://www.reddit.com/r/programming/comments/8gtom/hggit_mercurial_plugin/
adam @ 08.05.2009 11:21 London/GMT
@besonen,
Thanks, yes, I got pointed to hg-git earlier this week and have even installed it. It might become a tool in my arsenal, but there are two objections to (say) using it to host something on github:
1) It's not my native idiom. Hg might become so, but this bear of simple brain really does prefer bzr.
2) (And more importantly) It's not github's native format. I'm sure the work they did on it is excellent, but I wouldn't want to trust my code to that sort of bridge.
adam @ 08.05.2009 11:27 London/GMT
@besonen ...but the reddit link is excellent for the comments from the principals.
Karl Fogel @ 08.05.2009 16:44 London/GMT
You wrote:

"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)."

If you could summarize some of those ideas in, say, five minutes, what would you say? I understand you don't have time to engage in a full-scale attempt to bend Launchpad to your will :-), but since we're about to open-source it (http://dev.launchpad.net/OpenSourcing), and since Loggerhead is open source already, it might be useful for others to hear what you had in mind...

Thanks,
-Karl
Martin Albisetti @ 08.05.2009 17:15 London/GMT
Hi Adam,
This is a very insightful post for me. I've picked up the task of evolving the Launchpad UI 7 or 8 months ago, and I'm slowly sinking my teeth into it. In the next 3-4 months, you're going to be seeing a lot of changes that should improve the experience for you dramatically. If it doesn't, please come and find me, if you're around freenode, I'm "beuno" and always happy to get feedback and suggestions.
Chris Wanstrath @ 10.05.2009 10:37 London/GMT
While the hg-git bridge is still in beta, it is officially supported by GitHub. This means your code will be as safe with it as it would be using pure Git.

Keep in mind, too, that the beauty of DVCS is how safe your code really is: if an `hg clone` failed, your data would still be safe on the server. If an `hg push` failed, your data would still be safe on your local machine.
No new comments allowed (anymore) on this post.