| | @@ -1,98 +1,95 @@ |
| 1 | 1 | # The History And Purpose Of Fossil |
| 2 | 2 | |
| 3 | | -Fossil is a [distributed version control system (DVCS)][1] written |
| 4 | | -beginning in [2007][2] by the [architect of SQLite][3] for the |
| 5 | | -purpose of managing the [SQLite project][4]. |
| 6 | | - |
| 7 | | -[1]: https://en.wikipedia.org/wiki/Distributed_version_control |
| 8 | | -[2]: /timeline?a=1970-01-01&n=10 |
| 9 | | -[3]: https://sqlite.org/crew.html |
| 10 | | -[4]: https://sqlite.org/ |
| 3 | +Fossil is a [distributed version control system (DVCS)][100] written |
| 4 | +beginning in [2007][105] by the [architect of SQLite][110] for the |
| 5 | +purpose of managing the [SQLite project][115]. |
| 6 | + |
| 7 | +[100]: https://en.wikipedia.org/wiki/Distributed_version_control |
| 8 | +[105]: /timeline?a=1970-01-01&n=10 |
| 9 | +[110]: https://sqlite.org/crew.html |
| 10 | +[115]: https://sqlite.org/ |
| 11 | 11 | |
| 12 | 12 | Though Fossil was originally written specifically to support SQLite, |
| 13 | | -it is now also used by many other projects. The SQLite architect (drh) |
| 14 | | -is still the top committer to Fossil, but there are |
| 15 | | -[many contributors][5]. |
| 13 | +it is now also used by countless other projects. The SQLite architect (drh) |
| 14 | +is still the top committer to Fossil, but there are also |
| 15 | +[many other contributors][120]. |
| 16 | 16 | |
| 17 | | -[5]: /reports?type=ci&view=byuser |
| 17 | +[120]: /reports?type=ci&view=byuser |
| 18 | 18 | |
| 19 | 19 | ## History |
| 20 | 20 | |
| 21 | | -The SQLite project start out using [CVS][6], as CVS was the mostly |
| 21 | +The SQLite project start out using [CVS][300], as CVS was the mostly |
| 22 | 22 | commonly used version control system in that era (circa 2000). CVS |
| 23 | 23 | was an amazing version control system for its day in that it allowed |
| 24 | 24 | multiple developers to be editing the same file at the same time. |
| 25 | 25 | |
| 26 | | -[6]: https://en.wikipedia.org/wiki/Concurrent_Versions_System |
| 26 | +[300]: https://en.wikipedia.org/wiki/Concurrent_Versions_System |
| 27 | 27 | |
| 28 | 28 | Though innovative and much loved in its time, CVS was not without problems. |
| 29 | 29 | Among those was a lack of visibility into the project history and the |
| 30 | 30 | lack of integrated bug tracking. To try to address these deficiencies, |
| 31 | | -the SQLite author developed the [CVSTrac][7] wrapper for CVS beginning |
| 32 | | -in [2002][8]. |
| 31 | +the SQLite author developed the [CVSTrac][305] wrapper for CVS beginning |
| 32 | +in [2002][310]. |
| 33 | 33 | |
| 34 | | -[7]: http://cvstrac.org/ |
| 35 | | -[8]: http://cvstrac.org/fossil/timeline?a=19700101&n=10 |
| 34 | +[305]: http://cvstrac.org/ |
| 35 | +[310]: http://cvstrac.org/fossil/timeline?a=19700101&n=10 |
| 36 | 36 | |
| 37 | 37 | CVSTrac greatly improved the usability of CVS and was adopted by |
| 38 | | -other projects. CVSTrac also [inspired the design][9] of [Trac][10], |
| 38 | +other projects. CVSTrac also [inspired the design][315] of [Trac][320], |
| 39 | 39 | which was a similar system that was (and is) far more widely used. |
| 40 | 40 | |
| 41 | | -[9]: https://trac.edgewall.org/wiki/TracHistory |
| 42 | | -[10]: https://trac.edgewall.org/ |
| 41 | +[315]: https://trac.edgewall.org/wiki/TracHistory |
| 42 | +[320]: https://trac.edgewall.org/ |
| 43 | 43 | |
| 44 | 44 | Historians can see the influence of CVSTrac on the development of |
| 45 | | -SQLite. [Early SQLite check-ins][11] that happened before CVSTrac |
| 46 | | -was available often had a check-in comment which was just a "smiley". |
| 45 | +SQLite. [Early SQLite check-ins][325] that happened before CVSTrac |
| 46 | +often had a check-in comment that was just a "smiley". |
| 47 | 47 | That was not an unreasonable check-in comment, as check-in comments |
| 48 | | -were scarcely seen and of questionable utility in CVS. CVSTrac |
| 48 | +were scarcely seen and of questionable utility in raw CVS. CVSTrac |
| 49 | 49 | changed that, making check-in comments more visible and more useful. |
| 50 | | -The SQLite developers reacted by creating [better check-in comments][12]. |
| 51 | | - |
| 52 | | -[11]: https://sqlite.org/src/timeline?a=19700101&n=10 |
| 53 | | -[12]: https://sqlite.org/src/timeline?c=20030101&n=10&nd |
| 54 | | - |
| 55 | | -At about this same time, the [Monotone][13] system appeared |
| 56 | | -([website][14]). Monotone |
| 57 | | -was one of the first distributed version control systems. As far as |
| 50 | +The SQLite developers reacted by creating [better check-in comments][330]. |
| 51 | + |
| 52 | +[325]: https://sqlite.org/src/timeline?a=19700101&n=10 |
| 53 | +[330]: https://sqlite.org/src/timeline?c=20030101&n=10&nd |
| 54 | + |
| 55 | +At about this same time, the [Monotone][335] system appeared. |
| 56 | +Monotone was one of the first distributed version control systems. As far as |
| 58 | 57 | this author is aware, Monotone was the first VCS to make use of |
| 59 | 58 | SHA1 to identify artifacts. Monotone stored its content in an SQLite |
| 60 | 59 | database, which is what brought it to the attention of the SQLite architect. |
| 60 | +These design choices were a major source of inspiration for Fossil. |
| 61 | 61 | |
| 62 | | -[13]: https://en.wikipedia.org/wiki/Monotone_(software) |
| 63 | | -[14]: https://www.monotone.ca/ |
| 62 | +[335]: https://www.monotone.ca/ |
| 64 | 63 | |
| 65 | 64 | Beginning around 2005, the need for a better version control system |
| 66 | 65 | for SQLite began to become evident. The SQLite architect looked |
| 67 | 66 | around for a suitable replacement. Monotone, Git, and Mercurical were |
| 68 | | -all considered. But that that time, none of these supported sync |
| 67 | +all considered. But at that time, none of these supported sync |
| 69 | 68 | over ordinary HTTP, none could be run from an inexpensive shell |
| 70 | 69 | account on a leased server (this was before the widespread availability |
| 71 | 70 | of affordable virtual machines), and none of them supported anything |
| 72 | 71 | resembling the wiki and ticket features of CVSTrac that had been |
| 73 | 72 | found to be so useful. And so, the SQLite architect began writing |
| 74 | 73 | his own DVCS. |
| 75 | 74 | |
| 76 | | -Early prototypes were done in [TCL][15]. As experiments proceeded, |
| 75 | +Early prototypes were done in [TCL][340]. As experiments proceeded, |
| 77 | 76 | however, it was found that the low-level byte manipulates needed for |
| 78 | 77 | things like delta compression and computing diffs |
| 79 | 78 | were better implemented in plain old C. |
| 80 | 79 | Experiments continued. Finally, a prototype capable of self-hosting |
| 81 | | -was devised on [2007-07-16][16]. |
| 80 | +was devised on [2007-07-16][345]. |
| 82 | 81 | |
| 83 | | -[15]: https://www.tcl.tk/ |
| 84 | | -[16]: https://fossil-scm.org/fossil/timeline?c=200707211410&n=10 |
| 82 | +[340]: https://www.tcl.tk/ |
| 83 | +[345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n=10 |
| 85 | 84 | |
| 86 | 85 | The first project hosted by Fossil was Fossil itself. After a |
| 87 | 86 | few months of development work, the code was considered stable enough |
| 88 | | -to begin hosting the [SQLite documentation repository][17] which was |
| 89 | | -split off from the main SQLite CVS repository on [2007-11-12][18]. |
| 90 | | - |
| 91 | | -[17]: https://www.sqlite.org/docsrc/doc/trunk/README.md |
| 92 | | -[18]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n=10 |
| 93 | | - |
| 94 | | -Finally, after two years of development work on Fossil, the |
| 95 | | -SQLite source code itself was transfered to Fossil on |
| 96 | | -[2009-08-11][19]. |
| 97 | | - |
| 98 | | -[19]: https://sqlite.org/src/timeline?c=b0848925babde524&n=12&y=ci |
| 87 | +to begin hosting the [SQLite documentation repository][350] which was |
| 88 | +split off from the main SQLite CVS repository on [2007-11-12][355]. |
| 89 | +After two years of development work on Fossil, the |
| 90 | +SQLite source code itself was transfered to Fossil on |
| 91 | +[2009-08-11][360]. |
| 92 | + |
| 93 | +[350]: https://www.sqlite.org/docsrc/doc/trunk/README.md |
| 94 | +[355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n=10 |
| 95 | +[360]: https://sqlite.org/src/timeline?c=b0848925babde524&n=12&y=ci |
| 99 | 96 | |