bedrock platform (original) (raw)

A bedrock platform is a hardware platform or a universal virtual machine that can be expected to remain compatible with any software that has ever been written for it. Bedrock platforms can be used to prevent software rot.

Note that this is not a "shopping list" or a list of "allowed" hardware. Bedrock platform support is simply a way of maximizing the probability that a program can be run in an indefinite future and a way to keep its dependencies reliable. The concept of bedrock platform is not relevant to e.g. embedded-system-type projects that are designed for a very specific hardware, or the kind of software that is known to have a short lifespan.

A simple bedrock platform guide based on the IBM PC line:

Some possible criteria for bedrock hardware:

Candidates for bedrock hardware:

Raspberry Pi is an example of a platform that fails the criteria. It depends on a single-manufacturer SoC chip (Broadcom BCM2835) that doesn't have full documentation available. QEMU emulates some versions of the platform to some extent but this emulation does not cover the undocumented parts of the chip (e.g. running the GPU firmware code).

For virtual bedrock hardware, the main criterion is that the specification is simple enough that it can be implemented in a small effort for commonly available computers, and that the specification is unambiguous and frozen.

Even though optimal resource use is not a major point in bedrock platforms, having that as well would be ideal. Not only should it be possible to make minimal-overhead emulators, but to read, ?analyze, ?decompile and recompile the code in order to use it on arbitrary future computers. Writers of bedrock-platform software may want to make sure that it will be easy enough to e.g. separate code from data even when analyzing binaries.

The Maxwell's Equations of Software

Alan Kay has famously described Lisp as the “Maxwell’s equations of software”. He describes the revelation he experienced when, as a graduate student, he was studying the LISP 1.5 Programmer’s Manual and realized that “the half page of code on the bottom of page 13 was Lisp in itself.

Yes, that was the big revelation to me when I was in graduate school—when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself. These were “Maxwell’s Equations of Software!” This is the whole world of programming in a few lines that I can put my hand over.

I realized that anytime I want to know what I’m doing, I can just write down the kernel of this thing in a half page and it’s not going to lose any power. In fact, it’s going to gain power by being able to reenter itself much more readily than most systems done the other way can possibly do.

See also: