Bazaar branch hosting
Launchpad can host branches of your project's code, using a revision control system called Bazaar. Since Bazaar is entirely distributed, it also allows you to register branches that are actually hosted elsewhere. As you've seen in our first examples, the project that develops Bazaar is itself hosted on Launchpad.
Regardless of where your code is hosted, Launchpad makes it accessible through a convenient catalog.
Bazaar is a very cool revision control system, powerful, flexible and fast. It's written in Python, so it's also easy to embed and modify. You can find out more on the Bazaar web site.
Everybody has revision control
Bazaar is designed to solve a key problem in CVS or SVN. When you store code in CVS or SVN, which have a centralised server, there is a well-defined set of people who can make changes to the code that is centrally hosted in revision control. Only people who "have commit access" can use revision control with your project. You can set up read-only access for other users, but they won't be able to keep track of their changes since they are not allowed to record those changes on the central server.
Bazaar eliminates that problem. Everybody has full revision control over their own version of the repository, even if they are not yet official committers to the project. Anybody can make their own branches, at any time, without having to ask permission first.
For example, let's look at the work of Pete Savage:
Here's the part of the page we're interested in, as it looked at the time of writing:
As you can see, Pete has been pretty busy! He's published branches of at least six projects in Launchpad: ltsp, gisomount, student-control-panel, grasynco, reforany and tcm.
Anybody can publish branches
Not only can you create your own branches of ANY project in Launchpad, you can also publish those branches and have them show up in the listings of work in progress for the project. Importantly, you don't need any special permission to have your work show up in the listings for any project in Launchpad.
Major project branches - representing a stable line of development, or the trunk - do get special placement on those listings, but all the branches, including yours, will show up in the same place.
For example, take a look at the branches for Ubuntu's "Update Manager":
The relevant part of the page at the time of writing is included here:
You can see that at least four people have their own branches of Update Manager: Benjamin Montgomery, Michael Vogt, Sebastian Heinlein, and Brian Murray. In addition, there are two branches published by the "Ubuntu Core Development Team". We'll take a closer look at team branches shortly.
Publishing branches with Bazaar and Launchpad
You can publish a branch on any server that you can write to, using Bazaar's own bzr+ssh protocol, FTP, SFTP, HTTP-Webdav or just by mounting the filesystem via NFS or another network protocol. Once it's published, you can share the branch with the world using plain HTTP or HTTPS.
To host a branch using Launchpad, you can push it to Launchpad directly from Bazaar using either bzr+ssh or SFTP. You can push branches for existing projects, or you can publish "any old stuff", which is unclassified.
Mirroring external Bazaar branches with Launchpad
If you have a branch published on your own server, you can still register it with Launchpad. Launchpad will monitor it and let interested people know whenever you add new code.
Launchpad will also make a backup of your code, which is accessible to everybody even if your server goes offline. And of course it means that your branch will show up in the project's listings.
Lowering barriers to participation
All of this is specifically designed to lower the barriers to participation in your project. A new developer who wants to make a small contribution can do so without having to first get permission to change the development trunk. He can branch from the trunk, work on his feature with full revision control, publish that branch to Launchpad or any other web hosting service, and eventually ask for his work to be merged into the trunk by a developer who does have commit rights there.
Let's take a closer look at the process of creating a branch.