The League for Programming Freedom recommends the passage of a law to exclude software from the domain of patents. That is to say that, no matter what patents might exist, they would not cover implementations in software; only implementations in the form of hard-to-design hardware would be covered. An advantage of this method is that it would not be necessary to classify patent applications into hardware and software when examining them.
Many have asked how to define software for this purpose--where the line should be drawn. For the purpose of this legislation, software should be defined by the characteristics that make software patents especially harmful:
- |
Ideal infallible mathematical components
Software is built from ideal infallible mathematical components, whose outputs are not affected by the components they feed into. These ideal mathematical components are defined by abstract rules, so that failure of a component is by definition impossible. The behavior of any system built of these components is likewise defined by the consequences of applying the rules step by step to the components. |
- |
Software can be easily and cheaply copied
There is no need to manufacture each component of a program and assemble them together for each copy ever created. There is no raw material consumption that needs to be taken into account when designing the software duplication process (not counting the few (kilo)jouls of the electricity needed to power the machine manufacturing the copy) so no sophisticated raw material stores and transportation routes are necessary. And finally, there is no need to invent a way how to manufacture the copies each time a new program emerges. |
Following this criterion, a program to compute prime numbers is a piece of software. A mechanical device designed specifically to perform the same computation is not software, since mechanical components have friction, can interfere with each other's motion, can fail, and must be assembled physically to form a working machine.
Any piece of software needs a hardware platform in order to run. The software operates the features of the hardware in some combination, under a plan. Our proposal is that combining the features in this way can never create infringement. If the hardware alone does not infringe a patent, then using it in a particular fashion under control of a program should not infringe either. In effect, a program is an extension of the programmer's mind, acting as a proxy for the programmer to control the hardware.
Usually the hardware is a general purpose computer, which implies no particular application. Such hardware cannot infringe any patents except those covering the construction of computers. Our proposal means that, when a user runs such a program on a general purpose computer, no patents other than those should apply.
The traditional distinction between hardware and software involves a complex of characteristics that used to go hand in hand. Some newer technologies, such as gate arrays and silicon compilers, blur the distinction because they combine characteristics associated with hardware with others associated with software. However, most of these technologies can be classified unambiguously for patent purposes, either as software or as hardware, using the criteria above. A few gray areas may remain, but these are comparatively small, and need not be an obstacle to solving the problems patents pose for ordinary software development. They will eventually be treated as hardware, as software, or as something in between.