building all the time
Recently, when Patrick Galbraith and I put together the next moxi release, we spent a bit of time getting the build clean on a number of platforms and with a number of compilers. Continually building and testing on multiple platforms helps ensure the usefulness, quality and longevity of the code.
This is something all of us at NorthScale believe is good for the projects we lead and contribute to. Dustin Sallings has long been doing this for memcached, as you can see from the memcached wiki and the build farm itself. All of us at NorthScale have continued this effort joined by community contributions. As you can see, it's quite a comprehensive list. We do this other projects too. For the memcached proxy, moxi, we have another build farm. For those not familiar with continuous integration, buildbot allows us to shorten the time between new code and issues found in various build environments. Every time a developer commits a change*, all of these platforms will try to build and test memcached. If there is a problem, we can spot it right away and fix it, so build problems on other platforms don't linger. There are many benefits: it keeps the code 'ready to release', some platforms may catch errors at compile time other platforms do not catch, etc. To give an example of how this has worked for us in practice, if someone happens upon a platform with an issue, we of course address the issue itself (usually by asking them to file bugs and provide a test case), but we also ask for help adding to the build farm. The Gentoo project, for instance, bundles memcached and covers many, many platforms. An issue came up recently with Gentoo for the ARM architecture. In the process, Dustin asked the contributor, Robin Johnson, if they could set up a builder, so we now have a builder for Gentoo on ARM. For Patrick and I in this last moxi release, this meant adding some new builders to moxi's build farm, turning up the compiler warnings and fixing a number of bite-sized bugs. While many of these bugs are more along the lines of warnings that only compilers in a pedantic mode would complain about, some others pointed to type safety which are those kinds of places in software bugs like to hide. Some caulking and sealing will keep the bugs out. In the end, NorthScale's goal here is to maintain high quality output for memcached, moxi, libmemcached and other projects we either lead or contribute to. As Dustin's report card blog post shows, we've made progress against our goals already; buildbot's steady watch on our tree should help keep us there. * Technically, the process we try to use is to use a "buildbot try" (also contributed to by Dustin) first when making changes, so we keep a tree which is buildable on all platforms all of the time. It allows a developer who hasn't even committed a change to test it. It just works with git to generate a diff, then patches the tree against some common history.