The History And Purpose Of Fossil

Fossil is a distributed version control system (DVCS) written beginning in 2007 by the architect of SQLite for the purpose of managing the SQLite project.

Though Fossil was originally written specifically to support SQLite, it is now also used by countless other projects. The SQLite architect (drh) is still the top committer to Fossil, but there are also many other contributors.


The SQLite project start out using CVS, as CVS was the most commonly used version control system in that era (circa 2000). CVS was an amazing version control system for its day in that it allowed multiple developers to be editing the same file at the same time.

Though innovative and much loved in its time, CVS was not without problems. Among those was a lack of visibility into the project history and the lack of integrated bug tracking. To address these deficiencies, the SQLite author developed the CVSTrac wrapper for CVS beginning in 2002.

CVSTrac greatly improved the usability of CVS and was adopted by other projects. CVSTrac also inspired the design of Trac, which was a similar system that was (and is) far more widely used.

Historians can see the influence of CVSTrac on the development of SQLite. Early SQLite check-ins that happened before CVSTrac often had a check-in comment that was just a "smiley". That was not an unreasonable check-in comment, as check-in comments were scarcely seen and of questionable utility in raw CVS. CVSTrac changed that, making check-in comments more visible and more useful. The SQLite developers reacted by creating better check-in comments.

At about this same time, the Monotone system appeared. Monotone was one of the first distributed version control systems. As far as this author is aware, Monotone was the first VCS to make use of SHA1 to identify artifacts. Monotone stored its content in an SQLite database, which is what brought it to the attention of the SQLite architect. These design choices were a major source of inspiration for Fossil.

Beginning around 2005, the need for a better version control system for SQLite began to become evident. The SQLite architect looked around for a suitable replacement. Monotone, Git, and Mercurial were all considered. But at that time, none of these supported sync over ordinary HTTP, none could be run from an inexpensive shell account on a leased server (this was before the widespread availability of affordable virtual private servers), and none of them supported anything resembling the wiki and ticket features of CVSTrac that had been found to be so useful. And so, the SQLite architect began writing his own DVCS.

Early prototypes were done in TCL. As experiments proceeded, however, it was found that the low-level byte manipulates needed for things like delta compression and computing diffs were better implemented in plain old C. Experiments continued. Finally, a prototype capable of self-hosting was devised on 2007-07-16.

The first project hosted by Fossil was Fossil itself. After a few months of development work, the code was considered stable enough to begin hosting the SQLite documentation repository which was split off from the main SQLite CVS repository on 2007-11-12. After two years of development work on Fossil, the SQLite source code itself was transferred to Fossil on 2009-08-11.