Well… the idea is that the tiniest exoshell would simply be one that continuously verifies / trains the user to make changes to the exoshell. So I took a standard design for a quine, and modified it so it injects a random error into the source code that it spits out.
So the idea is if you took this, and repeatedly fixed it, then ran it, then fixed it, then ran it, et cetera, you would soon be comfortable adding other features. Maybe it acts as a little to-do list maintainer program, as well as its previous features. Maybe it also acts as a compiler or a shell or a virtual machine emulator—or stores recipes for how to download and install the compiler, shell, and virtual machine that you like to use.
I’ve done about 10 iterations from that starting point, combining it with SQLite and adding a self-test framework and so on, but I haven’t gotten to the point of using it routinely for interacting with the world.
Recently, I’ve started studying tiny self-compilers (Fabrice Bellard’s otcc, and Edward Grimley-Evans’s bcompiler and cc500). Maybe an ideal seed exoshell would have the functionality of Lennart Augustsson’s 1996 ioccc entry, the readability of Darius Bacon’s Halp and the host-independence of Rob Landley’s Firmware Linux..
To a fledgling computer geek, this sounds absolutely awesome, and I would love some elaboration!
Well… the idea is that the tiniest exoshell would simply be one that continuously verifies / trains the user to make changes to the exoshell. So I took a standard design for a quine, and modified it so it injects a random error into the source code that it spits out.
I call it “ExoMustard” Source is at: http://www.johnicholas.com/exomustard.c
So the idea is if you took this, and repeatedly fixed it, then ran it, then fixed it, then ran it, et cetera, you would soon be comfortable adding other features. Maybe it acts as a little to-do list maintainer program, as well as its previous features. Maybe it also acts as a compiler or a shell or a virtual machine emulator—or stores recipes for how to download and install the compiler, shell, and virtual machine that you like to use.
I’ve done about 10 iterations from that starting point, combining it with SQLite and adding a self-test framework and so on, but I haven’t gotten to the point of using it routinely for interacting with the world.
Recently, I’ve started studying tiny self-compilers (Fabrice Bellard’s otcc, and Edward Grimley-Evans’s bcompiler and cc500). Maybe an ideal seed exoshell would have the functionality of Lennart Augustsson’s 1996 ioccc entry, the readability of Darius Bacon’s Halp and the host-independence of Rob Landley’s Firmware Linux..