Our History with VCS's
Tags: opensource
Published: 2023-10-12 05:00:00

I often get asked why Pidgin doesn't use Git. This post isn't going to talk about that directly, but instead talk about our history of using multiple different version control system and why we chose to make those moves at that time.

When Pidgin was originally created by [Mark Spencer](https://en.wikipedia.org/wiki/Mark_Spencer_(computer_engineer)) back in 1998 under the name Gaim, the main version control system to use was [CVS](https://en.wikipedia.org/wiki/Concurrent_Versions_System). So that's what Mark decided to use.

However, this was before even [SourceForge](https://en.wikipedia.org/wiki/SourceForge) existed so Mark had to set up his own CVS server that he ran on his own domain as Open Source code hosting just wasn't really a thing yet.

The project remained on that CVS server for the next few years even as the the project declined as enthusiasm for EveryBuddy, later renamed [Ayttm](https://en.wikipedia.org/wiki/Ayttm), took off.

Then in March of 2003, Rob Flynn picked up development of Gaim by creating a project in SourceForge. Unfortunately he created a new repository and copied the code in instead of importing the existing repository, but that's okay. However, this is the only version control history of the project that is not in our current repository.

Then in March of 2006 we moved to [Subversion](https://en.wikipedia.org/wiki/Apache_Subversion) as SourceForge had recently added support for it as well as automatic conversions from CVS. At the time Subversion was seen as "CVS done right" which admittedly was a pretty low bar. But regardless, it was tantalizing enough for us to make the move.

Before we pulled the trigger to convert to Subversion we were discussing moving to one of the new distributed version control systems. This list included [Git](https://en.wikipedia.org/wiki/Git) with [Cogito](https://en.wikipedia.org/wiki/Cogito_(software)), [DARCS](https://en.wikipedia.org/wiki/Darcs), and [Bazaar](https://en.wikipedia.org/wiki/GNU_Bazaar).

We eventually ended up choosing [Monotone](https://en.wikipedia.org/wiki/Monotone_(software)) in [April of 2007](https://sourceforge.net/p/pidgin/mailman/message/16333120/). Like many at the time, we were very interested in better branching, merging, and offline commits. In the near future I'll do a post covering how we used to handle contributions and why these features simplified the entire process.

Then in [January of 2011](https://lists.pidgin.im/pipermail/devel/2011-January/021578.html) discussion started on moving from Monotone to [Mercurial](https://en.wikipedia.org/wiki/Mercurial). There are plenty of reasons why we chose Mercurial in that mailing list thread so I won't discuss them here, but the prevailing issues were lack of tooling and complex user interactions.

We're still using Mercurial today (as of October 2023) and have no desire or need to move to another version control system. The main reasoning for this is that we don't really have any issues with our current setup and any change to it would essentially be busy work.

Also it appears that all of the innovation in version control seems to only be happening in Mercurial. See [Changeset Evolution](https://www.mercurial-scm.org/doc/evolution/) and [Clone Bundles](https://wiki.mercurial-scm.org/ClonebundlesExtension) for some examples of those innovations.

I hope you enjoyed this trek down memory lane. As I mentioned earlier this is just historical information and not intended to sway someone's opinion. Also, we're not looking for opinions on switching VCS's any time soon either, so please keep those comments to yourself ;)

I hope you're enjoying these posts! Remember they go live for patrons at 9AM CST on Mondays and go public at 12AM CST on Thursdays! If there's something specific you'd like to see me cover here, please comment below!