5 August 2007
After my recent post on the status of the Bitten project, a couple of folks spoke up on the mailing list to say that they're using Bitten with some success, or at least would like to, which really encouraged me to start working on the project again. Sometimes these “small things” can make a real difference.
So I'm happy to say that Bitten is back, it is moving over to edgewall.org, and has already seen some big sweeping changes to get rid of some serious flaws in the initial design. I'm hoping that given another couple of weeks, there'll be a new release that'll truly rock.
The way Bitten came into existence may be a tad unusual, and might explain why it ended up the way it did. First and foremost, Bitten was actually the basis for my CS diploma thesis. I was looking for a topic that'd be fun and interesting, and Greg Wilson kindly supported me in researching options, which—after some iterations—led into the field of continuous integration combined with software metrics. In retrospect, the topic really was both fun and interesting, plus it was a good topic for a thesis because there's a relatively large body of relevant theory out there.
Second, I applied for some “funding” from Google by submitting Bitten as a Summer of Code project. Compared to most other SoC project, Bitten was pretty ambitious, but I had the advantage of being familiar with the larger system (Trac), being able to directly check in any changes to Trac that I needed, and of course having to do the work anyway for the thesis.
In any case, those factors made Bitten a bit different from your typical open-source project, in that there was both a strong academic background (thanks to the thesis), as well as a pretty tight deadline for the implementation (thanks to SoC). The result was that the design was perhaps less practical and less flexible than I would have wanted it to be, ideally. After some point, you may recognize flaws in the design, but aren't willing to change them because deadlines are all over the place, and after all you may have already written a whole chapter about that particular design.
In addition, you reach a burnout after completing an ambitious SoC project and a diploma thesis. After I was “done”, my motivation to do further work on Bitten dropped significantly. I didn't want to give in to that feeling initially, but it definitely took over a couple weeks later.
So now, after a long hiatus from working on Bitten, I'm back. There have already been some major changes to address some of those early design flaws I mentioned: communication between the build master and the build slaves is now done over regular HTTP, instead of a custom application protocol on top of a custom Python implementation of BEEP. Among other things, that means you can now require build slaves to authenticate with the master, thus prohibiting random machines from connecting and attempting to perform builds. Also, instead of the build master preparing and transmitting archives of the code to the build slaves, the slaves now perform the checkout of the code from the version control repository themselves. That means that things like
svn:externals now work as expected, as does the expansion of
svn:keywords in source files, etc.
But of course, there´s still more to come: For example, I want proper integration with the Trac web administration interface, and an improved web interface in general. I want to add more kinds of charts for metrics display, more and better ways to configure them, and more robust collection of Python code coverage metrics by moving to coverage.py.
An important goal for the short-term future is the ability to effectively use Bitten to track the other projects on edgewall.org, i.e. Genshi, Babel, and Trac. Each pose there own unique challenges, and the increased exposure of Bitten will hopefully feed back into improving its´ design and implementation.
So I hope you can tell that I'm excited about moving Bitten forward. If you have a project that could benefit from the way Bitten does continuous integration, I'd be happy to hear from you.