What is Computer Software?

by . Last updated . This page has been accessed 37,962 times since the 21st November 2003.


View this page in: flag English Any language:
flag Chinese flag French flag German flag Japanese flag Portuguese flag Russian flag Spanish

Translation to non-English languages provided by Google Language

You are connecting to the IPv4 version of this website from the IP address 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 choice.

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:

I assert:

  1. A human or CPU can execute a problem solution in software
  2. Only a human can execute a problem solution in speech1
  3. Only a human can execute a problem solution in maths2
[1]: Speech here means ordinary language as used by an ordinary human with no special training eg; expertise in maths or some academic qualification. See below for why speech is a subset of computer software.

[2]: 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 zs
You'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

I assert:

  1. Algorithms is a superset of speech1
  2. Computer software is algorithms + context
  3. Therefore software is not speech
[1]: The New Elizabethan Reference Dictionary defines speech as: The faculty or act of uttering articulate sounds or words; that which is spoken, an utterance, a remark; a public address, an oration; the language or dialect of a nation etc.; the sounding-quality of a musical instrument, esp. of an organ-pipe.

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:

  1. Computer Software is always a solution to a problem
    Maths is not always a solution to a problem, nor is speech. Therefore, the type of computer software is logically of the same class as a pump or bridge. It is not strictly speaking a tool like a screwdriver because one of those needs a human to define its usefulness, whereas a pump pumps water without needing to define a human - similarly a bridge provides passage. A pump, bridge and computer software can all be fully defined without defining a human - though the tasks they carry out may involve defining a human.

    Therefore, computer software is a self-standing solution to a specific problem.
  2. The primary function of all life is to solve problems
    Plenty more about this in The Web Of Life by Fritjof Capra, but from the bacterium to a human, all life spends almost all of its time solving problems. The difference between a pump and a bacterium is that the latter is (like all life) capable of an inventive step ie; finding a new improved solution to a problem. A pump cannot exceed the boundaries of its design.

    Therefore, life can be defined as anything capable of finding a new improved solution to a problem. This implies that there is cognition in all life (c.f. Margulis, Maturana)
  3. Evolution is aggregating self-standing solutions to a specific problem
    A multi-celled bacterium is a conglomeration of bacteria performing less complex solutions to problems. Even within each bacterium, the symbiotic providers of power are actually even simpler (and much more ancient) bacteria with their own separate genetic code - the mitochondria. Looking at humans, from the invention of fire to the bow & arrow, something non-genetic has enabled the genetically identical homo sapien of 50,000 years ago to do things well beyond previous generations. There are many non-genetic forms of evolution eg; cultural, lingual but one of the most important is improved tools and how to use them.

    Therefore, technology (tool usage) is one of the kinds of non-genetic evolution (see Gregory Bateson's Mind and Nature for a description of the multiple forms of evolution).
  4. The success of an organism is measured by its capacity to evolve/adapt
    On this scale, bacteria are by far the most successful organism. We humans come down the line quite some way. Again, see The Web Of Life for proof of this.

    Therefore, to be most successful, we should maximise our evolution in all non-genetic areas available, a major one of which being technology.
  5. Computer software is an ecosystem
    This may raise some eyebrows - however an ecosystem is any complex chaotic system with a great deal of inter-dependence both within itself and upon external entities - thus the Canadian economy is an ecosystem as itself plus within the US economy which is another ecosystem. Obviously, the planet is also an ecosystem - so is the universe.

    Therefore, many of the properties of ecosystems also apply to computer software.
  6. Evolution within an ecosystem is best served by frequent step-change innovation
    We call step-change innovation difference between species and as is obvious, it doesn't happen too often. However incremental innovation happens much more frequently - thus a man living on top of a mountain has improved lung capacity - see Bateson's Mind and Nature.

    Computer software is an ecosystem which also has step-change and incremental innovation. Therefore to maximise the potential of software (and via this, the human species) we should strongly encourage step-change innovation.

Ok, if all the above is true, then the current state of computer software is bad. The problems:

  1. Massive duplication of production
    The same code is written again, and again and again
  2. There's little incentive to perform step-change innovation
    Or more precisely, it's risky to design radically innovative software
  3. Software production is not currently long-term sustainable
    The economics of software production mean that the cheapest workers in the world are most likely to do the job as the internet makes remote production very easy. Thus, the economics of software production are a concentrated form of globalisation.

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.

[1]: As students of biology know, true creativity only occurs in divergent systems ie; those with a strong random element.

[2]: 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.

blog comments powered by Disqus

Contact the webmaster: Niall Douglas @ webmaster2<at symbol>nedprod.com (Last updated: 10 July 2012 09:31:05 -0400)