This is the place to go to find out more about how DistributedDevelopment actually works. This shouldn't be stuff that you have to know to make use of it (for that see DistributedDevelopment/Documentation) but may satisfy your curiosity, help you get involved, or help you do more by understanding the internals.


DistributedDevelopment is built on top of Bazaar and Launchpad.

We use Bazaar as a version control system to take advantage of it's great merging capabilities and the fact that it is possible to shape it to have specific behaviour for packaging. The base of storing versions of the code is there, and we are working to make it work really well for developing a distribution.

We then use Launchpad for hosting the code, getting us things such as merge proposals and bug integration. There is also work underway to integrate Bazaar and the package building part of Launchpad (Soyuz) which will mean that we can start to do some interesting things with that.

The Importer

The major behind the scenes part of DistributedDevelopment that isn't Bazaar and isn't Launchpad is an importer that mirrors source packages and Bazaar branches. It allows us to run both systems in parallel, while still allowing Ubuntu developers to choose either depending on needs, and for us to migrate to DistributedDevelopment in steps.

We want to provide all of Ubuntu as Bazaar branches hosted on Launchpad. This means that we want to import all Ubuntu packages into Bazaar. However, we obviously can't stop Ubuntu development while we do this. Therefore it's an ongoing service that watches the archive and imports new uploads in to bzr.

In addition it is possible to push to the branches (and soon you will be able to build from them without uploading a source package yourself), this means that the archive and the branch can get out of sync. Therefore the importer has code to handle this, and to detect whether it was someone using DistributedDevelopment, or two people racing to do an upload (known as a collision).

If a collision is detected then the importer will make the branch the same as the archive (as the archive is authoritative) and then propose a merge of what was in the branch back in to itself. This allows us to ensure that changes aren't dropped if this happens.

For more information on the service, and how to understand some of the things it may do, see DistributedDevelopment/UnderTheHood/Importer.

DistributedDevelopment/UnderTheHood (last edited 2010-02-19 00:20:05 by james-w)