Seven Laws of Sane Personal Computing

My apologies to all readers who were inconvenienced by the multi-page layout.

All of the Laws, slightly re-worded [1], are here once more.  To view the original pages, click on the numerals.

A sanely designed personal computer system:


I – Obeys operator

The operator shall retain full control of the machine at all times.  In particular, the handling of the keyboard, mouse, and other human interface devices must take absolute priority over all other processing.  The operator shall have the ability to issue commands and receive immediate confirmation of said commands at all times, regardless of system load.


II – Forgives mistakes

Information which entered the machine through deliberate operator action shall never be destroyed or otherwise rendered inaccessible except as a result of deliberate operator action to that end.  No operator action shall lead to the destruction of information unless said destruction is the explicit and sole purpose of the action.  If all non-volatile storage space that could hold full undo-information for operator-initiated actions is exhausted, the operator shall be informed immediately and given the opportunity to explicitly erase unwanted data or connect additional storage devices, thus preventing unintentional information loss.


III – Retains knowledge

Volatile storage devices (i.e. RAM) shall serve exclusively as read/write cache for non-volatile storage devices.  From the perspective of all software except for the operating system, the machine must present a single address space which can be considered non-volatile.  No computer system obeys this law which takes longer to fully recover its state from a disruption of its power source than an electric lamp would.


IV – Preserves meaning

Compilation is to be considered a form of caching, and thus shall happen solely behind the scenes, like all other forms of caching. (See the Third Law.) The machine is to accept no externally-introduced executable code except in the form preferred for making modifications (i.e. source.)   All executable code visible during any kind of debugging session or accessible to the operator in any other way shall also be exclusively of this form.  Nothing residing at any lower levels of abstraction shall be semantically relevant to the machine’s operation.  In effect, the machine behaves exactly like a “hardware interpreter” of a high-level programming language. Note that what the silicon actually does to achieve this is irrelevant so long as no programmer need ever be made aware of just how it does it.


V – Survives disruptions

If the machine encounters an error condition requiring the operator’s intervention, the state of the now-halted process prior to this event shall be preserved, and the operator given an opportunity to correct the error using an interactive debugger and resume execution from the saved-and-corrected state.  The debugger shall display the code which generated the condition — and any other executable code on the system, upon request.  All of the code shall be viewable and editable in the form preferred for modification. (See the Fourth Law.)


VI – Reveals purpose

All of the information contained inside the machine’s storage array (see the Third Law), whether executable or not, shall be accessible at all times for inspection and modification by the operator, in the form preferred for modification.  The operator shall have the ability to modify the functionality of any executable code within the system without cycling power or performing any similar ritual.  No modification of any kind shall be able to render the means for undoing said modification (the keyboard and a spare instance of the built-in debugger) inoperable.


VII – Serves loyally

The machine shall never tell a lie to the operator.  It shall obey all orders given to it through the human interface devices, without attempting to pass judgement on their legality or morality.  The machine shall not put the interests of any third party (including society in the abstract) above those of its operator.


[1] In particular, the distinction between “user” and “programmer” is an artifact of our presently barely-programmable and barely-usable computing systems.  I would like to use the neutral word “operator” instead.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav 2 Comments

Seventh Law of Sane Personal Computing

The machine shall never tell a lie to the user/programmer. [1]  It shall obey all orders given to it through the human interface devices, without attempting to pass judgement on their legality or morality.  The machine shall not put the interests of any third party (including society in the abstract) above those of its user/programmer.

If you don’t understand why, read this.  Then read it again.

“The ‘you don’t own your computer’ paradigm is not merely wrong. It is violently, disastrously wrong, and the consequences of this error are likely to be felt for generations to come, unless steps are taken to prevent it.”

On first glance, this law would appear to follow from the Sixth Law — a computer which is thoroughly inspectable and modifiable could hypothetically be cleansed of all undesirable (owner-betraying) functionality.  However, I think that this would be much the same as saying that a mine field is a great place to dance if you’ve remembered to bring a metal detector.

Personal computer operating systems known to obey this law:

For the most part, all of the non-Microsoft offerings.  This is changing.  Distributing a computer system compliant with this law may soon be against the laws of your country – if it isn’t yet.  [*]

Notes and observations:

[1] One example of such a lie: “though this bit resides on the disk which you own, you cannot flip it.”

See also Richard Stallman’s classic essay on the subject.

Also recall that if there is any reason to doubt the loyalty of one component of the system, there is reason to doubt all of them.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav No Comments

Sixth Law of Sane Personal Computing

All of the information contained inside the machine’s storage array (see the Third Law), whether executable or not, shall be accessible at all times for inspection and modification by the user/programmer, in the form preferred for modification.  The user/programmer shall have the ability to modify the functionality of any executable code within the system without cycling power or performing any similar ritual.  No modification of any kind shall be able to render the means for undoing said modification (the keyboard and a spare instance of the built-in debugger) inoperable.

Personal computer operating systems known to obey this law:

1 (and many others) [*]

Notes and observations:

Any 1980s micro equipped with a ROM debugger technically qualifies, though not usefully.

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav 1 Comment

