Collapse OS — Roadmap

General goals

Minimal systems? There's tons of them. Self-assembling systems? There's tons of them. Running on less than 10K transistors? not so much.

If we assume that lower complexity will be forced upon us, we need such a system, a system that is capable of running and self-replicating on very low transistor count.

Collapse OS has no target machine because those machines it's going to run on don't exist yet and will very often be cobbled up together. However, it has target specs, inspired by Grant Searle's minimal z80 computer: it should run and self-replicate on 8K of ROM and 56K of RAM.

Anything bigger starts being much more complex because you need memory paging, and if you need paging, then you need a kernel that helps you manage that, etc.. Of course, I don't mean that these more complex computers can't be built post-collapse, but that if we don't have a low-enough bar, we reduce the likeliness for a given community to bootstrap itself using Collape OS.

Of course, with this kind of specs, a C compiler is out of the question. Even full-fledged assembler is beginning to stretch the machine's ressources. The assembler having to be written in assembler (to be self-replicating), we need to design a watered-down version of our modern full-fledged assembler languages.

But with assemblers, a text editor and a way to write data to flash, you have enough to steadily improve your technological situation, build more sophisticated machines from more sophisticated scavenged parts and, who knows, in a couple of decades, build a new IC fab (or bring an old one back to life).

Short term goals

The roadmap used to be really hazy, but with the first big goal (that was to have a self-assembling system) reached, the feasability of the project is much more likely and the horizon is clearing out.

As of now, that self-assembling system is hard to use outside of an emulated environment, so the first goal is to solidify what I have.

  1. Error out gracefully in ZASM. It can compile almost any valid code that scas can, but it has undfined behavior on invalid code and that make it very hard to use.
  2. Make shell, CFS, etc. convenient enough to use so that I can easily assemble code on an SD card and write the binary to that same SD card from within a RC2014.

Longer term goals

  1. Get out of the serial link: develop display drivers for a vga output card that I have still to cobble up together, then develop input driver for some kind of PS/2 interface card I'll have to cobble up together.
  2. Add support for writing to flash/eeprom from the RC2014.
  3. Add support for floppy storage.
  4. Add support for all-RAM systems through bootloading from storage.

Then comes the even longer term goals, that is, widen support for all kind of machines and peripherals.

Non-goals

It's worth mentionning, however, that supporting specific peripherals isn't on the roadmap. There's too many of them out there and most peripheral post-collapse will be cobbled-up together anyway.

The goal is to give good starting point for as many types of peripherals possible.

It's also important to keep in mind that the goal of this OS is to program microcontrollers, so the type of peripherals it needs to support is limited to whatever is needed to interact with storage, serial links, display and receive text, do bit banging.