レナート   TBFKAYIBYNYAAYB   ﻟﻴﻨﺎﺭﺕ

Sat, 21 Jun 2008

On Version Control Systems

Here's what I have to say about today's state of version control systems in Free Software:

We shouldn't forget that a VC system is just a development tool. Preferring one over the other is nothing that has any direct influence on code quality, it doesn't make your algorithms perform any better, or your applications look prettier. It's just a tool. As such it should just do its job and get out of the way. A programmer should have religious arguments about code quality, about algorithms or about UIs, but what he certainly should not have is religious arguments over the feature set of specific VCSes[1].

Does this mean it doesn't matter at all which VCS to choose? No, of course it does matter a lot. The step from traditional VCSes to DVCS is a major one, an important one. Starting a fresh new Free Software project today and choosing CVS or SVN is anachronistic at best.

Which leaves of course the question, which DVCS to pick. If you take the "get out of the way" requirement seriously than there can only be one answer to the question: GIT. Why? It certainly (still) has a steep learning curve, and a steeper one than most other VC systems. But what is even harder to learn than GIT is learning all of GIT, Mercurial, Monotone, Bizarre^H^H^H^H^H^H^HBazaar, Darcs, Arch, SVK at the same time. If every project picked a different VCS system, and you'd want to contribute to more than just a single project, then you'd have to learn them all. And learning them all means learning them all not very well. And needing to learn them all means scaring people away who don't want to learn yet another VCS just to check out your code. Fragmentation in use of VCSes for Free Software projects hinders development.

Which brings me to the main point I want to raise with this blog story:

It is much more important to make contributing to Free Software projects easy by choosing a VCS everyone knows well -- than it is to make it easy by choosing a VCS that everyone could learn easily.

So, and which VCS is it that has a chance of qualifying as "everyone knows well" and is a DVCS? I would say there is only one answer to the question: GIT. Sure, there are some high-profile projects using HG (Mozilla, Java, Solaris), but my impression is that the vast majority of projects that are central to free desktops do use GIT.

Certainly, some DVCSes might be nicer than others, there might be areas where GIT is lacking in comparison to others, but those differences are tiny. What matters more is not scaring contributors away by making it hard for them to contribute by requiring them to learn yet another VCS.

Yes, with CVS, SVN and GIT I think I have learned enough VC systems for now. My hunger for learning further ones is exactly zero. Let me just code, and don't make it hard for me by asking me to learn your favourite one, please.

Or in other, frank words, if you start a new Open Source project today, and you don't choose GIT as VCS then you basically ask potential contributors to go away.

ALSA recently switched from Mercurial to GIT. That was a good move.

So, please stop discussing which DVCS is the best one. It doesn't matter. Picking one that everyone knows is far more important.

That's all I have to say.

Footnotes

[1] Of course, unless he himself develops a VC system.

posted at: 20:20 | path: /projects | permanent link to this entry | 23 comments


Posted by Anon at Sat Jun 21 21:03:42 2008
There are a few big projects using other DVCS - MySQL are using Bazaar, ghc uses Darcs and you've already mentioned some Mercurial users. I've also heard that git is painful for non Linux users and that projects like Mercurial tend to have good ports so perhaps that is another reason to favour one system over another ("do I need it to run on Windows and does it integrate into my software).

Posted by Eduardo Padoan at Sat Jun 21 21:04:10 2008
Sorry, Git dont have a 'steep learning curve', it just dont get into my brain. Everybody knows SVN well, so at least with Bazaar, we'll be using similar commands and terminology. Also, I would want to know if there is any justification for the "Bizarre"...

Posted by Andrius at Sat Jun 21 21:07:26 2008
Then I think that somebody should write easy to use git frontend similar to kdesvn. Many non-programmers (translators, artists) will be able to contribute to projects without learning all git commands if there is full featured GUI program.

Posted by Johnny at Sat Jun 21 21:08:03 2008
I don't think that is very fair, considering some project was using distributed vcs before git existed. Git is OK.. not sure what the fuss is about other than speed (but speed isn't everything). I do wish all the systems adopted git's method of having to "git add" updated files, but otherwise, not sure why everybody likes it so much

Posted by Alex at Sat Jun 21 21:14:37 2008
As long as the win32 port of git remains a second class citizen it is a poor choice for cross platform projects.

