cbc8983685 2008-10-06 drh: <nowiki> cbc8983685 2008-10-06 drh: <h1 align="center">Questions And Criticisms</h1> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <p>This page is a collection of real questions and criticisms that have been cbc8983685 2008-10-06 drh: raised against fossil together with responses from the program's author.</p> cbc8983685 2008-10-06 drh: 627de3bf16 2009-01-25 drh: <p>Note: See also the <a href="faq.wiki">Frequently Asked Questions</a>.</p> 627de3bf16 2009-01-25 drh: cbc8983685 2008-10-06 drh: <b>Fossil sounds like a lot of reinvention of the wheel. cbc8983685 2008-10-06 drh: Why create your own DVCS when you could have reused mercurial?</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> 5cbfe0cde2 2008-10-06 drh: <p>I wrote fossil because none of the cbc8983685 2008-10-06 drh: other available DVCSes met my needs. If the other DVCSes do 5cbfe0cde2 2008-10-06 drh: meet your needs, then you might not need fossil. But they 5cbfe0cde2 2008-10-06 drh: don't meet mine, and so fossil is necessary for me.</p> 5cbfe0cde2 2008-10-06 drh: d0e8e88d54 2008-10-09 aku: <p>Features provided by fossil that one does not get with other 5cbfe0cde2 2008-10-06 drh: DVCSes include:</p> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <ol> cbc8983685 2008-10-06 drh: <li> Integrated <a href="wikitheory.wiki">wiki</a>. </li> cbc8983685 2008-10-06 drh: <li> Integrated <a href="bugtheory.wiki">bug tracking</a> </li> cbc8983685 2008-10-06 drh: <li> Immutable artifacts </li> 7083eb1a1c 2008-11-20 drh: <li> Self-contained, stand-alone executable that can be run in 7083eb1a1c 2008-11-20 drh: a <a href="http://en.wikipedia.org/wiki/Chroot">chroot jail</a> </li> d0e8e88d54 2008-10-09 aku: <li> Simple, well-defined, cbc8983685 2008-10-06 drh: <a href="fileformat.wiki">enduring file format</a> </li> 6ba52ae761 2009-02-21 drh: <li> Integrated <a href="webui.wiki">web interface</a> </li> cbc8983685 2008-10-06 drh: </ol> cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>Why should I use this rather than Trac?</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> cbc8983685 2008-10-06 drh: <ol> cbc8983685 2008-10-06 drh: <li> Fossil is distributed. You can view and/or edit tickets, wiki, and cbc8983685 2008-10-06 drh: code while off network, then sync your changes later. With Trac, you cbc8983685 2008-10-06 drh: can only view and edit tickets and wiki while you are connected to cbc8983685 2008-10-06 drh: the server. </li> cbc8983685 2008-10-06 drh: <li> Fossil is lightweight and fully self-contained. It is very easy cbc8983685 2008-10-06 drh: to setup on a low-resource machine. Fossil does not require an cbc8983685 2008-10-06 drh: administator.</li> cbc8983685 2008-10-06 drh: <li> Fossil integrates code versioning into the same repository with cbc8983685 2008-10-06 drh: wiki and tickets. There is nothing extra to add or install. cbc8983685 2008-10-06 drh: Fossil is an all-in-one turnkey solution. </li> cbc8983685 2008-10-06 drh: </ol> cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>Love the concept here. Anyone using this for real work yet?</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> cbc8983685 2008-10-06 drh: Fossil is <a href="http://www.fossil-scm.org/">self-hosting</a>. cbc8983685 2008-10-06 drh: In fact, this page was probably delivered cbc8983685 2008-10-06 drh: to your web-browser via a working fossil instance. The same virtual cbc8983685 2008-10-06 drh: machine that hosts http://www.fossil-scm.org/ cbc8983685 2008-10-06 drh: (a <a href="http://www.linode.com/">Linode 720</a>) cbc8983685 2008-10-06 drh: also hosts 24 other fossil repositories for various small projects. cbc8983685 2008-10-06 drh: The documentation files for cbc8983685 2008-10-06 drh: <a href="http://www.sqlite.org/">SQLite</a> are hosted in a cbc8983685 2008-10-06 drh: fossil repository <a href="http://www.sqlite.org/docsrc/">here</a>, cbc8983685 2008-10-06 drh: for example. cbc8983685 2008-10-06 drh: Other projects are also adopting fossil. But fossil does not yet have d0e8e88d54 2008-10-09 aku: the massive user base of git or mercurial. cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>Fossil looks like the bug tracker that would be in your cbc8983685 2008-10-06 drh: Linksys Router's administration screen.</p> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> 4ef19b554a 2008-10-11 drh: <p>I take a pragmatic approach to software: form follows function. 4ef19b554a 2008-10-11 drh: To me, it is more important to have a reliable, fast, efficient, cbc8983685 2008-10-06 drh: enduring, and simple DVCS than one that looks pretty.</p> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <p>On the other hand, if you have patches that improve the apparance cbc8983685 2008-10-06 drh: of Fossil without seriously compromising its reliablity, performance, 4ef19b554a 2008-10-11 drh: and/or maintainability, I will be happy to accept them. Fossil is 4ef19b554a 2008-10-11 drh: self-hosting. Send email to request a password that will let cbc8983685 2008-10-06 drh: you push to the main fossil repository.</p> cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>It would be useful to have a separate application that d0e8e88d54 2008-10-09 aku: keeps the bug-tracking database in a versioned file. That file can cbc8983685 2008-10-06 drh: then be pushed and pulled along with the rest repository.</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> 7083eb1a1c 2008-11-20 drh: <p>Fossil already <u>does</u> push and pull bugs along with the files 7083eb1a1c 2008-11-20 drh: in your repository. 7083eb1a1c 2008-11-20 drh: But fossil does <u>not</u> track bugs as files in the source tree. 7083eb1a1c 2008-11-20 drh: That approach to bug tracking was rejected for three reasons:</p> 7083eb1a1c 2008-11-20 drh: 7083eb1a1c 2008-11-20 drh: <ol> 7083eb1a1c 2008-11-20 drh: <li> Check-ins in fossil are immutable. So if 7083eb1a1c 2008-11-20 drh: tickets were part of the check-in, then there would be no way to add 7083eb1a1c 2008-11-20 drh: new tickets to a check-in as new bugs are discovered. 7083eb1a1c 2008-11-20 drh: 7083eb1a1c 2008-11-20 drh: <li> Any project of reasonable size and complexity will generate thousands 7083eb1a1c 2008-11-20 drh: and thousands of tickets, and we do not want all those ticket files 7083eb1a1c 2008-11-20 drh: cluttering the source tree. 7083eb1a1c 2008-11-20 drh: 7083eb1a1c 2008-11-20 drh: <li> We want tickets to be managed from the web interface and to have a 7083eb1a1c 2008-11-20 drh: permission system that is distinct from check-in permissions. 7083eb1a1c 2008-11-20 drh: In other words, we do not want to restrict the creation and editing 7083eb1a1c 2008-11-20 drh: of tickets to developers with check-in privileges and an installed 7083eb1a1c 2008-11-20 drh: copy of the fossil executable. Casual passers-by on the internet should 7083eb1a1c 2008-11-20 drh: be permitted to create tickets. 7083eb1a1c 2008-11-20 drh: </ol> 7083eb1a1c 2008-11-20 drh: 7083eb1a1c 2008-11-20 drh: <p>These points are reiterated in the opening paragraphs of 7083eb1a1c 2008-11-20 drh: the <a href="bugtheory.wiki">Bug-Tracking In Fossil</a> document.</p> cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>Fossil is already the name of a plan9 versioned cbc8983685 2008-10-06 drh: append-only filesystem.</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> 5cbfe0cde2 2008-10-06 drh: I did not know that. Perhaps they selected the name for the same reason that cbc8983685 2008-10-06 drh: I did: because a repository with immutable artifacts preserves d0e8e88d54 2008-10-09 aku: an excellent fossil record of a long-running project. cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>The idea of storing a repository in a binary blob like an cbc8983685 2008-10-06 drh: SQLite database terrifies me.</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> cbc8983685 2008-10-06 drh: The use of SQLite to store the database is likely more stable and secure cbc8983685 2008-10-06 drh: than any other approach, due to the fact that SQLite is transactional. cbc8983685 2008-10-06 drh: Fossil also implements several internal cbc8983685 2008-10-06 drh: <a href="selfcheck.wiki">self-checks</a> to insure that no information 4ef19b554a 2008-10-11 drh: is ever lost. cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <b>I am dubious of the benefits of including wikis and bug trackers cbc8983685 2008-10-06 drh: directly in the VCS - either they are under-featured compared to full cbc8983685 2008-10-06 drh: software like Trac, or the VCS is massively bloated compared to cbc8983685 2008-10-06 drh: Subversion or Bazaar.</b> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: <blockquote> cbc8983685 2008-10-06 drh: <p>I have no doubt that Trac has many features that fossil lacks. But that cbc8983685 2008-10-06 drh: is not the point. Fossil has several key features that Trac lacks and that 4ef19b554a 2008-10-11 drh: I need: most notably the fact that cbc8983685 2008-10-06 drh: fossil supports disconnected operation.</p> cbc8983685 2008-10-06 drh: 5cbfe0cde2 2008-10-06 drh: <p>As for bloat: Fossil is a single self-contained executable. 5cbfe0cde2 2008-10-06 drh: You do not need any other packages 5cbfe0cde2 2008-10-06 drh: (diff, patch, merge, cvs, svn, rcs, git, python, perl, tcl, apache, 5cbfe0cde2 2008-10-06 drh: sqlite, and so forth) 5cbfe0cde2 2008-10-06 drh: in order to run fossil. Fossil runs just fine in a chroot jail all 5cbfe0cde2 2008-10-06 drh: by itself. And the self-contained fossil 5cbfe0cde2 2008-10-06 drh: executable is much less than 1MB in size. cbc8983685 2008-10-06 drh: Fossil is the very opposite of bloat.</p> cbc8983685 2008-10-06 drh: </blockquote> cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: cbc8983685 2008-10-06 drh: </nowiki>