|
26abbe3…
|
andygoth
|
1 |
<title>Questions And Criticisms</title> |
|
cbc8983…
|
drh
|
2 |
|
|
1fd407f…
|
wyoung
|
3 |
This page is a collection of real questions and criticisms that were |
|
07605f3…
|
drh
|
4 |
raised against Fossil early in its history (circa 2008). |
|
07605f3…
|
drh
|
5 |
This page is old and has not been kept up-to-date. See the |
|
8a1ba49…
|
wyoung
|
6 |
[/finfo?name=www/qandc.wiki|change history of this page]. |
|
cbc8983…
|
drh
|
7 |
|
|
cbc8983…
|
drh
|
8 |
<b>Fossil sounds like a lot of reinvention of the wheel. |
|
cbc8983…
|
drh
|
9 |
Why create your own DVCS when you could have reused mercurial?</b> |
|
cbc8983…
|
drh
|
10 |
|
|
8a1ba49…
|
wyoung
|
11 |
<div class="indent"> |
|
1fd407f…
|
wyoung
|
12 |
I wrote fossil because none of the |
|
cbc8983…
|
drh
|
13 |
other available DVCSes met my needs. If the other DVCSes do |
|
5cbfe0c…
|
drh
|
14 |
meet your needs, then you might not need fossil. But they |
|
1fd407f…
|
wyoung
|
15 |
don't meet mine, and so fossil is necessary for me. |
|
cbc8983…
|
drh
|
16 |
|
|
1fd407f…
|
wyoung
|
17 |
Features provided by fossil that one does not get with other |
|
1fd407f…
|
wyoung
|
18 |
DVCSes include: |
|
cbc8983…
|
drh
|
19 |
|
|
cbc8983…
|
drh
|
20 |
<ol> |
|
cbc8983…
|
drh
|
21 |
<li> Integrated <a href="wikitheory.wiki">wiki</a>. </li> |
|
cbc8983…
|
drh
|
22 |
<li> Integrated <a href="bugtheory.wiki">bug tracking</a> </li> |
|
cbc8983…
|
drh
|
23 |
<li> Immutable artifacts </li> |
|
7083eb1…
|
drh
|
24 |
<li> Self-contained, stand-alone executable that can be run in |
|
7083eb1…
|
drh
|
25 |
a <a href="http://en.wikipedia.org/wiki/Chroot">chroot jail</a> </li> |
|
f47b705…
|
jan.nijtmans
|
26 |
<li> Simple, well-defined, |
|
cbc8983…
|
drh
|
27 |
<a href="fileformat.wiki">enduring file format</a> </li> |
|
6ba52ae…
|
drh
|
28 |
<li> Integrated <a href="webui.wiki">web interface</a> </li> |
|
cbc8983…
|
drh
|
29 |
</ol> |
|
8a1ba49…
|
wyoung
|
30 |
</div> |
|
cbc8983…
|
drh
|
31 |
|
|
cbc8983…
|
drh
|
32 |
<b>Why should I use this rather than Trac?</b> |
|
cbc8983…
|
drh
|
33 |
|
|
8a1ba49…
|
wyoung
|
34 |
<div class="indent"> |
|
cbc8983…
|
drh
|
35 |
<ol> |
|
cbc8983…
|
drh
|
36 |
<li> Fossil is distributed. You can view and/or edit tickets, wiki, and |
|
cbc8983…
|
drh
|
37 |
code while off network, then sync your changes later. With Trac, you |
|
cbc8983…
|
drh
|
38 |
can only view and edit tickets and wiki while you are connected to |
|
cbc8983…
|
drh
|
39 |
the server. </li> |
|
f47b705…
|
jan.nijtmans
|
40 |
<li> Fossil is lightweight and fully self-contained. It is very easy |
|
cbc8983…
|
drh
|
41 |
to setup on a low-resource machine. Fossil does not require an |
|
b16b433…
|
drh
|
42 |
administrator.</li> |
|
cbc8983…
|
drh
|
43 |
<li> Fossil integrates code versioning into the same repository with |
|
cbc8983…
|
drh
|
44 |
wiki and tickets. There is nothing extra to add or install. |
|
cbc8983…
|
drh
|
45 |
Fossil is an all-in-one turnkey solution. </li> |
|
cbc8983…
|
drh
|
46 |
</ol> |
|
8a1ba49…
|
wyoung
|
47 |
</div> |
|
cbc8983…
|
drh
|
48 |
|
|
cbc8983…
|
drh
|
49 |
<b>Love the concept here. Anyone using this for real work yet?</b> |
|
cbc8983…
|
drh
|
50 |
|
|
8a1ba49…
|
wyoung
|
51 |
<div class="indent"> |
|
143f1db…
|
wyoung
|
52 |
Fossil is <a href="https://fossil-scm.org/">self-hosting</a>. |
|
cbc8983…
|
drh
|
53 |
In fact, this page was probably delivered |
|
cbc8983…
|
drh
|
54 |
to your web-browser via a working fossil instance. The same virtual |
|
143f1db…
|
wyoung
|
55 |
machine that hosts https://fossil-scm.org/ |
|
cbc8983…
|
drh
|
56 |
(a <a href="http://www.linode.com/">Linode 720</a>) |
|
cbc8983…
|
drh
|
57 |
also hosts 24 other fossil repositories for various small projects. |
|
f47b705…
|
jan.nijtmans
|
58 |
The documentation files for |
|
cbc8983…
|
drh
|
59 |
<a href="http://www.sqlite.org/">SQLite</a> are hosted in a |
|
cbc8983…
|
drh
|
60 |
fossil repository <a href="http://www.sqlite.org/docsrc/">here</a>, |
|
cbc8983…
|
drh
|
61 |
for example. |
|
cbc8983…
|
drh
|
62 |
Other projects are also adopting fossil. But fossil does not yet have |
|
d0e8e88…
|
aku
|
63 |
the massive user base of git or mercurial. |
|
8a1ba49…
|
wyoung
|
64 |
</div> |
|
4ef19b5…
|
drh
|
65 |
|
|
f47b705…
|
jan.nijtmans
|
66 |
<b>Fossil looks like the bug tracker that would be in your |
|
e6c8df3…
|
drh
|
67 |
Linksys Router's administration screen.</b> |
|
4ef19b5…
|
drh
|
68 |
|
|
8a1ba49…
|
wyoung
|
69 |
<div class="indent"> |
|
1fd407f…
|
wyoung
|
70 |
I take a pragmatic approach to software: form follows function. |
|
4ef19b5…
|
drh
|
71 |
To me, it is more important to have a reliable, fast, efficient, |
|
1fd407f…
|
wyoung
|
72 |
enduring, and simple DVCS than one that looks pretty. |
|
4ef19b5…
|
drh
|
73 |
|
|
1fd407f…
|
wyoung
|
74 |
On the other hand, if you have patches that improve the appearance |
|
b16b433…
|
drh
|
75 |
of Fossil without seriously compromising its reliability, performance, |
|
4ef19b5…
|
drh
|
76 |
and/or maintainability, I will be happy to accept them. Fossil is |
|
4ef19b5…
|
drh
|
77 |
self-hosting. Send email to request a password that will let |
|
1fd407f…
|
wyoung
|
78 |
you push to the main fossil repository. |
|
8a1ba49…
|
wyoung
|
79 |
</div> |
|
cbc8983…
|
drh
|
80 |
|
|
cbc8983…
|
drh
|
81 |
<b>It would be useful to have a separate application that |
|
d0e8e88…
|
aku
|
82 |
keeps the bug-tracking database in a versioned file. That file can |
|
cbc8983…
|
drh
|
83 |
then be pushed and pulled along with the rest repository.</b> |
|
cbc8983…
|
drh
|
84 |
|
|
8a1ba49…
|
wyoung
|
85 |
<div class="indent"> |
|
1fd407f…
|
wyoung
|
86 |
Fossil already <u>does</u> push and pull bugs along with the files |
|
f47b705…
|
jan.nijtmans
|
87 |
in your repository. |
|
7083eb1…
|
drh
|
88 |
But fossil does <u>not</u> track bugs as files in the source tree. |
|
1fd407f…
|
wyoung
|
89 |
That approach to bug tracking was rejected for three reasons: |
|
7083eb1…
|
drh
|
90 |
|
|
7083eb1…
|
drh
|
91 |
<ol> |
|
7083eb1…
|
drh
|
92 |
<li> Check-ins in fossil are immutable. So if |
|
7083eb1…
|
drh
|
93 |
tickets were part of the check-in, then there would be no way to add |
|
7083eb1…
|
drh
|
94 |
new tickets to a check-in as new bugs are discovered. |
|
7083eb1…
|
drh
|
95 |
|
|
7083eb1…
|
drh
|
96 |
<li> Any project of reasonable size and complexity will generate thousands |
|
7083eb1…
|
drh
|
97 |
and thousands of tickets, and we do not want all those ticket files |
|
7083eb1…
|
drh
|
98 |
cluttering the source tree. |
|
7083eb1…
|
drh
|
99 |
|
|
7083eb1…
|
drh
|
100 |
<li> We want tickets to be managed from the web interface and to have a |
|
7083eb1…
|
drh
|
101 |
permission system that is distinct from check-in permissions. |
|
7083eb1…
|
drh
|
102 |
In other words, we do not want to restrict the creation and editing |
|
7083eb1…
|
drh
|
103 |
of tickets to developers with check-in privileges and an installed |
|
7083eb1…
|
drh
|
104 |
copy of the fossil executable. Casual passers-by on the internet should |
|
7083eb1…
|
drh
|
105 |
be permitted to create tickets. |
|
7083eb1…
|
drh
|
106 |
</ol> |
|
7083eb1…
|
drh
|
107 |
|
|
1fd407f…
|
wyoung
|
108 |
These points are reiterated in the opening paragraphs of |
|
1fd407f…
|
wyoung
|
109 |
the <a href="bugtheory.wiki">Bug-Tracking In Fossil</a> document. |
|
8a1ba49…
|
wyoung
|
110 |
</div> |
|
cbc8983…
|
drh
|
111 |
|
|
f47b705…
|
jan.nijtmans
|
112 |
<b>Fossil is already the name of a plan9 versioned |
|
cbc8983…
|
drh
|
113 |
append-only filesystem.</b> |
|
cbc8983…
|
drh
|
114 |
|
|
8a1ba49…
|
wyoung
|
115 |
<div class="indent"> |
|
5cbfe0c…
|
drh
|
116 |
I did not know that. Perhaps they selected the name for the same reason that |
|
cbc8983…
|
drh
|
117 |
I did: because a repository with immutable artifacts preserves |
|
d0e8e88…
|
aku
|
118 |
an excellent fossil record of a long-running project. |
|
8a1ba49…
|
wyoung
|
119 |
</div> |
|
cbc8983…
|
drh
|
120 |
|
|
cbc8983…
|
drh
|
121 |
<b>The idea of storing a repository in a binary blob like an |
|
cbc8983…
|
drh
|
122 |
SQLite database terrifies me.</b> |
|
cbc8983…
|
drh
|
123 |
|
|
8a1ba49…
|
wyoung
|
124 |
<div class="indent"> |
|
cbc8983…
|
drh
|
125 |
The use of SQLite to store the database is likely more stable and secure |
|
cbc8983…
|
drh
|
126 |
than any other approach, due to the fact that SQLite is transactional. |
|
cbc8983…
|
drh
|
127 |
Fossil also implements several internal |
|
cbc8983…
|
drh
|
128 |
<a href="selfcheck.wiki">self-checks</a> to insure that no information |
|
4ef19b5…
|
drh
|
129 |
is ever lost. |
|
8a1ba49…
|
wyoung
|
130 |
</div> |
|
cbc8983…
|
drh
|
131 |
|
|
cbc8983…
|
drh
|
132 |
|
|
cbc8983…
|
drh
|
133 |
<b>I am dubious of the benefits of including wikis and bug trackers |
|
cbc8983…
|
drh
|
134 |
directly in the VCS - either they are under-featured compared to full |
|
cbc8983…
|
drh
|
135 |
software like Trac, or the VCS is massively bloated compared to |
|
cbc8983…
|
drh
|
136 |
Subversion or Bazaar.</b> |
|
cbc8983…
|
drh
|
137 |
|
|
8a1ba49…
|
wyoung
|
138 |
<div class="indent"> |
|
1fd407f…
|
wyoung
|
139 |
I have no doubt that Trac has many features that fossil lacks. But that |
|
f47b705…
|
jan.nijtmans
|
140 |
is not the point. Fossil has several key features that Trac lacks and that |
|
f47b705…
|
jan.nijtmans
|
141 |
I need: most notably the fact that |
|
1fd407f…
|
wyoung
|
142 |
fossil supports disconnected operation. |
|
f47b705…
|
jan.nijtmans
|
143 |
|
|
1fd407f…
|
wyoung
|
144 |
As for bloat: Fossil is a single self-contained executable. |
|
f47b705…
|
jan.nijtmans
|
145 |
You do not need any other packages |
|
f47b705…
|
jan.nijtmans
|
146 |
(diff, patch, merge, cvs, svn, rcs, git, python, perl, tcl, apache, |
|
c0654b1…
|
brickviking
|
147 |
SQLite, and so forth) |
|
5cbfe0c…
|
drh
|
148 |
in order to run fossil. Fossil runs just fine in a chroot jail all |
|
5cbfe0c…
|
drh
|
149 |
by itself. And the self-contained fossil |
|
ec1197c…
|
drh
|
150 |
executable is much less than 1MB in size. (Update 2015-01-12: Fossil has |
|
f47b705…
|
jan.nijtmans
|
151 |
grown in the years since the previous sentence was written but is still |
|
bc04f48…
|
jan.nijtmans
|
152 |
much less than 2MB according to "size" when compiled using -Os on x64 Linux.) |
|
1fd407f…
|
wyoung
|
153 |
Fossil is the very opposite of bloat. |
|
8a1ba49…
|
wyoung
|
154 |
</div> |