Posted by Stoffe at Sat Jun 21 21:49:09 2008
Respectfully disagree. Not on the reasoning, bu ton the particular choice. Git raises the bar to get in too much. While others have their problems, at least SVN (which I agree is no choice for anything new) and BZR at least try very hard to be friendly and welcoming. If they aren't, at least they are headed that way.

Git is a typical programmers tool, once it worked, it's good enough. SHA hashes, weird invokations and a lot of underneath mechanics exposed might be effective to some but it is also outright scary. It has other priorities, to be sure, but free software really needs friendly tools, not only for end consumers but for participants.

Posted by Eduardo Padoan at Sat Jun 21 22:20:15 2008
+1 @Stoffe.
(D)VCSs are productivity tools. They should allow me to work the way I want (bzr workflows), but should not stay in th way with lots of new concepts and termilogy and whatnot. But maybe I'm just too dumb for Git.

Posted by Lennart at Sun Jun 22 00:01:02 2008
Andrius: there is "Giggle"

Stoffe: Uh? git is a VCS tool. VCS tools are for developers. Not for "end consumers", so what you claim is void. Sure it could be easier to use sometimes. But describing it as "oh, it's so complicated, totally over my head" is nonsense. There is plenty of documentation around.

Posted by Marco Barisione at Sun Jun 22 01:19:01 2008
I'm a Mercurial fan and I also contributed some patches to that project but I have to agree with you. Today most relevant projects use git so not choosing git would be just stupid.

Posted by Shawn Walker at Sun Jun 22 02:13:27 2008
Popularity alone should not be used as a criteria for selecting a VCS.

The OpenSolaris Tools Community recently had to choose between various VCS systems, and ultimately, Mercurial was the best fit for us.

You can find out more about the process we went through here:
http://www.opensolaris.org/os/community/tools/scm/dscmreqdoc/

Posted by mathrick at Sun Jun 22 02:15:50 2008
That post is total bullshit. First off, saying that git gets out of the way is like saying that the Pope has liberal views on gay marriage. Second, please don't conflate "I know git" with "everyone knows git". The latter is very much not true, and I know I'm not the only one to find git fundamentally incompatible with how my brain works. Git and its users having an agenda to push (aka. The One And Only True Philosophy everyone else has to learn before we can talk) doesn't help, either.

Posted by Eduardo Padoan at Sun Jun 22 03:59:10 2008
Lennart, not every programmer is a C++ programmer, you know.

Posted by Pete at Sun Jun 22 04:10:14 2008
I can summarize the entire article in a sentence.

"""I'm right and everyone should do what I like, and I'm too lazy to question my own choices."""

It doesn't matter what the topic is (DCVS in this case). The original article is arrogant and offensive.

Posted by glandium at Sun Jun 22 09:06:47 2008
There would be no problem if any DVCS could checkout from any other DVCS. git can deal with cvs, svn, p4, hg... but it's not a seemless experience.

Posted by bbbush at Sun Jun 22 15:40:12 2008
I like the idea. I'd say that bzr was created to be simple, and it looks like cvs/svn a lot (so everyone can get it quickly). Personally I choose git because it is cool. I guess people choose git instead of others because the "server side" is easier to maintain?

Posted by keitai at Sun Jun 22 16:34:23 2008
Git has the most momentum, or at least the loudest proponents. Still, I'm afraid it is going to be the worst thing that is going to happen to FLOSS.

Git is going to be the biggest barrier of entry for new FLOSS contributors. Instead if "install TortoiseSVN", a new contributor will have to "install Linux, install git, enter a black xterm and write these black magic runes". And after that a git elitist will flame the new contributor for running "git pull" against a rebased repo, or something else "blindly obvious stupid thing not to do with GIT"...

I'm afraid Git is going to create a generation gap if it's fanboys continue to refuse to acknowledge that GIT has serious usability and documentation problems, and start actively fixing them.

Posted by Greg at Sun Jun 22 18:02:52 2008
People are not too stupid to figure out git.  If you treat your users like idiots, you will only get idiot users. 

And besides, the users are not writing the code for GNOME.  The developers are.  And the FLOSS developers have mostly chosen git to use as their DCVS of choice.

The worst thing that could happen to FLOSS to get overrun by users who only complain about menial shit.

