summaryrefslogtreecommitdiff
path: root/www/whyallinone.md
diff options
context:
space:
mode:
Diffstat (limited to 'www/whyallinone.md')
-rw-r--r--www/whyallinone.md235
1 files changed, 235 insertions, 0 deletions
diff --git a/www/whyallinone.md b/www/whyallinone.md
new file mode 100644
index 0000000..c71cf00
--- /dev/null
+++ b/www/whyallinone.md
@@ -0,0 +1,235 @@
+# Why Add Forum, Wiki, and Web Software To Your DVCS?
+
+One notable feature of Fossil is that it bundles
+[bug tracking](./bugtheory.wiki),
+[wiki](./wikitheory.wiki),
+[forum](./forum.wiki),
+[chat](./chat.md), and
+[technotes](./event.wiki)
+with distributed version control to give you an
+all-in-one software project management system.
+
+A commenter on [Hacker News](https://news.ycombinator.com/item?id=27437895)
+takes exception to this idea, writing:
+
+> *I don't want forum/web software built into my dvcs.*
+> *I don't see how this improves over git.*
+
+This commenter may hold whatever opinions he wishes, of course.
+However, there are many good reasons why bundling other project management
+features with the DVCS might be useful for a given project:
+
+ 1. There is a single software package to install and manage for the
+ project website.
+ The alternative is to select, install, configure, learn about,
+ manage, and maintain separate DVCS, wiki,
+ ticketing, forum,
+ chat, documentation, and whatever other software packages your project needs.
+ Less time spent on project administration details means more
+ time available to spend on the project itself.
+
+ 2. Fossil’s autosync feature gives you an implicit backup of the
+ wiki, tickets, forum, and so forth simply by cloning the
+ repository to another machine and using that clone regularly.
+ Since the typical Fossil usage pattern is to stand the repo up on a
+ central server and have the developers clone that repository down
+ to their personal machines, if the server falls over, the last
+ developer to do anything that resulted in an autosync has a
+ functional and up-to-date backup.
+
+ There are [limitations to relying on Fossil’s autosync feature for
+ backup purposes](./backup.md), but that document gives two methods
+ for more complete backups, both of which are easily automated. The
+ Fossil project itself is distributed across three data centers in
+ this manner via cron.
+
+ 3. Remote workers get more than just the source code:
+ they get the entire website including versioned documentation,
+ wiki articles, tickets, forum posts, and so forth. This supports
+ off-network development when traveling, when riding out Internet
+ service failures, and when workers must sync with multiple remote
+ servers, as when working alternately from home and in some central
+ office.
+
+ Feature-competitive Fossil alternatives typically solve this same
+ problem with centralization, which generally means that only the
+ DVCS piece still works in these situations where the developer is
+ unable to contact the central server. Why accept the limitation of
+ having a distributed clone of the code repo alone?
+
+ Centralization doesn’t work for every project. If you enjoy the
+ benefits of truly distributed (read: non-centralized) version
+ control, you may also benefit from distributed forums, distributed
+ ticket tracking, distributed wiki article publishing, and so
+ forth.
+
+ 4. Integration of all of these features allows easy hyperlinks between
+ check-in comments, wiki pages, forum posts, and tickets. More,
+ because the software sees both sides of the link, referrer and
+ referent, it can provide automatic back-references.
+
+ A common situation in a Fossil project is that:
+
+ * a forum post refers to a versioned project document that shows
+ that the software isn’t behaving as documented;
+ * a developer triages that forum report as a verified bug, filing
+ a ticket to prioritize and track the resolution;
+ * developers chat about the problem, referring to the ticket and
+ thereby indirectly referring to the forum post, plus perhaps to
+ other Fossil-managed resources such as a wiki document giving
+ design principles that guide the proper fix; and finally
+ * the commit message resolving the ticket includes a reference to
+ the ticket it resolves.
+
+ Since Fossil sees that the commit refers to a ticket, the ticket
+ page automatically also refers back to the commit, closing the
+ loop. A latecomer may arrive at the ticket via a web search, and
+ from that see that it was closed following a commit. They can
+ follow the link from the initial ticket message to the forum
+ thread to catch up on the discussion leading to the fix and likely
+ find a follow-up post from the initial reporting user saying
+ whether the fix worked for them. If further work was needed, the
+ latecomer can likely find it from that forum thread.
+
+ This works even in a remote off-network clone: the developer can
+ pull up the project web site via an `http://localhost` link and
+ follow these links around the loop.
+
+ Fossil allows breaking some of these project facilities out into
+ separate repositories, as when the public forum is kept separate
+ from the actual software development repository for administration
+ reasons. By using Fossil’s [interwiki link
+ feature](./interwiki.md), you can get this same internal linking
+ from ticket to commit to forum to wiki even across these
+ administrative boundaries, even with remote off-network clones,
+ simply by adjusting the interwiki map to match the remote clone’s
+ network configuration.
+
+ 5. Bundling all of these services gives [single sign-on][SSO] (SSO) for all
+ aspects of the project. The same username/password works for code,
+ wiki, forum, tickets, and chat.
+
+ If you choose to administratively separate some of these features
+ by setting up multiple cooperating Fossil repositories, its [login
+ groups feature](./caps/login-groups.md) allows asymmetric SSO
+ across these administrative boundaries so that, for example, users
+ allowed to commit to the code repository also get a forum
+ repository login, but self-registered forum users don’t
+ automatically get the ability to commit to the code repo.
+
+ 6. Bundling all of these features reduces the number of external
+ dependencies for the project.
+
+ Take the first two points above: standing up a Fossil repo backup
+ on a new server may be as simple as copying the backup to the new
+ server and [configuring its stock HTTP server to point at the
+ backup repository via CGI](./server/any/cgi.md).
+
+ Consider: If you had good backups for all of the elements in a
+ Git + [Jira] + [Discord] + [MediaWiki] + [Sphinx] lash-up, how long
+ would it take you to stand up a replacement? That lash-up
+ certainly has more features combined than Fossil alone, but are
+ they worth the administration and hosting costs they impose?
+ Fossil’s feature set suffices for the SQLite project it was
+ created to serve, as well as for many others; is your project
+ sufficiently more complex, such that it *needs* all of those extra
+ features and their concomitant complexity?
+
+ Considerations such as these push many into centralized hosting
+ services such as GitHub, GitLab, Bitbucket, and so forth, but that
+ just takes you back to point 3 above.
+
+ 7. Hosting all of these elements within a single service gives a
+ consistent look-and-feel across all aspects of the project.
+
+ Skinning independent software packages’ web interfaces to make
+ them appear unified is more work than [skinning] everything once, as
+ in Fossil, and even then, you can’t make independently-developed
+ software look like it was produced by a single entity without
+ resorting to heroic levels of customization. If you use a separate
+ DVCS web front end, chat system, forum manager, documentation
+ system, ticket tracker, and so on, you are likely to be relegated
+ to simply matching colors and fonts; you *might* also get the
+ ability to add a common logo to the header of all of these
+ independent pieces. The pieces won’t look unified, because they
+ weren’t developed that way.
+
+ The Fossil project’s
+ skinning system lets you affect all of its elements globally from the
+ single skin editor.
+
+ Or not: there’s a feature in Fossil that lets skin customizations
+ apply to only *some* Fossil features. The initial impetus behind
+ this feature was that one of our users wanted Markdown to be
+ rendered with different indentation in forum posts than in
+ [embedded documentation][edoc] owing to the inherent differences between
+ the two presentation modalities.
+
+ A user taking advantage of this per-feature CSS capability who
+ wishes to change a UI element common to all Fossil features — say,
+ to change the font for literal code blocks — may still make such a
+ change globally. Opting into this per-feature CSS doesn’t fork all
+ skinning efforts: UI elements not explicitly reskinned on a
+ per-feature basis inherit the global skinning.
+
+ But it goes futher. Fossil has a feature for [project-specific
+ extensions](./serverext.wiki), which backs the [SQLite Release
+ Checklist][srckl], for instance. You wouldn’t know by looking at
+ that page that it’s produced by software that isn’t actually part
+ of Fossil: the extension only delivers the core of the page,
+ and Fossil’s skining wraps it in a way that lets it inherit all of
+ the project-level skinning customizations.
+
+ 8. Unifying all of these features within Fossil
+ means we have a single Markdown interpreter common to all
+ elements. If you lash multiple software systems together, even if
+ they can all agree on Markdown as a common document markup
+ language — hardly a given, as shown by the MediaWiki and Sphinx
+ elements in point 6’s example above — they’re likely to render your text
+ using different — possibly even incompatibly-different — Markdown
+ dialects.
+
+ This costs you in mental gear-switching when moving from the code
+ repository to the documentation system to the forums to the ticket
+ tracker.
+
+ More than that, though, a developer might write a forum post that later gets
+ promoted to a wiki article or to an embedded version-controlled
+ project document. A developer on a Fossil-backed project may simply copy-paste the forum post
+ text into the new document and save it, not needing to carefully
+ check that it still renders properly under the second Markdown
+ rendering engine. Similarly, if a user reports a potential bug via
+ the forum, the developer can copy interesting pieces of the
+ Markdown from the post into a ticket comment, again without
+ needing to fiddle with dialect incompatibilities.
+
+ 9. Fossil is [free, open-source software](../COPYRIGHT-BSD2.txt),
+ through and through. Git-backed lash-ups tend to incorporate
+ either proprietary add-ons or proprietary hosting systems that
+ produce vendor lock-in. Fossil gives you the freedom to take your
+ complete backup (point 2) of the project including its
+ idiosyncratic customizations and stand it up elsewhere on
+ commodity hardware and software stacks.
+
+All of this having been said, the non-DVCS features of Fossil are
+optional. Its forum and chat features are disabled by default, and you
+can disable the ticket-tracking and wiki features with a quick
+configuration change to its [role-based access control system](./caps/).
+When you’re ready to turn these additional features on, you can do so
+with a few mouse clicks.
+
+Because Fossil is web-native out of the box, if you’ve delegated these
+features to outside systems to flesh out Git’s DVCS-only nature, you are
+free to do the same with Fossil. One of the many things the [skinning]
+facility allows is replacing the built-in links to the wiki, forum,
+ticket system, etc. with links to external systems. How easy those
+systems make it to link back into Fossil is up to their developers.
+
+[Discord]: https://discord.com/
+[edoc]: ./embeddeddoc.wiki
+[Jira]: https://www.atlassian.com/software/jira
+[MediaWiki]: https://www.mediawiki.org/
+[skinning]: ./customskin.md
+[Sphinx]: https://www.sphinx-doc.org/en/master/
+[SSO]: https://en.wikipedia.org/wiki/Single_sign-on
+[srckl]: https://www.sqlite.org/src/ext/checklist/top/index