Emily Post for the digital generation.

Patches, Forks, and Takeovers

A few years ago I discovered a tool called webchat which allowed you to script interactions with a website. You wrote things like:

GET http://www.perl.com
   EXPECT OK && /perl/
   GET not_there.html
      EXPECT ERROR
   BACK
BACK

and it would go fetch the page, see that it contained what you thought it did, and so on. Great, I thought, I can use that for testing website development! Only, around that time I’d learnt how to use Test::Simple (now the standard way to write tests in Perl) and I found that webchat wouldn’t work nicely in conjunction with it.

So I wrote WWW::Automate, and it was good. OK, it wasn’t. It was OKish but it had some major flaws, and if you look at that link you’ll see that one of those flaws is that it hasn’t been updated since 2002.

So then Andy contacted me, and here begins the actual etiquette part of this post, because what followed was about the smoothest patch/fork/takeover process I’ve ever been part of, or, indeed, ever seen. Then again, we always see the forks that end up causing acrimony and wank, while in the background there are probably dozens of friendly ones happening every week. I thought I’d describe what happened between Andy and me, because unless you’re part of one you don’t often get to see a friendly fork.

Andy emailed me at the contact address given in my module’s documentation, and said (paraphrasing wildly because neither he nor I seem to have the email still lying around):

Hi, love your module. I’ve noticed that it’s rather inefficient in the way it stores webpages internally, so here’s a patch. I was also wondering whether you’d considered $FEATURE.

Crickets chirped. A plane passed by overhead. I was swamped in other work.

And so, over the next little while, Andy emailed me occasionally asking whether I’d had time to look at his patch, and I replied “not yet, sorry, I’m busy.” Eventually he emailed me the following (and again I’m paraphrasing wildly):

I’ve made quite a few modifications to WWW::Automate for my own use, and I was wondering if you’d mind if I released them to CPAN under a different name? I would of course credit you appropriately, and if/when you find time to work on WWW::Automate again, I’d be very happy to merge my work back into it.

I gave my assent, and thus was WWW::Mechanize born. The earliest version I can find on CPAN contains the following credit:

Based on Kirrily Robert’s excellent WWW::Automate package.

That, my friends, is how to make someone feel good about forking their software.

People have talked at some length about the GPL and other open source licenses, and the fact that while they theoretically allow us to fork projects at will, in real terms we just don’t do that. There’s an etiquette to it, which is interesting, because the open source culture is dealing with situations that just don’t arise in the mainstream, and yet the basic points of consideration and accountability and respect are being applied to this new situation with amazing regularity.

I’m on the modules@perl.org mailing list which attempts, among other things, to help authors who wish to take over abandoned CPAN modules. The usual method advised is:

  • Check the license
  • Contact the author
  • Wait and/or repeat for a suitable period (longer for more widely used modules)
  • Discuss with users (if there is a mailing list or similar)
  • Approach modules@cpan.org to have ownership transferred to you
  • Document the takeover in the module’s documentation, crediting the original author

Andy’s fork of WWW::Automate is a good example of the Right Way to do it; the only things that could have been done better were on my part. Ideally I should have realised that I wouldn’t have the time or enthusiasm to keep maintaining WWW::Automate, and simply handed it over to him rather than there being a name change. And now, since there has been a name change, I really ought to go upload one final version of WWW::Automate to CPAN with documentation saying it’s no longer supported, and that people should use WWW::Mechanize instead.

Perhaps this evening. If I weren’t the queen of procrastination, I wouldn’t have had this story to tell in the first place.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Reddit
  • Slashdot
  • StumbleUpon
  • Technorati

1 Comment so far

  1. The Farm: The Tucows Developers' Hangout April 20th, 2005 8:47 am

    [Geek Etiquette] Patches, Forks and Takeovers
    Kirrily “Skud” Robert, who writes the more-useful-than-many-might-think
    blog Geek Etiquette, has an interesting blog entry that those of you
    who write Free/Open Source software might want to read:We always see the forks that end up causing acrimony…