Since the start of October we have been using Bitbucket to host the CloudEngine project. Almost as soon as we made the decision to use Bitbucket, people have asked why? So, I thought I’d reproduce an email I wrote to colleagues then. At the end I’ve noted how I feel about the decision two months on…
During September, I was tasked with deciding on where to host the free/open-source CloudEngine. By host, we mean essentially:
- A repository of the source code (which basically keeps track of the ‘version’ of each file),
- A way for developers to browse the source code repository online,
- A bug and issue tracker,
- A Wiki for documentation.
The provisional decision is to use Bitbucket, which uses the Mercurial distributed version control (repository) system (DCMS). I’ve summarised the reasons below.
The choice has been between:
- The Open University
- Github, http://github.com/
- Bitbucket, http://bitbucket.org/
- Google Code, http://code.google.com/hosting/
Hosting the project at the OU was discounted early, as we wish to encourage the use, development and contributions to CloudEngine from the wider community. The three remaining contenders use two different version control systems, and which of the two to use – Git or Mercurial – has been a big part of the choice. Note that both Git and Mercurial are free/open-source and cross-platform software tools, with command-line and GUI alternatives. And the three hosting contenders are all free for open-source use.
To help in the decision I canvassed opinions from the Moodle and OU communities:
- Search down the Moodle forum discussion, “Why Git?” ,
- The OU web developers group thread, Views wanted on Git and Mercurial.
Some reasons to use Git (and Github) are:
- Git is used for a lot of high profile and large projects including the Linux kernel,
- Some projects that are interesting for the OU, Moodle and Drupal, have plans to migrate to Git (and the OU-VLE team in LTS plan to move to Git).
- Git has the reputation for being flexible, powerful and fast.
- Github has the most projects of the three platforms.
Some reasons to use Mercurial (and Bitbucket or Google Code) are:
- Mercurial seems to have been designed with better cross-platform support in mind (Git was initially developed for Linux),
- Where Git is a toolkit with about 146 sub-commands depending on the operating system (git –help –all), Mercurial is a cohesive ‘product’ with only 50 commands (hg –help). The large number of commands in Git would not be such an issue, if discussions and blog posts hadn’t pointed out that you start to need quite a number of commands for even a simple workflow. That is, Git may be complex for even simpler usage. (Eg. reprog.wordpress.com/ Still hatin’ on Git now with added actual reasons )
- Mercurial has the reputation of having a shallower learning curve than Git – which relates to the point above.
- Mercurial is written in one language (Python + C for ‘diff’), while Git is written in several languages
- CodeIgniter, on which CloudEngine/Cloudworks is built, uses Bitbucket/ Mercurial (Pyrocms, also built on CI uses Github/ Git).
- Bitbucket has more than 28,000 projects, so it isn’t small!
- Plenty of respected projects use Mercurial/ Bitbucket/ Google Code, including Mozilla (Firefox), OpenSolaris, OpenOffice, Adium, Python (will migrate), Vim, Growl, Chromium (os Chrome browser)…
Some things to point out – these tend to level the “playing field” between Git and Mercurial:
- It better to use any reasonably well-designed version control system, than none at all.
- It is generally considered better to use one of the newer distributed systems like Git or Mercurial, than one of the old ones like CVS (eg. http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/ )
- CloudEngine is fairly small, when compared to Moodle and Drupal, and personall, I’d like to keep the “core” fairly small. So we don’t necessarily need maximum flexibility if there is a cost in complexity.
- And I was concerned with getting the initial core developers – Richard, Juliette and myself up to speed quickly.
- In the new distributed paradigm, there will be nothing to stop someone cloning our repository from Git to Mercurial or vice versa. And we can then pick up improvements, for example as a set of patches.
- There will be nothing to stop anyone submitting patches, whether we use Git, Mercurial … (RCS!)
- If sufficient numbers of CloudEngine developers use Git and we use Mercurial, we may at some future point provide a mirror of CloudEngine in Git. (And we may even move to Git – nothing is set in stone.)
- And finally, I accept that as developers, we may well have to learn both Git and Mercurial to work on various projects.
It has been a hard choice, but on balance I propose using Mercurial. And I propose Bitbucket over Google Code as:
- Google Code has the feel of a repository, while Bitbucket will hopefully be a community.
Two months on…
- hg serve – type this simple command to start up a basic web server, with configurable pull and push options.
- Mercurial makes it easy to configure hooks to run on certain commands, for example commit and update. Git also has hooks, and I can’t comment on the comparable ease-of-use.
- Syntax highlighting, progress… and other bundled and 3rd party extensions
- Patch queues – I haven’t looked at these yet! (Mercuarial Queues Extension.)
Note, we have Mercurial on our Linux servers, courtesy of EPEL.
I’m fairly impressed with Bitbucket too. The wiki and issue-tracker are easy to use, with some useful macros, for example, <<issues query [format]>>. We have used the latter example on the Releases page in our wiki. It’s neat having the Wiki pages in a Mecurial repository. And the Mercurial support team are fairly responsive to queries and isuses.
If I have one slight criticism, it is, why have the wiki and issue tracker per repository? I expect CloudEngine to need at least one more repository for extensions and contributed plugins – as we won’t want a separate Wiki for that repository, we’ll need some fiddly links. And the links are generally longer. Anyway, these are relatively small points, and may be partially answered by considerations like the macro feature mentioned above.
So there you have it – no complaints, and use whichever platform suits your needs.
Watch this space for more on recent and forthcoming CloudEngine releases.