summaryrefslogtreecommitdiff
path: root/www/history.md
diff options
context:
space:
mode:
Diffstat (limited to 'www/history.md')
-rw-r--r--www/history.md95
1 files changed, 95 insertions, 0 deletions
diff --git a/www/history.md b/www/history.md
new file mode 100644
index 0000000..c3df911
--- /dev/null
+++ b/www/history.md
@@ -0,0 +1,95 @@
+# The History And Purpose Of Fossil
+
+Fossil is a [distributed version control system (DVCS)][100] written
+beginning in [2007][105] by the [architect of SQLite][110] for the
+purpose of managing the [SQLite project][115].
+
+[100]: https://en.wikipedia.org/wiki/Distributed_version_control
+[105]: /timeline?a=1970-01-01&n1=10
+[110]: https://sqlite.org/crew.html
+[115]: https://sqlite.org/
+
+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][120].
+
+[120]: /reports?type=ci&view=byuser
+
+## History
+
+The SQLite project started out using [CVS][300], 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.
+
+[300]: https://en.wikipedia.org/wiki/Concurrent_Versions_System
+
+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][305] wrapper for CVS beginning
+in [2002][310].
+
+[305]: http://cvstrac.org/
+[310]: http://cvstrac.org/fossil/timeline?a=19700101&n1=10
+
+CVSTrac greatly improved the usability of CVS and was adopted by
+other projects. CVSTrac also [inspired the design][315] of [Trac][320],
+which was a similar system that was (and is) far more widely used.
+
+[315]: https://trac.edgewall.org/wiki/TracHistory
+[320]: https://trac.edgewall.org/
+
+Historians can see the influence of CVSTrac on the development of
+SQLite. [Early SQLite check-ins][325] 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][330].
+
+[325]: https://sqlite.org/src/timeline?a=19700101&n1=10
+[330]: https://sqlite.org/src/timeline?c=20030101&n1=10&nd
+
+At about this same time, the [Monotone][335] 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.
+
+[335]: https://www.monotone.ca/
+
+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][340]. 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][345].
+
+[340]: https://www.tcl.tk/
+[345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n1=10
+
+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][350] which was
+split off from the main SQLite CVS repository on [2007-11-12][355].
+After two years of development work on Fossil, the
+SQLite source code itself was transferred to Fossil on
+[2009-08-11][360].
+
+[350]: https://www.sqlite.org/docsrc/doc/trunk/README.md
+[355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n1=10
+[360]: https://sqlite.org/src/timeline?c=b0848925babde524&n1=12&y=ci