A programming language provides a way of writing programs for computers to run. Unlike natural languages, programming languages are designed to permit no ambiguity and to be concise. They are purely written languages and are often difficult to read aloud. They are generally either translated into machine language by a compiler or an assembler before being run, or translated directly at run time by an interpreter. Sometimes programs are executed by a hybrid method of the two techniques. There are thousands of different programming languages — some intended to be general purpose, others useful only for highly specialized applications.
There are three different types of programming languages: machine language, assembly language, and high-level language. Machine language programs can be executed directly by the computer, but are relatively difficult to write and understand. Assembly language programs and high-level language programs are easier to write and understand, but cannot be executed directly by the computer. For this reason, programs are usually first written in assembly language or a high-level language, and then translated into machine language so that they can be executed on the computer.
Programs are typically distributed in machine language form. Machine language programs do not have to be assembled or compiled by the user; they are ready to be loaded into the computer and executed. In addition, distribution in machine language form has the side effect that it is difficult for others to look at the program code and understand how the program works. This can help to keep secret those elements which give the program a competitive advantage.
The "decompilation" issue has arisen because efforts to translate a machine language program back into a more understandable form, such as assembly language or high-level language, may be a copyright infringement because the translation process would involve the making of an unauthorized copy or derivative work. Legal scholars are divided on the question of whether this activity can be excused under the provisions of Section 117 or Section 107 of the copyright law.
Two terms are used to refer to the process of translating a machine language back into a more readable form. Disassembly is the process of translating a machine language program into an assembly language program; recompilation is the process of translating a machine language program into a high-level program. One issue in the policy debate has been the feasibility of recompilation. There are currently no commercially available decompiler. It appears that the term ‘recompilation,’ as it is used in the policy debate, encompasses disassembly and any other procedure by which a machine language program is translated into a more understandable form. There area number of disassembler programs available on the market. Translating a machine language program into assembly language is much easier than translating it back into a high-level language.
One view is that limits on recompilation are required in order to encourage the development of original programs. Those who take this position argue that recompilation significantly lowers the cost of implementing “clone” programs. They claim that the original program is decompiled, altered to disguise the copying, and marketed. The clone program can then be sold at a lower price, taking away market share from the original developer, and reducing incentives for the development of new programs.
Others argue that recompilation is a difficult and time-consuming process that does not significantly reduce the cost of developing clone programs. A large disassembled program takes a great deal of effort to understand. In addition, they emphasize that recompilation is required for a variety of other purposes, many of which have a less direct impact on the developer of the program being decompiled.
- Japan Law No. 48 of 1970, Art. 10(3)(1).
- "Overview" section: Finding a Balance: Computer Software, Intellectual Property, and the Challenge of Technological Change, at 6.