Fossil SCM
Updated the file sizes and hosting costs in www/fossil-v-git.wiki
Commit
b95abfd325f436c2d18f6649091e6721259e4425ea2e10ac2fd46575a9d1ba57
Parent
35fe8bf94031383…
1 file changed
+62
-43
+62
-43
| --- www/fossil-v-git.wiki | ||
| +++ www/fossil-v-git.wiki | ||
| @@ -178,36 +178,40 @@ | ||
| 178 | 178 | This policy is particularly useful when running Fossil inside a |
| 179 | 179 | restrictive container, anything from [./chroot.md | classic chroot |
| 180 | 180 | jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization |
| 181 | 181 | | OS-level virtualization mechanisms] such as |
| 182 | 182 | [https://en.wikipedia.org/wiki/Docker_(software) | Docker]. |
| 183 | -Our [./containers.md | stock container image] is under 8 MB when | |
| 184 | -uncompressed and running. It contains nothing but a single | |
| 183 | +Our [./containers.md | stock container image] is under 11 MB when | |
| 184 | +uncompressed and running because it contains nothing but a single | |
| 185 | 185 | statically-linked binary. |
| 186 | 186 | |
| 187 | -If you build a dynamically linked binary instead, Fossil's on-disk size | |
| 188 | -drops to around 6 MB, and it's dependent only on widespread | |
| 187 | +If you build a dynamically linked binary instead, a Linux | |
| 188 | +x86_64 build of Fossil drops to under 5 MB on-disk, stripped. | |
| 189 | +It will depend only on widespread | |
| 189 | 190 | platform libraries with stable ABIs such as glibc, zlib, and openssl. |
| 190 | 191 | |
| 191 | -Full static linking is easier on Windows, so our precompiled Windows | |
| 192 | -binaries are just a ZIP archive | |
| 193 | -containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>" | |
| 194 | -to run. | |
| 192 | +Much the same is true on Windows, where our precompiled static binaries | |
| 193 | +are distributed inside a ZIP archive containing "<tt>fossil.exe</tt>" | |
| 194 | +and not a thing else, with a size on-par that of the Linux container | |
| 195 | +build. There is no "<tt>setup.exe</tt>" to run; just copy it into your | |
| 196 | +<tt>%PATH%</tt>. | |
| 195 | 197 | |
| 196 | 198 | Fossil is easy to build from sources. Just run |
| 197 | 199 | "<tt>./configure && make</tt>" on POSIX systems and |
| 198 | 200 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 199 | 201 | |
| 200 | -Contrast a basic installation of Git, which takes up about | |
| 201 | -15 MiB on Debian 10 across 230 files, not counting the contents of | |
| 202 | -<tt>/usr/share/doc</tt> or <tt>/usr/share/locale</tt>. If you need to | |
| 203 | -deploy to any platform where you cannot count on facilities like the POSIX | |
| 204 | -shell, Perl interpreter, and Tcl/Tk platform needed to fully use Git | |
| 205 | -as part of the base platform, the full footprint of a Git installation | |
| 206 | -extends to more like 45 MiB and thousands of files. This complicates | |
| 207 | -several common scenarios: Git for Windows, chrooted Git servers, | |
| 208 | -Docker images... | |
| 202 | +Git, by contrast, takes 25 MiB on Ubuntu 26.04 across 940 files. | |
| 203 | +That doesn't count platform facilities like the POSIX shell and script | |
| 204 | +interpreters its full feature set requires. A fairer comparison to | |
| 205 | +Fossil's single static binary container is the Docker Hardened Image for | |
| 206 | +[https://hub.docker.com/hardened-images/catalog/dhi/git |Git 2.x on | |
| 207 | +Alpine], which presently weighs in at 36.3 megs unpacked and 607 files, | |
| 208 | +if you count all the <tt>busybox</tt> symlinks which would otherwise be | |
| 209 | +separate binaries on a more traditional Linux system. Worst of all are | |
| 210 | +the "Git for Windows" packages where they end up needing to ship a large | |
| 211 | +yet nerfed Linux-like userland to support Git's many loosely coupled | |
| 212 | +pieces, approaching a hundred megs and thousands of files. | |
| 209 | 213 | |
| 210 | 214 | Some say that Git more closely adheres to the Unix philosophy, |
| 211 | 215 | summarized as "many small tools, loosely joined," but we have many |
| 212 | 216 | examples of other successful Unix software that violates that principle |
| 213 | 217 | to good effect, from Apache to Python to ZFS. We can infer from that |
| @@ -216,26 +220,47 @@ | ||
| 216 | 220 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 217 | 221 | this. |
| 218 | 222 | |
| 219 | 223 | The above size comparisons aren't apples-to-apples anyway. We've |
| 220 | 224 | compared the size of Fossil with all of its [#features | many built-in |
| 221 | -features] to a fairly minimal Git installation. You must add a lot of | |
| 222 | -third-party software to Git to give it a Fossil-equivalent feature set. | |
| 223 | -Consider [https://about.gitlab.com/|GitLab], a third-party extension to | |
| 224 | -Git wrapping it in many features, making it roughly Fossil-equivalent, | |
| 225 | -though [https://docs.gitlab.com/ee/install/requirements.html|much more | |
| 226 | -resource hungry] and hence more costly to run than the equivalent Fossil | |
| 227 | -setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab | |
| 228 | -Community Edition container] currently clocks in at 2.66 GiB! | |
| 229 | - | |
| 230 | -GitLab's requirements are easy to accept when you're dedicating | |
| 231 | -a local rack server or blade to it, since its minimum requirements are | |
| 232 | -more or less a description of the smallest | |
| 233 | -thing you could call a "server" these days, but when you go to host that | |
| 234 | -in the cloud, you can expect to pay about 8 times as much to comfortably host | |
| 235 | -GitLab as for Fossil.³ This difference is largely due to basic | |
| 236 | -technology choices: Ruby and PostgreSQL vs C and SQLite. | |
| 225 | +features] to a relatively bare-bones Git installation. You must add a | |
| 226 | +lot of third-party software to Git to give it a Fossil-equivalent | |
| 227 | +feature set. | |
| 228 | + | |
| 229 | +Consider [https://about.gitlab.com/|GitLab], which wraps Git in enough | |
| 230 | +features to bring it to a rough (very rough) parity with Fossil. While | |
| 231 | +it is certainly ahead in some areas — automation comes to mind — it must | |
| 232 | +be noted that GitLab's own forums are on Discourse, not self-hosted as | |
| 233 | +with Fossil. You may then argue that Discourse is superior to the Fossil | |
| 234 | +forum feature, but this merely brings us back to another of Fossil's | |
| 235 | +advantages: when the posts are part of the repo, you can migrate your | |
| 236 | +entire project to another host merely by standing that repo back up on | |
| 237 | +other hardware. Choosing to assemble your project hosting from multiple | |
| 238 | +pieces requires each to have their own backups, their own management | |
| 239 | +processes, and their own migration strategies. | |
| 240 | + | |
| 241 | +Even then, these disparate services do not cooperate at the same level | |
| 242 | +as in Fossil, where the ability to have a forum post linking to a wiki | |
| 243 | +article linking to a trouble ticket linking to a commit falls out of the | |
| 244 | +model nearly for free. These are all internal links, mind, potentially | |
| 245 | +using nothing but repository artifact hashes, all backed by SQLite's | |
| 246 | +referential integrity. With something like GitLab, its "internal | |
| 247 | +references" are tacked on after the fact, not Git repo hashes at all, | |
| 248 | +and when it comes to external services like Discourse, history tells us | |
| 249 | +you're storing up tech debt which will come due at some future point in | |
| 250 | +the form of piles of broken links when one piece or the other needs | |
| 251 | +changing out. | |
| 252 | + | |
| 253 | +Furthermore, GitLab is far more resource hungry even in its | |
| 254 | +[https://docs.gitlab.com/omnibus/settings/memory_constrained_envs/ | | |
| 255 | +minimal configuration], hence more costly to run than the equivalent | |
| 256 | +Fossil setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The | |
| 257 | +official GitLab Community Edition container] currently clocks in at | |
| 258 | +3.44 GiB, independent of add-ons like Discourse. You can expect it to | |
| 259 | +cost around 8× as much to host it on a cloud service. Even pared down | |
| 260 | +to the minimum, there remain the consequences from the difference in | |
| 261 | +basic technology choices: Ruby and PostgreSQL vs C and SQLite. | |
| 237 | 262 | |
| 238 | 263 | The Fossil project itself is [./selfhost.wiki|hosted on a small and |
| 239 | 264 | inexpensive VPS]. A bare-bones $5/month VPS or a |
| 240 | 265 | spare Raspberry Pi is sufficient to run a full-up project |
| 241 | 266 | site, complete with tickets, wiki, chat, and forum, in addition to |
| @@ -326,11 +351,11 @@ | ||
| 326 | 351 | facilities Fossil needs to do its thing. (Network sockets, file locking, |
| 327 | 352 | etc.) There are certainly well-known platforms Fossil hasn't been ported |
| 328 | 353 | to yet, but that's most likely due to lack of interest rather than |
| 329 | 354 | inherent difficulties in doing the port. We believe the most stringent |
| 330 | 355 | limit on its portability is that it assumes at least a 32-bit CPU and |
| 331 | -several megs of flat-addressed memory.⁴ Fossil isn't quite as | |
| 356 | +several megs of flat-addressed memory.³ Fossil isn't quite as | |
| 332 | 357 | [https://www.sqlite.org/custombuild.html|portable as SQLite], but it's |
| 333 | 358 | close. |
| 334 | 359 | |
| 335 | 360 | Over half of the C code in Fossil is actually an embedded copy of the |
| 336 | 361 | current version of SQLite. Much of what is Fossil-specific after you set |
| @@ -344,20 +369,20 @@ | ||
| 344 | 369 | necessary]. The server-side |
| 345 | 370 | UI scripting uses a custom minimal |
| 346 | 371 | [https://en.wikipedia.org/wiki/Tcl|Tcl] dialect called |
| 347 | 372 | [./th1.md|TH1], which is |
| 348 | 373 | embedded into Fossil itself. Fossil's build system and test suite are |
| 349 | -largely based on Tcl.⁵ All of this is quite portable. | |
| 374 | +largely based on Tcl.⁴ All of this is quite portable. | |
| 350 | 375 | |
| 351 | 376 | About half of Git's code is POSIX C, and about a third is POSIX shell |
| 352 | 377 | code. This is largely why the so-called "Git for Windows" distributions |
| 353 | 378 | (both [https://git-scm.com/download/win|first-party] and |
| 354 | 379 | [https://gitforwindows.org/|third-party]) are actually an |
| 355 | 380 | [https://www.msys2.org/wiki/Home/|MSYS POSIX portability environment] bundled |
| 356 | 381 | with all of the Git stuff, because it would be too painful to port Git |
| 357 | 382 | natively to Windows. Git is a foreign citizen on Windows, speaking to it |
| 358 | -only through a translator.⁶ | |
| 383 | +only through a translator.⁵ | |
| 359 | 384 | |
| 360 | 385 | While Fossil does lean toward POSIX norms when given a choice — LF-only |
| 361 | 386 | line endings are treated as first-class citizens over CR+LF, for example |
| 362 | 387 | — the Windows build of Fossil is truly native. |
| 363 | 388 | |
| @@ -444,11 +469,11 @@ | ||
| 444 | 469 | [https://www.git-scm.com/docs/git-request-pull|pull requests] offer |
| 445 | 470 | a low-friction path to accepting |
| 446 | 471 | [https://www.jonobacon.com/2012/07/25/building-strong-community-structural-integrity/|drive-by |
| 447 | 472 | contributions]. Fossil's closest equivalents are its unique |
| 448 | 473 | [/help/bundle|bundle] and [/help/patch|patch] features, which require higher engagement |
| 449 | - than firing off a PR.⁷ This difference comes directly from the | |
| 474 | + than firing off a PR.⁶ This difference comes directly from the | |
| 450 | 475 | initial designed purpose for each tool: the SQLite project doesn't |
| 451 | 476 | accept outside contributions from previously-unknown developers, but |
| 452 | 477 | the Linux kernel does. |
| 453 | 478 | |
| 454 | 479 | * <b>No rebasing:</b> When your local repo clone syncs changes |
| @@ -917,16 +942,10 @@ | ||
| 917 | 942 | lightweight web server, |
| 918 | 943 | <tt>[https://sqlite.org/althttpd/|althttpd]</tt>, |
| 919 | 944 | which is configured as a front end to Fossil running in CGI mode on |
| 920 | 945 | these sites. |
| 921 | 946 | |
| 922 | - <li><p>That estimate is based on pricing at Digital Ocean in | |
| 923 | - mid-2019: Fossil will run just fine on the smallest instance they | |
| 924 | - offer, at US $5/month, but the closest match to GitLab's minimum | |
| 925 | - requirements among Digital Ocean's offerings currently costs | |
| 926 | - $40/month. | |
| 927 | - | |
| 928 | 947 | <li><p>This means you can give up waiting for Fossil to be ported to |
| 929 | 948 | the PDP-11, but we remain hopeful that someone may eventually port |
| 930 | 949 | it to [https://en.wikipedia.org/wiki/Z/OS|z/OS]. |
| 931 | 950 | |
| 932 | 951 | <li><p>"Why is there all this Tcl in and around Fossil?" you may |
| 933 | 952 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -178,36 +178,40 @@ | |
| 178 | This policy is particularly useful when running Fossil inside a |
| 179 | restrictive container, anything from [./chroot.md | classic chroot |
| 180 | jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization |
| 181 | | OS-level virtualization mechanisms] such as |
| 182 | [https://en.wikipedia.org/wiki/Docker_(software) | Docker]. |
| 183 | Our [./containers.md | stock container image] is under 8 MB when |
| 184 | uncompressed and running. It contains nothing but a single |
| 185 | statically-linked binary. |
| 186 | |
| 187 | If you build a dynamically linked binary instead, Fossil's on-disk size |
| 188 | drops to around 6 MB, and it's dependent only on widespread |
| 189 | platform libraries with stable ABIs such as glibc, zlib, and openssl. |
| 190 | |
| 191 | Full static linking is easier on Windows, so our precompiled Windows |
| 192 | binaries are just a ZIP archive |
| 193 | containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>" |
| 194 | to run. |
| 195 | |
| 196 | Fossil is easy to build from sources. Just run |
| 197 | "<tt>./configure && make</tt>" on POSIX systems and |
| 198 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 199 | |
| 200 | Contrast a basic installation of Git, which takes up about |
| 201 | 15 MiB on Debian 10 across 230 files, not counting the contents of |
| 202 | <tt>/usr/share/doc</tt> or <tt>/usr/share/locale</tt>. If you need to |
| 203 | deploy to any platform where you cannot count on facilities like the POSIX |
| 204 | shell, Perl interpreter, and Tcl/Tk platform needed to fully use Git |
| 205 | as part of the base platform, the full footprint of a Git installation |
| 206 | extends to more like 45 MiB and thousands of files. This complicates |
| 207 | several common scenarios: Git for Windows, chrooted Git servers, |
| 208 | Docker images... |
| 209 | |
| 210 | Some say that Git more closely adheres to the Unix philosophy, |
| 211 | summarized as "many small tools, loosely joined," but we have many |
| 212 | examples of other successful Unix software that violates that principle |
| 213 | to good effect, from Apache to Python to ZFS. We can infer from that |
| @@ -216,26 +220,47 @@ | |
| 216 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 217 | this. |
| 218 | |
| 219 | The above size comparisons aren't apples-to-apples anyway. We've |
| 220 | compared the size of Fossil with all of its [#features | many built-in |
| 221 | features] to a fairly minimal Git installation. You must add a lot of |
| 222 | third-party software to Git to give it a Fossil-equivalent feature set. |
| 223 | Consider [https://about.gitlab.com/|GitLab], a third-party extension to |
| 224 | Git wrapping it in many features, making it roughly Fossil-equivalent, |
| 225 | though [https://docs.gitlab.com/ee/install/requirements.html|much more |
| 226 | resource hungry] and hence more costly to run than the equivalent Fossil |
| 227 | setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab |
| 228 | Community Edition container] currently clocks in at 2.66 GiB! |
| 229 | |
| 230 | GitLab's requirements are easy to accept when you're dedicating |
| 231 | a local rack server or blade to it, since its minimum requirements are |
| 232 | more or less a description of the smallest |
| 233 | thing you could call a "server" these days, but when you go to host that |
| 234 | in the cloud, you can expect to pay about 8 times as much to comfortably host |
| 235 | GitLab as for Fossil.³ This difference is largely due to basic |
| 236 | technology choices: Ruby and PostgreSQL vs C and SQLite. |
| 237 | |
| 238 | The Fossil project itself is [./selfhost.wiki|hosted on a small and |
| 239 | inexpensive VPS]. A bare-bones $5/month VPS or a |
| 240 | spare Raspberry Pi is sufficient to run a full-up project |
| 241 | site, complete with tickets, wiki, chat, and forum, in addition to |
| @@ -326,11 +351,11 @@ | |
| 326 | facilities Fossil needs to do its thing. (Network sockets, file locking, |
| 327 | etc.) There are certainly well-known platforms Fossil hasn't been ported |
| 328 | to yet, but that's most likely due to lack of interest rather than |
| 329 | inherent difficulties in doing the port. We believe the most stringent |
| 330 | limit on its portability is that it assumes at least a 32-bit CPU and |
| 331 | several megs of flat-addressed memory.⁴ Fossil isn't quite as |
| 332 | [https://www.sqlite.org/custombuild.html|portable as SQLite], but it's |
| 333 | close. |
| 334 | |
| 335 | Over half of the C code in Fossil is actually an embedded copy of the |
| 336 | current version of SQLite. Much of what is Fossil-specific after you set |
| @@ -344,20 +369,20 @@ | |
| 344 | necessary]. The server-side |
| 345 | UI scripting uses a custom minimal |
| 346 | [https://en.wikipedia.org/wiki/Tcl|Tcl] dialect called |
| 347 | [./th1.md|TH1], which is |
| 348 | embedded into Fossil itself. Fossil's build system and test suite are |
| 349 | largely based on Tcl.⁵ All of this is quite portable. |
| 350 | |
| 351 | About half of Git's code is POSIX C, and about a third is POSIX shell |
| 352 | code. This is largely why the so-called "Git for Windows" distributions |
| 353 | (both [https://git-scm.com/download/win|first-party] and |
| 354 | [https://gitforwindows.org/|third-party]) are actually an |
| 355 | [https://www.msys2.org/wiki/Home/|MSYS POSIX portability environment] bundled |
| 356 | with all of the Git stuff, because it would be too painful to port Git |
| 357 | natively to Windows. Git is a foreign citizen on Windows, speaking to it |
| 358 | only through a translator.⁶ |
| 359 | |
| 360 | While Fossil does lean toward POSIX norms when given a choice — LF-only |
| 361 | line endings are treated as first-class citizens over CR+LF, for example |
| 362 | — the Windows build of Fossil is truly native. |
| 363 | |
| @@ -444,11 +469,11 @@ | |
| 444 | [https://www.git-scm.com/docs/git-request-pull|pull requests] offer |
| 445 | a low-friction path to accepting |
| 446 | [https://www.jonobacon.com/2012/07/25/building-strong-community-structural-integrity/|drive-by |
| 447 | contributions]. Fossil's closest equivalents are its unique |
| 448 | [/help/bundle|bundle] and [/help/patch|patch] features, which require higher engagement |
| 449 | than firing off a PR.⁷ This difference comes directly from the |
| 450 | initial designed purpose for each tool: the SQLite project doesn't |
| 451 | accept outside contributions from previously-unknown developers, but |
| 452 | the Linux kernel does. |
| 453 | |
| 454 | * <b>No rebasing:</b> When your local repo clone syncs changes |
| @@ -917,16 +942,10 @@ | |
| 917 | lightweight web server, |
| 918 | <tt>[https://sqlite.org/althttpd/|althttpd]</tt>, |
| 919 | which is configured as a front end to Fossil running in CGI mode on |
| 920 | these sites. |
| 921 | |
| 922 | <li><p>That estimate is based on pricing at Digital Ocean in |
| 923 | mid-2019: Fossil will run just fine on the smallest instance they |
| 924 | offer, at US $5/month, but the closest match to GitLab's minimum |
| 925 | requirements among Digital Ocean's offerings currently costs |
| 926 | $40/month. |
| 927 | |
| 928 | <li><p>This means you can give up waiting for Fossil to be ported to |
| 929 | the PDP-11, but we remain hopeful that someone may eventually port |
| 930 | it to [https://en.wikipedia.org/wiki/Z/OS|z/OS]. |
| 931 | |
| 932 | <li><p>"Why is there all this Tcl in and around Fossil?" you may |
| 933 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -178,36 +178,40 @@ | |
| 178 | This policy is particularly useful when running Fossil inside a |
| 179 | restrictive container, anything from [./chroot.md | classic chroot |
| 180 | jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization |
| 181 | | OS-level virtualization mechanisms] such as |
| 182 | [https://en.wikipedia.org/wiki/Docker_(software) | Docker]. |
| 183 | Our [./containers.md | stock container image] is under 11 MB when |
| 184 | uncompressed and running because it contains nothing but a single |
| 185 | statically-linked binary. |
| 186 | |
| 187 | If you build a dynamically linked binary instead, a Linux |
| 188 | x86_64 build of Fossil drops to under 5 MB on-disk, stripped. |
| 189 | It will depend only on widespread |
| 190 | platform libraries with stable ABIs such as glibc, zlib, and openssl. |
| 191 | |
| 192 | Much the same is true on Windows, where our precompiled static binaries |
| 193 | are distributed inside a ZIP archive containing "<tt>fossil.exe</tt>" |
| 194 | and not a thing else, with a size on-par that of the Linux container |
| 195 | build. There is no "<tt>setup.exe</tt>" to run; just copy it into your |
| 196 | <tt>%PATH%</tt>. |
| 197 | |
| 198 | Fossil is easy to build from sources. Just run |
| 199 | "<tt>./configure && make</tt>" on POSIX systems and |
| 200 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 201 | |
| 202 | Git, by contrast, takes 25 MiB on Ubuntu 26.04 across 940 files. |
| 203 | That doesn't count platform facilities like the POSIX shell and script |
| 204 | interpreters its full feature set requires. A fairer comparison to |
| 205 | Fossil's single static binary container is the Docker Hardened Image for |
| 206 | [https://hub.docker.com/hardened-images/catalog/dhi/git |Git 2.x on |
| 207 | Alpine], which presently weighs in at 36.3 megs unpacked and 607 files, |
| 208 | if you count all the <tt>busybox</tt> symlinks which would otherwise be |
| 209 | separate binaries on a more traditional Linux system. Worst of all are |
| 210 | the "Git for Windows" packages where they end up needing to ship a large |
| 211 | yet nerfed Linux-like userland to support Git's many loosely coupled |
| 212 | pieces, approaching a hundred megs and thousands of files. |
| 213 | |
| 214 | Some say that Git more closely adheres to the Unix philosophy, |
| 215 | summarized as "many small tools, loosely joined," but we have many |
| 216 | examples of other successful Unix software that violates that principle |
| 217 | to good effect, from Apache to Python to ZFS. We can infer from that |
| @@ -216,26 +220,47 @@ | |
| 220 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 221 | this. |
| 222 | |
| 223 | The above size comparisons aren't apples-to-apples anyway. We've |
| 224 | compared the size of Fossil with all of its [#features | many built-in |
| 225 | features] to a relatively bare-bones Git installation. You must add a |
| 226 | lot of third-party software to Git to give it a Fossil-equivalent |
| 227 | feature set. |
| 228 | |
| 229 | Consider [https://about.gitlab.com/|GitLab], which wraps Git in enough |
| 230 | features to bring it to a rough (very rough) parity with Fossil. While |
| 231 | it is certainly ahead in some areas — automation comes to mind — it must |
| 232 | be noted that GitLab's own forums are on Discourse, not self-hosted as |
| 233 | with Fossil. You may then argue that Discourse is superior to the Fossil |
| 234 | forum feature, but this merely brings us back to another of Fossil's |
| 235 | advantages: when the posts are part of the repo, you can migrate your |
| 236 | entire project to another host merely by standing that repo back up on |
| 237 | other hardware. Choosing to assemble your project hosting from multiple |
| 238 | pieces requires each to have their own backups, their own management |
| 239 | processes, and their own migration strategies. |
| 240 | |
| 241 | Even then, these disparate services do not cooperate at the same level |
| 242 | as in Fossil, where the ability to have a forum post linking to a wiki |
| 243 | article linking to a trouble ticket linking to a commit falls out of the |
| 244 | model nearly for free. These are all internal links, mind, potentially |
| 245 | using nothing but repository artifact hashes, all backed by SQLite's |
| 246 | referential integrity. With something like GitLab, its "internal |
| 247 | references" are tacked on after the fact, not Git repo hashes at all, |
| 248 | and when it comes to external services like Discourse, history tells us |
| 249 | you're storing up tech debt which will come due at some future point in |
| 250 | the form of piles of broken links when one piece or the other needs |
| 251 | changing out. |
| 252 | |
| 253 | Furthermore, GitLab is far more resource hungry even in its |
| 254 | [https://docs.gitlab.com/omnibus/settings/memory_constrained_envs/ | |
| 255 | minimal configuration], hence more costly to run than the equivalent |
| 256 | Fossil setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The |
| 257 | official GitLab Community Edition container] currently clocks in at |
| 258 | 3.44 GiB, independent of add-ons like Discourse. You can expect it to |
| 259 | cost around 8× as much to host it on a cloud service. Even pared down |
| 260 | to the minimum, there remain the consequences from the difference in |
| 261 | basic technology choices: Ruby and PostgreSQL vs C and SQLite. |
| 262 | |
| 263 | The Fossil project itself is [./selfhost.wiki|hosted on a small and |
| 264 | inexpensive VPS]. A bare-bones $5/month VPS or a |
| 265 | spare Raspberry Pi is sufficient to run a full-up project |
| 266 | site, complete with tickets, wiki, chat, and forum, in addition to |
| @@ -326,11 +351,11 @@ | |
| 351 | facilities Fossil needs to do its thing. (Network sockets, file locking, |
| 352 | etc.) There are certainly well-known platforms Fossil hasn't been ported |
| 353 | to yet, but that's most likely due to lack of interest rather than |
| 354 | inherent difficulties in doing the port. We believe the most stringent |
| 355 | limit on its portability is that it assumes at least a 32-bit CPU and |
| 356 | several megs of flat-addressed memory.³ Fossil isn't quite as |
| 357 | [https://www.sqlite.org/custombuild.html|portable as SQLite], but it's |
| 358 | close. |
| 359 | |
| 360 | Over half of the C code in Fossil is actually an embedded copy of the |
| 361 | current version of SQLite. Much of what is Fossil-specific after you set |
| @@ -344,20 +369,20 @@ | |
| 369 | necessary]. The server-side |
| 370 | UI scripting uses a custom minimal |
| 371 | [https://en.wikipedia.org/wiki/Tcl|Tcl] dialect called |
| 372 | [./th1.md|TH1], which is |
| 373 | embedded into Fossil itself. Fossil's build system and test suite are |
| 374 | largely based on Tcl.⁴ All of this is quite portable. |
| 375 | |
| 376 | About half of Git's code is POSIX C, and about a third is POSIX shell |
| 377 | code. This is largely why the so-called "Git for Windows" distributions |
| 378 | (both [https://git-scm.com/download/win|first-party] and |
| 379 | [https://gitforwindows.org/|third-party]) are actually an |
| 380 | [https://www.msys2.org/wiki/Home/|MSYS POSIX portability environment] bundled |
| 381 | with all of the Git stuff, because it would be too painful to port Git |
| 382 | natively to Windows. Git is a foreign citizen on Windows, speaking to it |
| 383 | only through a translator.⁵ |
| 384 | |
| 385 | While Fossil does lean toward POSIX norms when given a choice — LF-only |
| 386 | line endings are treated as first-class citizens over CR+LF, for example |
| 387 | — the Windows build of Fossil is truly native. |
| 388 | |
| @@ -444,11 +469,11 @@ | |
| 469 | [https://www.git-scm.com/docs/git-request-pull|pull requests] offer |
| 470 | a low-friction path to accepting |
| 471 | [https://www.jonobacon.com/2012/07/25/building-strong-community-structural-integrity/|drive-by |
| 472 | contributions]. Fossil's closest equivalents are its unique |
| 473 | [/help/bundle|bundle] and [/help/patch|patch] features, which require higher engagement |
| 474 | than firing off a PR.⁶ This difference comes directly from the |
| 475 | initial designed purpose for each tool: the SQLite project doesn't |
| 476 | accept outside contributions from previously-unknown developers, but |
| 477 | the Linux kernel does. |
| 478 | |
| 479 | * <b>No rebasing:</b> When your local repo clone syncs changes |
| @@ -917,16 +942,10 @@ | |
| 942 | lightweight web server, |
| 943 | <tt>[https://sqlite.org/althttpd/|althttpd]</tt>, |
| 944 | which is configured as a front end to Fossil running in CGI mode on |
| 945 | these sites. |
| 946 | |
| 947 | <li><p>This means you can give up waiting for Fossil to be ported to |
| 948 | the PDP-11, but we remain hopeful that someone may eventually port |
| 949 | it to [https://en.wikipedia.org/wiki/Z/OS|z/OS]. |
| 950 | |
| 951 | <li><p>"Why is there all this Tcl in and around Fossil?" you may |
| 952 |