Lawyers have successfully managed to argue that computer programs are not mathematics and thus should not be covered by the exclusion of mathematics from patentable material. This comes from a deep misunderstanding of how computers really work – particularly as implementations of a universal turing machine. Some great papers on this have been written – including this one at groklaw. That explains in detail how computers really work and why all computer programs are simply mathematical functions – and even why all mathematical functions are really just numbers.
A great quote from it is this one: “Programming a computer is, essentially, just discovering a number that suits the programmers wishes”.
The thing is – for somebody whose only understanding of computation theory is even that paper- this will seem like a bit of a leap. After all the process of writing code is creative, involves design and innovative thinking – surely this wonderful process cannot just be “discovering a number” – after all – you can do that just by counting – this is WHY it’s unpatentable…
What I want to do with this post is to – very simply – explain why that really is true. I’m going to give you a very simple computer program. I’ll write it in pseudocode so non-programmers can read it, but it can be implemented easily in any programming language and run – and in most of them will take less than about 10 lines of code to do:
Make the vairable X equal to 0;
Start a loop here:
Write the binary representation of X into a new file.
increase X by 1
continue the above loop until the program is interrupted by deliberately killing it (an infinite loop);
With this simple program – I can create an exact copy of every single program ever written and – this is important – every single program that CAN ever be written.
This is because any compiled program becomes a file filled with zeros and ones – to a computer, that’s just a big number (the whole computation theory and lambda calculus etc. that explains how a number can BE an algorithm is needed to know how this happens – but the important thing is – it’s a number). This program will store every number that can exist into a file – by just counting.
The process is very ineffective for a few reasons: firstly almost every program it produces won’t run, the vast majority of numbers do not correspond to useful programs – in fact only an incredibly small subset of them do – but they are still numbers you can count to, and they are still numbers my program WILL produce. Secondly there is no real way to determine the useful programs from the ones that aren’t- you have to manually try to run all of them – and see for yourself what happens. More-over for every program in there, you’ll produce thousands of copies – some that will only run on other computers than yours. But somewhere in there will be a full version of Microsoft OutLook that can run on your computer… if you run it long enough at least.
Another inefficiency is that it creates every program as one self-sustained entity – as it ends up in memory, but programs aren’t sold like that. Programs have many parts that are identical between them (just like the number 105 and the number 316 both contain the number 1 – just one a much bigger scale) – it’s smart to store these in separate files so multiple programs can use them – it saves disk space, but it doesn’t change the number that actually goes into memory when it is run, it merely stores it more efficiently by avoiding replication.
The process is fully doable however, it would take a massive amount of time to discover just the subset of numbers that correspond to a runnable program – let alone the ones inside that do anything useful – and of course since you’ll also be generating every virus program ever – the process is likely to be rather harmful to your computer.
So indeed, you CAN discover every computer program ever written, and every computer program that WILL ever be written just by counting – just like you can do any multiplication sum by adding up numbers repeatedly. But it’s a very crude an ineffective way of doing it, learning multiplication saves a lot of time and effort for the same result, but even though it’s a faster process- ultimately it is STILL just adding up repeatedly.
Programming in the end is a technique whereby we can very efficiently narrow down onto the numbers that are truly useful, we use principles of engineering and mathematics to skip the addition and multiply directly as it were – going straight to the number we are looking for. In fact it’s not a perfect process – that’s why all programs have bugs – we don’t get to exactly the perfect number for the program we want – we get to a number that’s so close however as to make no difference. Somewhere in there is the number that will be the perfect bug-free version of the program. The counting way could find it (but will be hardpressed proving it did) but the programming methods won’t – the closer you get the harder it gets to narrow down, the very same things that make programming a much more efficient way than counting to find useful software, also makes it’s results slightly less perfect. It’s sort of like calculating the value of Pi, the longer you go on – the more accurate your answer becomes but you never quite get there and the cost of one more digit of accuracy must eventually be higher than the value of having it.
So there you have it – not only is every program a number – they are all simple integer numbers that can be counted, and all the great skill and artifice of the programmer is really just a much more efficient way of finding the number we want – rather than counting through them all and checking if it is the one we want (which could take centuries to be honest).
You cannot ask for a more simple piece of proof that a program is in fact a number – that software is discovered rather than invented. The fact that we have very effective methods of discovering them does not change this and doesn’t change that you should not be able to patent numbers.
I still highly recommend reading the article I linked – especially if you are a lawyer or activist involved in the software patent field as it explains the underlying theories very clearly. Effectively it tells you how it came to BE that these numbers are useful, and how we derive their particular useful meaning from them. That process of derivation is what computer hardware does, and a better tool to do that with is patentable (which is why you should indeed be able to get patents on computer hardware), but go in with this basic understanding. That every computer program really is just a number, that those numbers can be reached by simple counting – I’ve proven this to you here, and all of computer programming – as wonderful and delicious and artistic a field of endeavor as it is – is really in the end – just a faster way to count to a number that we like.
This does not reduce from programming any of it’s artifice, if anything it adds to the merit of the field because the processes by which we count are complex and fantastic and beautiful and we are always looking at ways to count even more effectively so we invent new programming languages and ideas like agile programming to help us do it even better – but in the end, the results is just a number that anybody could have counted to – and that is NOT an invention you can patent.
UPDATE: Something I didn’t make clear above but which is important – is that you will generate not only every program that can exist but every FILE that can exist. This includes for example if you read them all as .jpg – every digital photograph – photoshop’d or not that can be taken. A digital camera is just a very efficient way to get to the number that represents a picture – it’s still art. Photoshop is a way to manipulate that same number with small algebraic changes to get to one very near it, but slightly different – it’s still art. This is why I say that this reality doesn’t reduce programming’s artistic and creative status. If you read them all – every text file that can exist is in there too, from the bible to Shakespeare’s Macbeth. But it also includes about a million numbers right NEXT to the one with Shakespeare’s Macbeth which differ only in that an A on line 6000 has been replaced by a Z for example. Again – authors seem to be real artists for finding the “magic number” without counting and checking every possible variation – indeed for doing so long before we had the mathematical knowhow to turn something like MacBeth into a number and back again. The PDF versions are in there too. Every music file, the mp3 compressed ones and otherwise. Every news report and every youtube video will get generated.
It will also be damn near impossible to find anything in there by looking manually – you’d have to study each number just to figure out if you should run it, try to boot it or open it in a video player ! What’s worse there’s real CPU specific stuff in this approach – the 64-bit version of outlook will be a very different (literally – an order of magnitude different) number from the 32-bit version of the same program.
The nice thing is that if you find the right source* file number, you can generate all the possible binary file numbers from it. You’d need to wade through a few thousand ones just like with MacBeth that are almost but not quite right – except for one altered or missing character somewhere.
So programmers focus on finding the the magic number for the file with the source code – because find that one, and you can jump straight to any of the executables magic numbers with a single calculation which we call “compiling” . See what I mean by “a much more efficient way to count to a useful number” ?
*Text files, executable, source code, pdf’s all files in fact are saved as just one gigantic number on a computer. The computer just follows a set of rules to make sense of them. The exact rules differ between architectures – on an 8-bit computer if you tell it that the file is “text” it will read every 8 digits, take that as a number by itself and find a corresponding letter from a chart (known as the ascii set), on 32-bit and higher computers it reads more – and can refer to longer and more complete charts like unicode – but ultimately – what gets saved on the disk is still just one big number. Here-in lies the secret to what lets the “universal Turing machine” actually work – software is data.
-
pygorex1
-
lous39


