From e26522ab0db3c5f71fe4ac1337d41f67e72e5cc9 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 29 May 2023 19:57:43 -0400 Subject: [PATCH] Update README to reduce duplicate with website contents --- README.md | 202 +----------------------------------------------------- 1 file changed, 3 insertions(+), 199 deletions(-) diff --git a/README.md b/README.md index 1038d6c3..74038a1d 100644 --- a/README.md +++ b/README.md @@ -13,190 +13,8 @@ Dusk OS innovates by having an ["almost C" compiler][duskcc] allowing it to piggy-back on UNIX C code, through a modest [porting effort][port], to reach its goals and stay true to its design constraints with a minimal effort. -[Video showcasing Dusk OS][demovideo] - -## Why build this OS? - -Most modern operating systems can do whatever we want them to do. Why do we -need another one? Simplicity. - -It's difficult to predict post-collapse conditions, but we can suppose that many -users will need to use their machines in novel and creative ways. Hackability -of the operating system then becomes paramount. Open source modern operating -systems all can be modified to fit its user's needs, but their complexity limits -the likelihood that the user is able to do so. A simpler OS increases this -likelihood. - -But we can't have our cake and eat it too, right? Either you have a simple toy -OS or a complex one. Well, maybe not? - -Its authors believe that in the history of computing, Forth has been -under-explored. Its approach to simplicity is, we think, revolutionary. It -has significant shortcomings when system specifications become more complex -(Forth hates complexity and doesn't manage it well), but we believe it -possible to elegantly marry it with languages that like complexity better. - -This mix, we believe, could provide a [creative][creative] user with computing -powers rarely seen with other approaches. We've got to try it. - -To be clear: this is a research project, we don't know what it will yield -beforehand. We have the intuition that it might lead to a big "ah ah!" moment -and reveal a breathtaking combination of power and simplicity. - -## Features making Dusk OS special - -### A whole OS built from source on boot - -One thing that makes Dusk OS special is that it boots from a very tiny core -(1000 lines of i386 assembly). From this tiny core, on boot, it builds its way -up to a system that has a functional C compiler, which then allows it to -bootstrap itself some more. - -With regards to "source bootstrapping", it's even more extreme than Collapse OS -because modern machines allows this process to run quickly and the whole -process is still faster than a regular Linux boot. On Collapse OS target -machines, this process would be prohibitive, so a bigger part of the OS is -cross-compiled into the kernel. - -This peculiarity of Dusk OS has interesting properties. The nicest one, in my -humble opinion, is that this allows us to sidestep the *entire* problems of -binary compatibility and relocation and only deal with source compatibility. -So, no ELF, no binutils, only code that is designed to run from where it was -generated in the first place. This is so much simpler! - -Object files? Global symbols? Nah. C functions that don't have a static storage -type are simple Forth words. - -### Harmonized Assembly Layer - -Dusk features what we call the [Harmonized Assembly Layer][hal] (HAL for short). -This is a cross-CPU assembler, on which the C compiler relies, which prioritizes -implementation and usage simplicity, but is also designed to generate efficient -native code. - -### Shortest path to self-hosting for an "almost C" compiler - -Dusk OS self-hosts in about 800 lines of assembly and a few hundred lines of -Forth (the exact number depends on the target machine). From there, it -bootstraps to DuskCC, which is roughly 2000 lines of Forth code (including -arch-specific assemblers). To my knowledge, Dusk OS is unique in that regard. - -You can pick any C compiler that requires POSIX and it will automatically -require order of magnitudes more lines of code to bootstrap because you need -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. - -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. - -## Who is Dusk for? - -The target Dusk user is someone who's [creative][creative], close to hardware, -can read a datasheet. Dusk shines (well, *will* shine) when one wants to poke -around the hardware without limit. - -It compares favorably to other more complete OSes because there's no concurrent -process to mess with your poking and the driver structure is (well, *will* -hopefully be) more approachable, hackable due to its stricter scope and savvier -target audience. - -Let's use an example. Let's say you're on a notebook that runs on a chipset of -Intel's ICHn family. You read the datasheet and see "oh, nice, there's an SPI -interface in there. Maybe that it's not hooked to anything on the notebook, -let's play with it." - -Now, that chipset is very, very central to the computer. There are good chances, -on a BSD or Linux system, that if you begin poking around its registers, you'll -step on someone else toes and crash the system because, for example, of some -other process that needed to read from disk at the same time. - -In Dusk, you could completely break the SATA controller, you'll still be golden -as long as you don't access mass storage. Because Dusk doesn't have -concurrency, you have tight control over what happen or doesn't happen on the -machine, so all you need to do is to avoid words that access mass storage. That -gives you ample wiggling space for your hacking session. - -To be clear: this is also possible with a custom made BSD or Linux, but you're -going to have to strip a lot of pieces from your distro before you get there -and some of those pieces might be useful debugging tools which will be -difficult to retrofit because they need a wider system. You'll also need a -higher cognitive space to fit BSD/Linux wider abstractions in your mind. - -## Status - -* Has a VM written in C, buildable from a POSIX environment, which allows Dusk - to build itself for any of its supported targets. -* Has an ["almost C" compiler][duskcc] which still needs some work, but is - already capable of compiling a nice subset of C. -* It can run bare metal on some PCs (and QEMU, of course). It has drivers (in - various state of sophistication) for: - * VGA in text mode - * PS/2 keyboard - * PCI controllers - * ATA controllers - * AHCI controllers - * Floppy controllers - * PC COM ports - * VESA in graphical mode - * PS/2 mouse support -* Can read, write and boot from FAT12/FAT16 (no FAT32 for now) volumes. -* Can create new FAT12 volumes. -* Very small footprint. In Grid mode (TUI mode) with the Grid text editor - and DuskCC (including its stdlib) loaded, Dusk uses 180KB of RAM on a PC. -* It completely self-hosts on all its target (only PC for now) machines. -* Simple and terse. The core system (all kernels, drivers, filesystems, CC, - core libraries) is less than 8K lines of code. -* Since `text/ed` has reached a usable status, the main author of Dusk has been - developing it from within itself on an old Pentium 75 Mhz with 16mb of RAM and - he's having a blast. - -List of ported codebases: - -* The CVM of [Collapse OS][collapseos] -* The [uxn][uxn] VM -* The `puff()` algorithm from [zlib][zlib] -* The [left][left] text editor. (Still a bit glitchy...) - -List of homegrown applications: - -* C Compiler (see `doc/cc`) -* Text editor (see `doc/text/ed`) - -What's next? See the [roadmap][roadmap]! - -Development happens on [sourcehut][shproj]. - -Unlike Collapse OS which is a personal effort and doesn't lend itself well to -collaboration, Dusk OS' wider scope makes it fitting for a collective effort. -Let's discuss this on its [public mailing list][mailinglist]. - -It's also worth noting that I've started a blog, [Tumble Forth][tumbleforth] -that offers hand-holding into the wonderful world of Dusk OS and Forth. +This is Dusk OS' source code and the rest of the README assumes that you want to +run it. To read more about why this OS exists, see its [website][website]. ## Build and run Dusk @@ -262,6 +80,7 @@ Press Escape to return to prompt. You can try the same thing with: * `tests/manual/uxn/mouse.fs` * `text/left.fs` +[website]: http://duskos.org [collapseos]: http://collapseos.org [coswhy]: http://collapseos.org/why.html [creative]: http://collapseos.org/why.html#creative @@ -271,19 +90,4 @@ Press Escape to return to prompt. You can try the same thing with: [port]: fs/doc/design/port.txt [shell]: fs/doc/design/shell.txt [docs]: fs/doc/index.txt -[roadmap]: ROADMAP.md -[shproj]: https://sr.ht/~vdupras/duskos -[mailinglist]: https://sr.ht/~vdupras/duskos/lists -[duskcc]: fs/doc/cc/index.txt -[hal]: fs/doc/hal.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 -[zlib]: https://github.com/madler/zlib -[left]: https://git.sr.ht/~rabbits/left -[demovideo]: https://vimeo.com/800710912 -[tumbleforth]: https://tumbleforth.hardcoded.net/ -- 2.45.2