Thinking about coding

This week in the Boston Globe, Mike Orcutt writes about how old arguments over coding as free speech are being revisited.

A First Amendment fight for the future of the internet: Is computer code a form of speech? A case emerging from the wreckage of a cryptocurrency heist is putting that question to the test.

“[For] nearly three decades US courts have recognized software code as protected speech”,

The “crypto wars” were raging in 1995 when I started in PKI (and “crypto” didn’t mean cryptocurrency at that time!).

When Bruce Schneier first published his classic textbook “Applied Cryptography” in 1993, he was prohibited from including a floppy disk containing executable encryption programs. But the First Amendment enabled him to include the C code for the algorithms as appendices in the printed work. As a middle finger to the NSA, the publishers included extra indicia marks to make the pages easier for OCR.

The court ruling that printed human readable code could be distributed but executables could not became known as the “Terrorists Can’t Type” interpretation.

I can see the free speech nuance.

Some high-level programming is highly creative. There can be non-obvious ways to write a program; recursive solutions can be quite sublime for their elegance and the strange intuition needed to draft them. I suspect there might be an infinite number of possible programs to implement most given specifications, so it’s certainly plausible to see programming as a form of expression. [I’m using “program” here to mean code written in a high-level language such as Python, C++ or Lisp].

But OTOH at the machine level, code is literally just a matter of throwing switches. Compiled software in memory connected to a processor looks a lot like a machine; indeed, at that level, there is little or no difference between programmed and wired logic.

I am not a lawyer but as I understand the right to free speech, I am largely free to write a book that describes bomb making for example, but I may not be allowed to make the bomb. So there are differences between text (and thought) and action. We can regulate actions but not thoughts.

Similarly, maybe the action of throwing switches is not protected. That is, compiled machine code is not speech. It’s certainly not the sort of speech that humans freely produce!

Both books and high-level computer programs are capable of being translated into actions.

Books can be read in different ways; a book about making a bomb doesn’t necessarily lead to the bomb being made let alone used. But there is only one intended reader of a computer program — the computer. And it’s only going to read the program one way.