post-scarcity/docs/Home.md

4.4 KiB

Post Scarcity Software Environment: general documentation

Work towards the implementation of a software system like that described in Post Scarcity Software.

Note on canonicity

Originally most of this documentation was on a wiki attached to the GitHub project; when that was transferred to my own foregejo instance the wiki was copied. However, it's more convenient to keep documentation in the project with the source files, and version controlled in the same Git repository. So while both wikis still exist, they should no longer be considered canonical. The canonical version is in /docs, and is incorporated by Doxygen into the generated documentation — which is generated into /doc using the command make doc.

State of Play

You can read about the current state of play.

Roadmap

There is now a roadmap for the project.

AWFUL WARNING 1

This does not work. It isn't likely to work any time soon. If you want to learn Lisp, don't start here; try Clojure, Scheme or Common Lisp (in which case I recommend Steel Bank Common Lisp). If you want to learn how Lisp works, still don't start here. This isn't ever going to be anything like a conventional Lisp environment.

What it sets out to be is a Lisp-like system which:

  • Can make use (albeit not, at least at first, very efficiently) of machines with at least Zettabytes of RAM;
  • Can make reasonable use of machines with at least billions of processors;
  • Can concurrently support significant numbers of users, all doing different things, without them ever interfering with one another;
  • Can ensure that users cannot escalate privilege;
  • Can ensure users private data remains private.

When Linus Torvalds sat down in his bedroom to write Linux, he had something usable in only a few months. BUT:

  • Linus was young, energetic, and extremely talented; I am none of those things.
  • Linus was trying to build a clone of something which already existed and was known to work. Nothing like what I'm aiming for exists.
  • Linus was able to adopt the GNU user space stack. There is no user space stack for this idea; I don't even know what one would look like.

AWFUL WARNING 2

This project is necessarily experimental and exploratory. I write code, it reveals new problems, I think about them, and I mutate the design. This documentation does not always keep up with the developing source code.

Building

The substrate of this system is written in plain old fashioned C and built with a Makefile. I regret this decision; I think either Zig or Rust would have been better places to start; but neither of them were sufficiently well developed to support what I wanted to do when I did start.

To build, you need a C compiler; I use GCC, others may work. You need a make utility; I use GNU Make. You need libcurl.

With these dependencies in place, clone the repository from here, and run make in the resulting project directory. If all goes well you will find and executable, psse, in the target directory.

In use

Invoking

When invoking the system, the following invokation arguments may be passed:

        -d      Dump memory to standard out at end of run (copious!);
        -h      Print this message and exit;
        -p      Show a prompt (default is no prompt);
        -v LEVEL
                Set verbosity to the specified level (0...512)
                Where bits are interpreted as follows:
                1       ALLOC;
                2       ARITH;
                4       BIND;
                8       BOOTSTRAP;
                16      EVAL;
                32      INPUT/OUTPUT;
                64      LAMBDA;
                128     REPL;
                256     STACK.

Note that any verbosity level produces a great deal of output, and although standardising the output to make it more legible is something I'm continually working on, it's still hard to read the output. It is printed to stderr, so can be redirected to a file for later analysis, which is the best plan.

Functions and symbols

The following functions and keys are provided as of release 0.0.6: