Unlike many of the visitors and contributors on this site, I am not a lawyer. I am a programmer who found this blog while chasing links across the Internet looking for information on software patents and what has now become one of the most anticipated Supreme Court decisions ever; Bilski v. Kappos. That was almost eight months ago at a time when I held what is probably a common view of software patents among programmers. Specifically, that they are immoral, unfair, and restrictive to innovation and creativity. I have since found that things are not as black and white as they appear and I’d like to share with you the problems as I see them, from a programmer’s point of view.
The communication between lawyers and programmers is admittedly poor. I can’t imagine very many people jumping through all the hoops to become a patent lawyer if they didn’t believe in the power of the patent system to help grow the economy. On the other hand, programmers who are frustrated with declining job security, declining benefits, and declining pay, often turn to leaders in their field, who demonize software patents. Those industry leaders who support software patents are usually the ones doing the laying off, cutting salaries, and outsourcing jobs, so it is understandable that they have questionable credentials when it comes to the opinions of the common programmer. How can we start to heal the wound and repair the damage that has already been done? We need to encourage more communication between the two parties if we are ever to end the “cold war” over software patents.
In my opinion, one of the biggest misconceptions about software patents involves figuring out what they actually cover. Most people are content with reading the abstract and assuming that it tells them everything they need to know. What they don’t know, is that the claims are the part that is most important when considering prior art and granting exclusive rights. Also, you can’t request anything called a “software patent”. What we all refer to colloquially as software patents are actually utility patents on processes. The patent application should include a recommendation for how to successfully manufacture or carry out the patented device or process. Any person who reads the patent, and who possesses ordinary skill in that area, should be able to reproduce the process or invention without much fuss. Enough information must be included to meet these requirements, and it has even been known to happen that patent examiners have requested working demonstrations of devices to verify that they actually work. In the case of software patents, there is usually included a reference to a CPU, memory, a display device, a network, or just a reference to a computer. Sometimes the computers are generic and other times they are specific. There are many stipulations that can prevent a patent from going through, but once it does, the applicant gains exclusive rights over what is in the claims.
Before the lawyers start criticizing me for my one paragraph description of the patent system, realize that I am trying to make one important distinction; software patents aren’t patents on software, they are patents on processes. You may be thinking at this point, “So what? Processes on a computer sound like algorithms to me, and algorithms are just math, and math is protected from being patented, right?” There is a problem with this line of thinking. It is true that math itself is not protected, because it has been deemed (and rightfully so) an abstract idea, but the use of math in other processes and inventions is different. If you or I come up with a useful process that includes a mathematical calculation as one of its essential steps, then that calculation can be patented as part of the process. The important thing to note here is that the math involved must be taken in the context of all the other steps in the process and is only covered by the patent when all the other steps are present.
Also, just because algorithms are processed mathematically by a computer, doesn’t mean the results have any mathematical value. The electrical charges that zip around inside a computer only have value because we assign it to them, not because they have any inherent value of their own. A piece of software is usually not designed to make mathematical calculations for the purpose of obtaining numerical results, but rather to transform information represented numerically into other pieces of information that do have value to us.
A good example would be the spell checker in the word processor I am using. Numerical representations of letters and words are formed when I make keystrokes and are then compared to other letters and words stored in numerical form in a virtual dictionary, but without the knowledge of what those numbers represent both before and after those operations, the numerical results have no meaning. The process of checking words against a dictionary as they are created and then providing suggestions for different spellings does not require a computer, numbers, or any kind of math to be involved, it just happens to when done on a computer. As funny as it would seem to have somebody standing over you with a dictionary performing the exact function of a computerized spell checker, it does go to show that the process doesn’t require a computer to be implemented.
This brings me to my next point. How generalized could the spell checking process be? At what point does it not only preclude any other method of spell checking, but become so broad as to cover things besides spell checking? In our hypothetical scenario, how coarse a level of granularity should be required before a patent could be issued? If you were to make it as generic as possible and only claim a process for ensuring that words are spelled correctly without giving any details such as the use of a dictionary, then you would probably be rejected. If, however, you talk about attaching it to a processor, memory, a display device, a virtual dictionary, and then provide a complicated flow chart for a process that decides how many and what kinds of suggestions to make based on the way the person spelled the word and how close it is to other words, then you might just have a shot at getting through, or so I would imagine. I find it hard to believe that we have perfected the art of spell checking.
Another point to consider is whether or not the computer itself is enough to distinguish the process as having merit for the sake of patentability. In other words, is the hardware specially designed for the purpose of executing the process. Under the Machine or Transformation test (MoT), set out by the Court of Appeals for the Federal Circuit, the process must be tied to a particular machine (not a general purpose computer), or transform an article into a different state or thing. Clearly, things like specialized medical equipment would qualify as a particular machine, but what about the software that we use on our computers everyday? What does it mean to transform an article into a different state or thing? This is a good opportunity to reexamine the meaningless results of mathematical calculations in computers. Since everything is reduced at some point to numbers that are only symbolically significant to a person who knows what they are supposed to mean, then how do you decide which numbers, and which data are to be considered articles? And what does it mean to transform them?
I haven’t exhausted every resource trying to find the answer, but that may be because the only real answer is in the hands of the Supreme Court. Even a cursory glance around the internet will show that many decisions made after the Machine or Transformation test was adopted have been all over the board on interpreting this rule. Are articles restricted to only physical objects? Information that represents physical objects? Or just information in general? You may be asking yourself how a programmer, or patent examiner, is supposed to make sense of this mess when even the courts have had their hands full with it. I honestly don’t have an answer to that, except to say that the Supreme Court decision will hopefully clear things up in one way or another. It is extremely unlikely that they will leave things exactly as they found it after spending this much time looking at it.
At this point it would be easy to throw our arms up and say “what a mess; can’t we just do away with software patents like they did in Europe and clean our hands of the whole thing?” I’m going to tell you why that would be a bad idea. First of all, this decision is going to affect much more than just the software industry. Second, dealing with the patent system is like sorting garbage. It would be tempting to just give up every time you see a banana peel in the plastics bin, but at the end of the day you know the right thing to do is to sort out the garbage. There is no doubt that the system is being exploited and that there are a lot of bad software patents out there. What we should be doing however is looking at the specific issues in order to decide how we can fix the system rather than throwing it all away. Lets examine a few of the issues now.
First, all patents last the same amount of time, and in our modern society, that is simply unacceptable for many industries. As Gene and others have pointed out recently and in the past, some patents are the result of over a decade of research and millions or billions of dollars in investment. Is twenty years (less when you consider all the bureaucracy), really enough? I have issues that I won’t get into here with pharmaceutical companies, but the cold hard fact remains that people aren’t going to invest money if they feel like they are going to lose it, and patents are one of the best ways of protecting that investment. Software on the other hand is usually created very differently. Not only do many software systems become obsolete quickly, sometimes even before the patent issues, but most of it is developed at very low cost and at a rapid pace compared to other products.
It is easy to see several problems here. The United States Patent and Trademark Office (USPTO) takes to long to inspect and issue software patents, mostly due to lack of funding, and when they do issue, they last for to long. These problems could be solved if patent on software were expedited and had their lengths reduced. Practically speaking, few people who hold software patents or who have an immediate interest in acquiring one are going to petition to have their lengths reduced, but sometimes compromises have to be made for there to be progress. A solution like this is subtle, and might actually have a chance of succeeding, as opposed to the all or nothing demands to remove them completely.
Second, most patents are treated pretty much the same. No respect is given to the different ways that software is developed. While it is true that there are large companies like Microsoft and Apple that invest a lot of time and money in their software, they don’t represent the majority of software development very well. Most software isn’t sold in a store. Most software that is produced is either developed in house, or developed on contract for one or more clients. Open source libraries and frameworks are starting to play much larger roles in the development of that software, not to mention the huge volumes of open source programs that are available to the general public. However, because the big companies, which are only a minority player in the big picture of software development, control the majority of the commercial interests, they have the largest say when it comes to patents. Software developers aren’t being represented very well. We need to do more than just protest, and find ways to make our voices heard that will actually count.
Just to give an example of the differences involved in software development, lets look at music. Think about the different ways in which music is created. A handful of large studios produce almost all the commercially available music at a great expense. It is possible to get a hold of the sheet music and lyrics and make a very clear distinction about what it is and what it isn’t. Jazz, on the other hand, isn’t like that. Jazz has an identifiable sound and culture, but the music is created in a much looser manner. A jazz musician will start with a developed sound and then add their own personal style during a performance in order to make it unique and fresh. Most software development is a lot more like jazz than big record label productions. Few programming shops develop their software without building on the work of others, and almost nobody builds their software from scratch, because it just isn’t practical. Some pieces may be licensed for money, while others are the result of a group effort, but very little about the accumulative nature of software development is taken into consideration when it comes to patents. As the saying goes, “If I have seen further it is only by standing on the shoulders of giants.”
We now have to consider a very important question. What should the ultimate goal of software patents be? Encouraging growth in the commercial software industry? Encouraging development of more software? Encouraging growth in software innovation? Unfortunately, unlike some other industries, these things don’t necessarily follow each other. The health of the software ecosystem depends on its diversity. Why do we have so many programs that do the same thing? Software can be very personal, like art. Software spans a very large domain of uses, from medical data processing, to 3D games, to music and photo managers. We need to find a way of balancing the needs of everybody that is involved. We need to encourage commercial investment without inhibiting the natural growth that already exists.
Finally, we have a desperate lack of prior art indexed in any meaningful way for patent examiners and defendants to work with. There are a couple of reasons for this. Unlike the 50’s and 60’s when software teams would destroy whole virgin rain forests in order to print their code to avoid taking up valuable CPU cycles, software today is stored almost exclusively in digital format. In addition, software changes very quickly and computer hardware has a short lifespan compared to traditional forms of storage. If that weren’t enough, most of it is scattered across the world. It is impossible to even know if a particular piece of software exits, much less where or if you can find it. Nobody has yet taken it upon themselves to archive all the software that exists. Aside from the fact that it would be nearly impossible, it would also be prohibitively expensive.
Several problems stem from the fact that we don’t have reliable archiving. First, individuals and companies get patents for things they shouldn’t. If you want to invalidate a patent based on prior art, then the onus is on you to provide it. This extends to more than just providing a reference to the exact process being claimed. Part of the obviousness conditionality for patents involves using prior art to determine if a person of ordinary skill would have found the claims to be natural extensions of what already existed at the time, but because we don’t have a good idea of what is out there, it can be very difficult. Second, patents get issued to different people for the same thing, which isn’t supposed to happen, but because the examiners can’t find anything in the prior art, they have no reason to deny the application. You may find one patent that excludes a process you want to use, strike a deal, and then find out later that somebody else is suing you for the same thing! A thorough database of what is out there and what isn’t would help clear up a lot of problems with software patents, but right now that isn’t very feasible and a different solution must be found.
What are the answers to these problems? I don’t know, but clearly reform is needed. Patents are being issued when they shouldn’t be. Patents are being issued to multiple parties for the same claims. Programmers are not properly represented and software development in general is misunderstood. We have no good way of knowing what is out there and what isn’t. Patents take to long to issue and last longer than they should, which is not reflective of the way the industry works. Should we allow everything to be patented when the current system is so inadequate to handle it? Can Machine or Transformation actually provide meaningful guidelines when it must be generic enough to apply to everything but not specific enough to handle all the issues? Would completely banning software patents cripple the software industry? The Supreme Court has a lot to consider and it will probably be some time before the full effects of their decision are known. In my opinion, an extreme decision in either direction probably won’t be healthy for the future of software.