by Niall Douglas. Last updated . This page has been accessed 43,619 times since the 21st November 2003.
|View this page in:||English||Any language:
Translation to non-English languages provided by Google Language
You are connecting to the IPv4 version of this website from the IP address 18.104.22.168. You can try the IPv6-only version if you want.
This page is an
attempt to specify why I do not consider computer software to be speech
nor software to be merely the algorithms it contains. The consequences of
this are far reaching - much of the GNU philosophy is undermined
(especially the GPL), software patents look even worse than before and the
use of copyright law to protect computer software becomes obviously a poor
We need a complete overhaul of Intellectual Property law for anything which can be wholly represented within a computer eg; computer software, music, video, books etc. Computers can copy data upon them for near-zero replication cost and thus enable a hitherto unknown paradigm of data plentifulness whereas before there was data scarcity. Attempting to enforce data scarcity in a world where that just doesn't exist anymore proves that current IP law has been made obsolete by computer technology - and this includes computer programs themselves.
If you have difficulty with the below, please refer to the logic of Wittgenstein & Bertrand Russell and Geoffrey Chew's bootstrap synthesis of quantum mechanics. The Web Of Life by Fritjof Capra is also recommended. I'm also no formally trained logician, so the below is not framed very formally and I'm sloppy with my language - but I don't think I've made any typing errors - my assertions are correct. Feel free to email me if you think I'm wrong.
1. Computer software is more than the algorithms it contains:
: Maths here is pure maths (algorithms), not formal specification - which is in fact computer software as we shall shortly see. Maths is an abstract concept unrelated to physical laws of the universe.
If you disagree with (iii), how do you execute the bubble sort algorithm? In maths (I've forgotten the symbols) it goes like: for each item indexed I in sequence, if item[I] is smaller than item[I+1] swap. Iterate until no swaps made.
Functionally written in Haskell, it would be something like:
bubble  = (, False) bubble [x] = ([x], False) bubble (x:xs) = let (y:ys, changed) = bubble xs in if x > y then (y:x:ys, True) else (x:y:ys, changed) bsort ws = let (zs, changed) = bubble ws in if changed then bsort zs else zsYou're probably thinking that's identical - however it's not. If a human executes the bubble sort algorithm, they are filling in typing gaps eg; is X smaller than Y? What is an X and what is a Y? Computer software is algorithms plus context ie; how to apply the algorithm ie; software is contextualised algorithms. No matter how high-level a functional language can get (and Haskell is about as far as it currently goes), all implementations of an algorithm must be contextualised to run unaided ie; execute without a human. We programmers supply that contextualisation without even thinking about it because we know what types Haskell knows already about and if it doesn't, what extra contextual information which needs adding.
What is context? Context is how algorithms are related to each other. If you extend the self-referential model sufficiently (eg; defining everything), you get computer software. It has now though become more than the mere sum of its parts ie; the aggregate has extra value through being an organised aggregate of parts ie; its organisation or set of relations between the parts is the +1 factor.
2. Computer software is not speech
On point (i) what is speech? Speech is a function of a human ie; what (a) our voice boxes can produce (b) our language abilities permit (c) our minds perceive. Thus speech's type is a very tiny subset of information and furthermore is of a different class to information as speech is a form of communication, and communication requires a sender & receiver.
What is maths? Maths is eternally true. "IA" is a subset of "NIALL" irrespective of language, humans, the universe or anything at all. It's even independent of the roman alphabet because those letters can mean any symbol. An algorithm is an abstract concept unrelated to physical laws of the universe.
All speech can be expressed in terms of maths - whether as a sound compressed as a mp3 or this very webpage I write to you now. All maths however cannot be expressed as speech - if this weren't so, we'd already have discovered all the maths that can possibly exist. Furthermore, speech is garbage without bringing a human into its referential description plus at least the definition of a sender and receiver. Maths exists no matter what.
Similarly, computer software is eternally true like maths. It's also eternally useful because it can solve a problem without much extra definition - merely that of its CPU. For example, without the rosetta stone we'd never have deciphered egyptian hieroglyphics - yet anyone, even a non-human familiar with number theory, could decode a typical Win32 executable without too much trouble. The repetitive patterns obvious from opening it in a text editor just make it too easy.
Therefore, computer software represented in a human language is incomplete ie; has lost its eternal truthfulness and so therefore computer software is more than speech - therefore, not speech. If you want any better proof of this, try explaining the algorithms behind quantum mechanics in English - no diagrams nor special non-common words, just ordinary English - I think you'll find it pretty tough.
Some more assertions:
Ok, if all the above is true, then the current state of computer software is bad. The problems:
Applied to the bespoke development model (less than two thirds of total):
A good proportion of the code is open source, though often with a restrictive license - thus cross-fertilisation of ideas is possible. Unfortunately bespoke implementations being so customised are virtually unknown to outsiders and especially are not publicly available on the internet.
There is good incentive to perform step-change innovation as there's usually a fixed pot of money on entry and thus the income is predictable enough to take risks. Unfortunately, step-change innovation made here is usually lost.
Bespoke production usually requires locality of worker as you spend more time in meetings than writing software - thus sustainability is good. Nevertheless, with the increasing pressure from globalisation to cut costs, the temptation to outsource to the third world will be hard to resist except where military security prevents it.
Applied to the proprietary development model (less than one third of total):
As all code is closed source, it is incredibly wasteful as there is no possibility for cross-fertilisation of ideas nor the ability to reuse implementations & algorithms down to a fine level. Interoperability, a major incentive to reuse code, in particular is crippled to the detriment of all.
There is some incentive to perform step-change innovation as capitalism rewards coming up with a good idea before anyone else.
While there is still some revenue left in this model, it requires scarcity of information to be enforced in order to make money. Since that's been made obsolete, it's doomed in the long-term.
Applied to the GNU General Public License (GPL) licensed model:
As all code is open source, there is excellent potential for cross-fertilisation of ideas but only limited ability for reuse of implementations & algorithms as the GPL forces onerous constraints on any code which uses it. Interoperability is good.
There is little incentive to perform step-change innovation as to do so requires a critical mass of volunteers to agree on a common direction - and the more radical the innovation, the more disagreement. Thus as anecdotal evidence supports, there is little step-change innovation in GPL software (and what projects do perform step-change innovation either struggle miserably or are the result of a large company having found there was no commercial market for their proprietary research). You can call GPLed software development fundamentally convergent1 - it will tend to successfully clone other software but rarely comes up with radical new paradigms2.
GPL software production is mostly dependent on volunteer time, though a sizeable minority is customisation work paid for by commercial entities, usually by an expert. Because the availability of such experts relies more on personal contacts, it will not suffer as heavily from the pressures to outsource - especially for small projects and so long as proprietary software costs so much. Thus, from the face of it, GPL software production is probably medium-term sustainable as the affluence among the elite within which these volunteers reside is likely to continue. However, a major caveat is that the revenue model for GPL software really sucks - you do not get much money back, and the entire model runs permanently at a fiscal loss which is only possible because so many do not want paid for their work. This would change drastically if a severe economic recession like the 1929 one bit. GPL software development, customisation and even support like all forms of open source also is most liable to be outsourced to the third world as it's cheap to become proficient - tools, sources & documentation are all freely available.
: As students of biology know, true creativity only occurs in divergent systems ie; those with a strong random element.
: Where it has come up with radical new software, development under the GPL has to my knowledge inevitably foundered. I don't wish to be nasty, but the GNU Hurd should have been finished years ago and watching AtheOS become Syllable I note that development has strongly veered away from the radical direction of AtheOS back to cloning previously invented ideas, especially from BeOS.
Applied to the Library GNU General Public License (LGPL) licensed model:
[Most of what is said here can also be applied to the BSD or MIT licenses although the LGPL does require enhancements to be returned to the public]
As all code is open source, there is excellent potential for cross-fertilisation of ideas plus excellent availability of implementations & algorithms for reuse down to a fine level. One of the major strengths of the LGPL is the requirement that enhanced (ie; derived) works based on LGPL code must be returned to the public from whence they came - which is only fair as you got something for free.
Similar problems to the GPL exist regarding incentive to perform step-change innovation, though the FreeBSD kernel has markedly out-advanced the Linux one and all the major scripting languages fall under a MIT or BSD-like license. I won't say this categorically, but applications for FreeBSD seem to be slightly more radical than those for other systems. This could be related to commercial funding - there are no hard figures, but from any searching of the web you will note that most commercially funded free software projects do not use the GPL license - usually it's BSD or even freer.
Like the GPL, long-term sustainability is a concern - however, unlike the GPL LGPL & BSD code can be commercialised as we saw notably with Apple MacOS X though there are many other examples. Such commercialisation under a LGPL license in particular would return a great deal of innovation to the communal pool as well as offering a revenue-making potential and thus LGPL code is markedly more long-term sustainable than under any other model.