I was chatting with some friends the other day about patents and software and how the twain should never have become such good friends, when an idea popped into my head about software patents.
Software patents, as you might assume, are patents that cover software. These patents don’t cover a particular implementation of an algorithm or series of algorithms, as one can with a copyright, but instead cover the algorithm itself….implemented on a general purpose computer.
“What, what?,” I hear you saying “but how can this be? Algorithms and math are not patentable in the US.” And while you are correct when you say that math and algorithms are not directly patentable in the US, you have missed a most devious and ridiculous loophole, first allowed by the US Patent Office, and then later perpetuated by the courts. An otherwise unpatentable algorithm, when loaded on to a “general purpose computer“, suddenly becomes part of a patentable whole.
Now I know what you’re thinking: “How can the act of loading the algorithm on to a computer suddenly make it patentable?” And I must agree with you. The fact that software patents have been routinely found legal, shoehorned as they have been into the existing patent law through an idiotic and non-transformative hack, makes me believe that several of the sitting justices are at the very least uninformed about computers and math, and at the worst may be egregiously misinterpreting the law due to a lack of faculties necessary for comprehension of the complex systems about which they are ruling.
(Yes, I just called you dumb, judges. Get over it, then ask your grandchildren to help you learn more about computers. They’re really quite fun and won’t bite. The computers, I mean.)
There are groups of people working to overturn the existing rulings about software patents and to get rid of software patents once and for all, such as End Software Patents, but it would be very nice if programmers could route around software patents today so that we could get real, important work done.
One example of important work would be the inclusion of various patented codecs into Free Software programs such as Gnash and Firefox. The only major hurdle to the direct inclusion of codecs such as Sorenson Spark and H.264 into these programs is that these codecs are covered by one or more software patents. As you may have guessed, the owners of these particular patents aren’t interested in providing Free Software projects — or anyone else, for that matter — with royalty-free, perpetual licenses.
So what do Free Software developers do?
We route around the problem!
Remember that algorithms aren’t directly patentable. What is claimed in all of these software patents is the combination of [algorithm] + [general purpose computer]. We can’t often change the algorithm (e.g. if we need to interoperate with a particular codec), so let’s change the general purpose computer!
Let’s say that we have a program that decodes video codec X. Written in some common language like C or Python, we can easily get the program to run on all kinds of different computer systems. But what if we don’t let it? It would be easy to include some code in our program that prevents the code from running on a general-purpose computer:
CASE: ($MY_SPECIFIC_MIPS_PROCESSOR) decode_with_codec_X(); ELSE: crash();
I’m not sure how the courts envision a general purpose computer, but I believe that no matter how they try to define the term we will either be able to include (artificial) restrictions into our code so that we are no longer infringing, or the courts will have to define a general purpose computer so generally that one could argue that one’s brain falls under the description. Hopefully, if the latter comes to pass, the courts will end this preposterous farce once and for all.
But let’s not hold our breath…