The IT Law Wiki

Introduction

In practical terms, a computer program (also called simply a program) might include anywhere from a dozen instructions to many millions of instructions for something like a word processor or a web browser. A typical modern computer can execute billions of instructions every second and nearly never make a mistake over years of operation.

Large computer programs may take teams of programmers years to write and the probability of the entire program having been written completely in the manner intended is unlikely. Errors in computer programs are called bugs. Sometimes bugs are benign and do not affect the usefulness of the program, in other cases they might cause the program to completely fail (crash), in yet other cases there may be subtle problems. Sometimes otherwise benign bugs may be used for malicious intent, creating a security vulnerability.

Since computers merely execute the instructions they are given, bugs are nearly always the result of programmer error or an oversight made in the program's design. However, computer hardware may fail or may itself have a fundamental problem that produces unexpected results in certain situations.

In most computers, individual instructions are stored as machine code with each instruction being given a unique number (its operation code or opcode for short). The command to add two numbers together would have one opcode, the command to multiply them would have a different opcode and so on. The simplest computers are able to perform any of a handful of different instructions, the more complex computers have several hundred to choose from — each with a unique numerical code.

Since the computer's memory is able to store numbers, it can also store the instruction codes. This leads to the important fact that entire programs (which are just lists of instructions) can be represented as lists of numbers and can themselves be manipulated inside the computer just as if they were numeric data. The fundamental concept of storing programs in the computer's memory alongside the data they operate on is the crux of the von Neumann, or stored program, architecture. In some cases, a computer might store some or all of its program in memory that is kept separate from the data it operates on.

Levels of Programming Languages

While it is possible to write computer programs as long lists of numbers (machine language) and this technique was used with many early computers, it is extremely tedious to do so in practice, especially for complicated programs. Instead, each basic instruction can be given a short name that is indicative of its function and easy to remember — a mnemonic such as ADD, SUB, MULT or JUMP. These mnemonics are collectively known as a computer's assembly language. Converting programs written in assembly language into something the computer can actually understand (machine language) is usually done by a computer program called an assembler. Machine languages and the assembly languages that represent them (collectively termed low-level programming languages) tend to be unique to a particular type of computer.

Though considerably easier than in machine language, writing long programs in assembly language is often difficult and error-prone. Therefore, most complicated programs are written in more abstract, high-level programming languages that are able to express the needs of the programmer more conveniently (and thereby help reduce programmer error). High level languages are usually "compiled" into machine language (or sometimes into assembly language and then into machine language) using another computer program called a compiler. High level languages are sometimes [[interpret[[ed rather than compiled. Interpreted languages are translated into machine code on the fly by another program called an interpreter.

Since high level languages are more abstract than assembly language, it is possible to use different compilers to translate the same high level language program into the machine language of many different types of computers. This is part of the means by which software like video games may be made available for different computer architectures, such as personal computers and various video game consoles.

The task of developing large software systems is an immense intellectual effort. It has proven, historically, to be very difficult to produce software with an acceptably high reliability, on a predictable schedule and budget. The academic and professional discipline of software engineering concentrates specifically on this problem.

Definitions

Australia

A “computer program” is defined as “instructions (whether with or without related information) intended, either directly or after one or both of the following:

a) conversion to another language, code or notation;
b) reproduction in a different material form to cause a device having digital information processing capabilities to perform a particular function.”[1]

Brazil

A “computer program” is “the expression of a set of organized instructions in natural or codified language contained in any medium of fixation, to be used in automatic machines that process information, peripheral apparatus, instruments and equipment based on digital techniques, and to make them function in accordance with and for determined purposes.”[2]

Canada

A “computer program" is defined as “a set of instructions or statements, expressed fixed embodied or stored in any manner, that is to be used directly or indirectly in a computer in order to bring abut a specific result.”[3]

Colombia

“A ‘computer program’ shall mean the expression of an organized assembly of instructions in natural or coded language, irrespective of the media in which it may be stored, the purpose of which is to have a machine capable of processing information indicate, accomplish or obtain a specific function, task or result.”[4]

Indonesia

A “computer program” is defined as “a program specially developed to enable a computer to perform certain functions.”[5]

Japan

A“program” is defined as “an expression of combined instructions given to a computer so as to make it function and obtain a certain result.”[6]

Korea

A “program” is defined as “a set of instructions and commands, to be used directly or indirectly in a computer in order to bring about a certain result, which are expressed in a creative way.”[7]

Malawi

“Computer software” means “a set of instructions, whether expressed in words or in schematic or other form, which is capable, when incorporated in a machine-readable medium, of causing an electronic or other device having information processing capabilities to indicate, perform or achieve a particular function, task or result.”[8]

Malaysia

A “computer programme” is defined as “an expression, in any language, code or notation, of a set of instructions (whether with or without related information) intended to cause a device having a digital information processing compilation to perform a particular function either directly or after either or both of the following: (a) conversion to another language, code or notation; (b) reproduction in a different material form.”[9]

Nigeria

A “computer programme” is defined as a “set of statements or instructions to be used directly or indirectly in a computer in order to bring about a certain result.”[10]

Singapore

A “computer program” is defined as “instructions (whether with or without related information) intended, either directly or after one or both of the following:

a) conversion to another language, code or notation;
b) reproduction in a different material form to cause a device having digital information processing capabilities to perform a particular function.”[11]

