commit 41c116f3651872b38b633cdd02a67e3913504c53
parent 5b9bc7a9e28d56e6ee12522f95f8bcd81fb6e727
Author: Virgil Dupras <hsoft@hardcoded.net>
Date: Tue, 21 Feb 2023 22:21:07 -0500
README: mention live-bootstrap and M2-Planet
Diffstat:
M | README.md | | | 48 | +++++++++++++++++++++++++++--------------------- |
1 file changed, 27 insertions(+), 21 deletions(-)
diff --git a/README.md b/README.md
@@ -83,27 +83,29 @@ that POSIX system in addition to the C compiler. So even if you pick a small C
compiler such as tcc, you still need a POSIX system to build it, which is
usually in the millions of LOCs.
-One of your best pick, should you try this path, would be [Fiwix][fiwix], a
-minimal POSIX i386 kernel weighting less than 50K lines of C+asm. If you run
-tcc on top of it, that brings your total LOC to 80K. Not bad. But as is, the
-kernel is not usable, you need userspace. To be minimalist, your best bet would
-be busybox at 190K LOC (bash+coreutils are 400K). To build Fiwix itself, you'll
-also need GNU Make at 25K LOC. So, not millions, but still a lot more than
-Dusk.
-
-In your search for competitors to DuskCC, you can go back in time and look for
-simpler systems that have a C compiler. There's plenty of them, some of them
-open source. For example, there is FreeDOS, an open source implementation
-compatible with MS-DOS. It can certainly run a C compiler, but its kernel is
-26K lines of C and assembler and building it requires Open Watcom, which clocks
-at more than 2M lines of code (since it's an IDE, it's probably only a subset
-of it that is actually needed for compilation, but I haven't looked closely
-enough to have a precise figure), and NASM which is 15K lines of C code for its
-"juicy" part (the assembler).
-
-You can try to dive further down the history lane for even simpler systems such
-as CP/M and BDS C. But even then, you're still looking at 25K lines of
-assembler for BDS C and it's going to lack backends for modern CPUs.
+To be fair, Dusk OS is not the first project thinking of optimizing that path.
+[Efforts at making our modern software world bootstrappable][livebootstrap]
+lead to an "almost C", [M2-Planet][m2planet] with a feature set comparable to
+DuskCC with very few lines of code. M2-Planet itself is about 5K lines of code
+and the various stages that lead to it are generally a few hundred lines each.
+The project initially ran on top of regular kernels (as in "fat kernels with
+lots of code"), but some bare metal stages ([1][builder-hex0],
+[2][stage0-uefi]) were created and now this little chain end up being
+comparable to Dusk in terms of lines of code. Still more than Dusk, but in the
+same ballpark.
+
+Although this path is short and technically leads you to an "almost C"
+compiler, you can hardly use it because it has no "real kernel" (those bare
+metal stages mentioned above are enough to compile M2-Planet, but really not
+much else, they're extremely limited) and no shell. You'll need those if you
+want to use your shiny compiler.
+
+One of your best picks, should you try this path, would be [Fiwix][fiwix], a
+minimal POSIX i386 kernel weighting less than 50K lines of C+asm. But then,
+M2-Planet is not enough. You need to compile tcc (which M2-Planet can compile
+after having applied a few patches) which weights 80K. Userspace is worse.
+Bash+coreutils are 400K, even busybox is 190K. We still end up with a pretty
+minimal and simple system, but it's still a lot more code than Dusk.
So, unless someone tells me about some option I don't know about, DuskCC is
quite innovative on the aspect of self-hosting path length.
@@ -267,6 +269,10 @@ Press Escape to return to prompt. You can try the same thing with:
[shproj]: https://sr.ht/~vdupras/duskos
[mailinglist]: https://sr.ht/~vdupras/duskos/lists
[duskcc]: fs/doc/cc/index.txt
+[livebootstrap]: https://github.com/fosslinux/live-bootstrap
+[m2planet]: https://git.sr.ht/~oriansj/M2-Planet
+[builder-hex0]: https://github.com/ironmeld/builder-hex0
+[stage0-uefi]: https://git.stikonas.eu/andrius/stage0-uefi
[fiwix]: https://www.fiwix.org
[uxn]: https://wiki.xxiivv.com/site/uxn.html
[varvara]: https://wiki.xxiivv.com/site/varvara.html