Fifth Law of Sane Personal Computing

If the machine encounters an error condition requiring the user’s manual intervention, the state of the now-halted process prior to this event shall be preserved, and the user given an opportunity to correct the error using an interactive debugger and resume execution from the saved-and-corrected state.  The debugger shall display the code which generated the condition — and any other executable code on the system, upon request.  All of the code shall be viewable and editable in the form preferred for modification. (See the Fourth Law.)

Personal computer operating systems known to obey this law:

1 [*]

Notes and observations:

If you intend to comment to say that this is impossible, spare your keyboard the wear – because my copy of Symbolics Open Genera does this today.

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav 1 Comment

Fourth Law of Sane Personal Computing

Compilation is to be considered a form of caching, and thus shall happen solely behind the scenes, like all other forms of caching. (See: the Third Law.) The machine is to accept no externally-introduced executable code except in the form preferred for making modifications (i.e. source.)   All executable code visible during any kind of debugging session or accessible to the user/programmer in any other way shall also be exclusively of this form.  Nothing residing at any lower levels of abstraction shall be semantically relevant to the machine’s operation.  In effect, the machine behaves exactly like a “hardware interpreter” of a high-level programming language. Note that what the silicon actually does to achieve this is irrelevant so long as no programmer need ever be made aware of just how it does it.

Personal computer operating systems known to obey this law:

0 (but possibly SEAForth) [*]

Notes and observations:

If you think this is nonsensical, see if this, this, or this will change your mind.  The depth of the lowest semantically-relevant level of complexity in a system matters.

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav No Comments

Third Law of Sane Personal Computing

Volatile storage devices (i.e. RAM) shall serve exclusively as read/write cache for non-volatile storage devices.  From the perspective of all software except for the operating system, the machine must present a single address space which can be considered non-volatile.  No computer system obeys this law which takes longer to fully recover its state from a disruption of its power source than an electric lamp would.

Personal computer operating systems known to obey this law:

1 [*]

Notes and observations:

When you make a deliberate change to the system, the change stays made:  this is the basic reliability we expect of paper and pencil.  And of almost every other tool, save for our computers!

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav No Comments

Second Law of Sane Personal Computing

Information which entered the machine through deliberate user action shall never be destroyed or otherwise rendered inaccessible except as a result of deliberate user action to that end.  No user action shall lead to the destruction of information unless said destruction is the explicit and sole purpose of the action.  If all non-volatile storage space that could hold full undo-information for user-initiated actions is exhausted, the user shall be informed immediately and given the opportunity to explicitly erase unwanted data or connect additional storage devices, thus preventing unintentional information loss.

Personal computer operating systems known to obey this law:

1 (possibly) [*]

Notes and observations:

Requires orthogonal persistence.

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav 1 Comment

First Law of Sane Personal Computing

Assuming physically-intact hardware, the user shall retain full control of the machine at all times.  In particular, the handling of the keyboard, mouse, and other human interface devices must take absolute priority over all other processing.  The user shall have the ability to issue commands and receive immediate confirmation of said commands at all times, regardless of system load.

Personal computer operating systems known to obey this law:

0 (possibly 1[*]

Notes and observations:

Right now, the only part of a standard PC which behaves this way is the power switch.  And I have seen exceptions even here.

To be continued.

[*] Corrections are welcome.

Posted in: Hot Air, Philosophy, SoftwareSucks by Stanislav 4 Comments

“The Internet of the Future”

This picture was posted in a number of places several years ago, but has largely vanished into undeserved obscurity.  With some effort, I unearthed it and now re-post it here.  (If anyone knows its permanent home, please let me know.)

If reports on the latest volley fired in the Net Neutrality Wars are filed under “meaningless political bickering, can safely ignore” in your head, perhaps this will help you put things in perspective:

"The Internet of the Future" (click for full size)

Posted in: NonLoper by Stanislav 7 Comments

Tim Daly on Symbolics Lisp Machines

Tim Daly on Symbolics and the elimination of the Compile-Pray-Debug Cycle:

“The Symbolics machine (its kittens all the way down…) gave me the insight that one of the most important parts of programming is the time it takes to “close the loop”. Start from the point of failure, find the failure in source code, fix the failure, recompile, and re-execute. Measure the time that takes. Call this cycle the OODA loop (after the military acronym).

On a Symbolics machine, the OODA loop takes seconds. In Java it can take many minutes to an hour or more. Common lisp on stock hardware takes about a factor of 10 less than Java. Your OODA loop time may vary.

But the important point is that this OODA loop is a vital measure of how productive a language and its environment can be. By any measure, the Symbolics lisp machine was exceptional.”

In On Lisp, Paul Graham likens the traditional compile/pray/debug cycle suffered by programmers to having a conversation with a friend orbiting in outer space, several light-minutes away. Whereas using a Lisp-style REPL – especially in the form it takes under Symbolics Genera – is like having a normal face-to-face conversation. This results in qualitative differences in just what kind of conversations you are able and willing to have.

Posted in: Lisp, NonLoper, Symbolics by Stanislav No Comments