Spain

A “computer programme” is “any sequence of instructions or indications intended for direct or indirect use on a computer system in order to carry out a function or a task or for obtaining a specific result.”

Taiwan

A “computer program” “shall mean a set of instructions composed for the purpose of directly or indirectly causing a computer to bring about a certain result.”[12]

Trinidad and Tobago

“Computer software” means “a set of instructions, whether expressed in words or in schematic or other form, which is capable, when incorporated in a machine-readable medium, of causing an electronic or other device having information processing capabilities to indicate, perform or achieve a particular function, task or result.”[13]

United States

A computer program is

a set of statements or instructions to be used directly or indirectly in a computer in order to bring about a certain result."[14]
a set of instructions, rules, or routines recorded in a form that is capable of causing a computer to perform a specific operation or series of operations.[15]
[a] combination of computer instructions and data definitions that enable computer hardware to perform computational or control functions.[16]
the way an algorithm is represented in a form understandable by a computer.[17]

References

  1. Austl. Copyright Act, 1968, §10(1).
  2. Brazilian Law No. 7646 of Dec. 18, 1987, Art. 1.
  3. Canadian Copyright Act, §2.
  4. Colombia Decree No. 1360 of June 23, 1989, Art. 3(a).
  5. Indonesia, Law No. 6 of 1982, as amended by, Law No. 7 of 1987, Art. 1(g).
  6. Japan Law No. 48 of 1970, Art. 2(1)(x bis).
  7. Republic of Korea, Copyright Law, Art. 1(12); Computer Program Protection Law, Art. 2(1).
  8. Malawi, Copyright Act, 1989, (No. 9, of April 26, 1989), Part I (2).
  9. Malaysia, Copyright Law 1987, Art. 3.
  10. Nigerian Copyright Decree 1988, §39(1).
  11. Singapore Copyright Act, 1987, §7(1).
  12. Taiwan Copyright Law, Art. 3(2).
  13. Trinidad and Tobago, Copyright Act 1985, §3(1).
  14. 17 U.S.C. §101.
  15. 48 C.F.R. 252.227-7013(a)(2); DFAR 252.227-7014(a)(3) (full-text).
  16. Defense Acquisition University, Glossary, at B-29 (13th ed. Nov. 2009) (full-text).
  17. At the Nexus of Cybersecurity and Public Policy: Some Basic Concepts and Issues, at 18.

See also


This page uses Creative Commons Licensed content from Wikipedia (view authors). Smallwikipedialogo.png