Requirements for a Democracy
Lincoln described a democracy as the government of the people, by the people,
and for the people. How can a computerized democracy meet these requirements?
Ted Nelson's "Computer Lib" expressed one criterion. He wrote "You can and
must learn about computers, now." He stressed the danger of the computer being
used as an excuse for oppression. Seymour Papert created Logo so that
children would learn to program rather than learning to be programmed by
others. Both argued that everybody must become computer literate. Another
requirement is universal access to the technology. The USA government is now
debating universal access.
Computer literacy and universal access is a necessary condition for a
cybernetic democracy. It is not sufficient. The democratic answer to "Who
watches the watchers" is "We all do." Democratic procedures and decisions
need review. In an automated system, software expresses the procedures and
decisions. In a democracy, the source code must be open to review. So, the
Open Source movement points the way to democratic software.
Some people will object to my proposal for open government source code. I
will tackle some objections next. First, open code is orthogonal to political
arguments about how much government is desirable. Open Source is a principle
of democracy because the people have the right to criticize their government.
Second, open source code should not breach personal privacy. Source code is
not the data. It describes how to classify and process the data. Democratic
policies must not refer to individuals. For example, no democratic act should
double the taxes of the individual with identifier 123-45-6789. If government
software did this, it is wrong. Government source code must be free of
personal data. So, individual privacy does not stop the publication of source
I see no technical problem with making copies of source code available to the public. Source code is in the MIME plaintext family of codes and so compatible with the HyperText Transfer Protocol. Government agencies can easily place copies of the code on the World Wide Web. Anyone with a simple browser in a public library can then read these files and form an opinion about whether they can trust them.
Criminals may want their work to be hidden. Tests cannot show that a program is correct. Suppose I change the software that selects people for a tax audit so that my number never comes up. Nobody is likely to find this out by testing the system! Peer reviews efficiently detect errors like this in industry. Code review is a tool of the Open Source movement. Peer reviews are even part of the academic life. In a democracy, the people are the peers.
Elitist programmers may argue that normal people cannot understand their code. However, I have found that all kinds of people can understand computers. Most can learn to understand code. Many discover the pleasure of finding errors and mistakes in it. When people review my code, "dumb questions" expose my worst bugs. The Open Source movement put it like this: "All bugs are shallow if sufficient eyeballs look at the code." In other words, "A bug can hide from some of the people all of the time and all of the people some of the time, but not all of the people all of the time." Code that we cannot understand needs fixing!
Risky projects in particular should have thousands of critics looking at the
code. I want to study the code of an x-ray therapy machine before submitting
myself to it. Perhaps I should have the right to look at my bank's source
code to see if a Y2K bug will wreck my account.
Things that should be Hidden
So what might remain hidden? There are only three reasons for secret source
code: trade secrets, national security, and personal privacy. Data encryption
keys may be hidden, but encryption algorithms may hide biases and bugs.
Perhaps we should not expose the authors of software to public revenge. Thus,
the names of programmers and encryption keys might be the only parts of open
software that remains secret.
. . . . . . . . . ( end of section Most Software should be Open Source) <<Contents | Index>>