Posted by Eduardo Padoan at Sun Jun 22 20:36:30 2008
Greg, usability matters for developers too -- otherwise, why would there be languages like Python, Ruby or Scheme? Some of us are interested in representing logic clearly, not remembering lots of idiosincrasie. Also, there is a thing called productivity, that is affect by the tools we use. Some can be very productive with Git, some not at all, and this is not because they are idiots - they just think different. This "everybody should use this or FLOSS is doomed" is the only shit I see.

Posted by Jon at Mon Jun 23 01:09:04 2008
I'm a floss developer and I've been trying to learn git for months. The fact is it is hard, there are leaky abstractions but it is slowly being fixed. I'm not stupid, although I could be accused of laziness.

Posted by Michael Johnson at Mon Jun 23 05:32:30 2008
@keitai: Everything I've read about git (which I've recently started switching to from SVN) says that the developers know it's hard to understand and sometimes poorly documented and they ARE actively working on fixing it. And in the short time I'm been researching/using it (about 6 mo), it has improved.

The biggest problem I currently see with it is the fact that much of the older documentation still shows up when looking for help, even though it's been since improved upon at the official git site.

Posted by anon at Mon Jun 23 22:35:00 2008
There is a project called vng which aims to provide a more logical command line interface to git and to take the hard-to-learn quirks out and make it easier to use.

see
http://code.google.com/p/vng/wiki/Introduction
http://labs.trolltech.com/blogs/2008/03/30/sourcecode-collaboration/
http://labs.trolltech.com/blogs/2008/05/16/from-30-seconds-to-zero-in-1-day/
(The last entry is about fixing git's slowness on Windows)

Posted by Ted Percival at Thu Jun 26 10:20:57 2008
While it's difficult to determine which VCSes are being used based on how much noise the community makes, there are some statistics available. For instance, VCS popularity among Debian users:

First, just the common DVCSes (Git, Mercurial, Bzr):
<a href="http://people.debian.org/~igloo/popcon-graphs/index.php?packages=git-core%2C+mercurial%2C+bzr&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1">http://people.debian.org/~igloo/popcon-graphs/index.php?packages=git-core%2C+mercurial%2C+bzr&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1</a>

Those above plus CVS & Subversion:
<a href="http://people.debian.org/~igloo/popcon-graphs/index.php?packages=cvs%2C+subversion%2C+git-core%2C+mercurial%2C+bzr&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1">http://people.debian.org/~igloo/popcon-graphs/index.php?packages=cvs%2C+subversion%2C+git-core%2C+mercurial%2C+bzr&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1</a> (or http://is.gd/GhT).

You can include Darcs if you like, but it seems to have been in slow decline since late 2007:
<a href="http://people.debian.org/~igloo/popcon-graphs/index.php?packages=git-core%2C+mercurial%2C+bzr%2C+darcs&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1">http://people.debian.org/~igloo/popcon-graphs/index.php?packages=git-core%2C+mercurial%2C+bzr%2C+darcs&show_vote=on&want_legend=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1</a>

Naturally these statistics, as with any, should be taken with a grain of salt.

Posted by Lennart at Thu Jun 26 16:17:42 2008
Ted, I guess those would look a bit different for Ubuntu.

http://www.google.com/trends?q=git%2C+mercurial%2C+subversion

Leave a Comment:

Your Name:


Your E-mail (optional):


Comment:


As a protection against comment spam, please type the following number into the field on the right:
Secret Number Image

Please note that this is neither a support forum nor a bug tracker! Support questions or bug reports posted here will be ignored and not responded to!


It should be obvious but in case it isn't: the opinions reflected here are my own. They are not the views of my employer, or Ronald McDonald, or anyone else.

Please note that I take the liberty to delete any comments posted here that I deem inappropriate, off-topic, or insulting. And I excercise this liberty quite agressively. So yes, if you comment here, I might censor you. If you don't want to be censored your are welcome to comment on your own blog instead.


Lennart Poettering <mzoybt (at) 0pointer (dot) net>
Syndicated on Planet GNOME, Planet Fedora, planet.freedesktop.org, Planet Debian Upstream. feed RSS 0.91, RSS 2.0
Archives: 2005, 2006, 2007, 2008, 2009, 2010

Valid XHTML 1.0 Strict!   Valid CSS!