DVCS History

How did we end up with git?

Tim Penhey

Before DVCS

there was just VCS

My first version control

  • CVS (at Otago University)
  • RCS (at first job)
  • CVS - OMG concurrent
  • SVN - oh... transactional commits

Really just looking at Open Source DVCS

GNU Arch

  • Started in 2001
  • Maintainer was Tom Lord
  • Written in C
  • TLA - Tom Lord's Arch
  • Change set oriented
  • Easy branching
  • Atomic commits
  • Rename tracking
  • 3-way merges

Darcs

  • Started June 2002 by David Roundy
  • Evolved from GNU Arch - wanted a new patch format
  • Branches are linearly ordered patches
  • Ordering was determined algorithmically
  • Early versions had exponential failure cases

Bitkeeper

  • First publicly available version in 2000
  • Free (as in beer) version available
  • Proprietory
  • Chosen by Linus for the linux kernel in 2002
  • Controversial decision​
    • Not free (as in speech) software
    • Richard Stallman
    • Alan Cox

Bazaar - baz

  • Fork of TLA
  • Backed by Canonical
  • Announced Oct 2004
  • Deprecated mid-2005

Bazaar - bzr

  • Initially bazaar-ng (next generation)
  • Python rewrite of baz
  • Announced Feb 2005
  • Backed by Canonical
  • Contributor Licence Agreement an issue
  • Focus was on modeling and correctness
  • Speed was an issue with early releases

Mercurial - hg

  • Announced April 2005
  • Planned as a Bitkeeper replacement for the kernel
  • Primarily Python
  • C used for speed where necessary
  • Focus on speed primarily
  • Good initial adoption among open source projects
    • Firefox was a lighthouse project

Git

  • Started April 2005 - few days before Hg
  • Needed replacement for Bitkeeper
  • Existing DVCS tools too slow - 30s to apply patch
  • Linus decided to write his own based on a few principles
    • Patching should take no longer than 3 seconds
    • If in doubt, do the opposite of CVS
    • Should have DVCS workflow like bitkeeper
    • Include strong safeguards against corruption

What was the push?

  • Andrew Tridgell, kernel developer and samba creator wanted an open source tool to use
  • Reverse engineered wire protocol
  • Larry McVoy said this was a violation of no compete clause in the licence agreement
    • should use pay version, free version, or nothing
  • Tridgell said he never agreed to any agreement
  • McVoy withdrew free version

Git Characteristics

Non-linear development support

rapid branching and merging

Distributed development

every developer had own copy of the repository

Compatibility with existing systems and protocols

http, ftp, ssh

CVS and SVN server emulation

Efficient for large projects

10x faster than some other DVCS systems

Cryptographic authentication of history


ID of a particular change depends on complete history

Toolkit based design

set of C programs and shell scripts

Pluggable merge strategies


well defined model of incomplete merge, and multiple algorithms

Garbage accumulates until collected

incomplete or backed out changes leave dangling objects

Periodic explicit object packing

efficient compressed deltas periodic tree snapshots

So why did git win the DVCS war?

My opinions here

  • Network effect
    • kernel -> freedesktop.org
    • freedesktop.org -> GNOME & KDE
    • GNOME -> all gnome apps
    • KDE -> all KDE apps
    • Rest of open source
  • Other projects using bzr or hg moved too
    • Firefox & Mozilla
    • Ubuntu packaging

Github ?

Questions ?

DVCS History

By Tim Penhey

DVCS History

  • 528