The term clone in a computer software context refers to a program (e.g., an operating system or an application program) that has functions and behavior similar to another program but which does not contain source code from that program.
Source code (also referred to as source or code) is the version of a program as it is originally written (i.e., typed into a computer) in a programming language in plain text (i.e., human readable alphanumeric characters) by a human. It is necessary to have the source code in order to be able to easily study the internals of a program and modify it.
However, it is not necessary to have the source code in order to make a clone of a program. In fact, having access to the source code can be undesirable because it could subconsciously influence a programmer and result in imitation of part of the code rather than creating entirely original code.
A variety of techniques have been developed for cloning software, including reimplementation from official documentation accompanying the software and from unofficial documentation. Reverse engineering becomes particularly important when the documentation is incomplete, which is often the case. Among the ways in which reverse engineering can be accomplished are through observation of information exchange, disassembly using a disassembler and decompilation using a decompiler. A compiler converts source code into machine language, which can be read directly by a computer's CPU (central processing unit); a decompiler attempts to convert machine language back into source code. An assembler is a program that translates an assembly language (which is a very low level language close to machine language) into machine language.
There are several reasons for cloning software. One is that it is a way of avoiding the high licensing fees and severe restrictions on use that typically exist for proprietary (i.e., commercial) software. These include the lack of availability of the source code and prohibitions on reverse engineering, and thus a consequent lack of ability to study, modify or improve the software. A second is that it is a way of making new software that is compatible with existing software. In addition, some programmers regard it as a challenge or a hobby.
Cloning can be legal if there is no violation of the copyright of the original software. There can be no such violation if the source code is not available.
Copyright is the power granted by a government to the creator of a creative work (e.g., the source code for a program, a magazine article, a poem, a painting or a musical composition) that gives that creator the exclusive, although transferable, right to copy or perform that work for a defined period of time. Copyrights do not protect facts, discoveries, inventions, ideas or methods of operation; they only protect the specific way in which they are expressed in any type of medium (e.g., words, drawings, photographs or musical notation).
However, there might also be the murky issue of software patents to contend with. In some cases, patents can be violated even if the source code is entirely original. This is because patents may cover functionality, whereas copyrights cover only wording. There are many complex issues that remain to be resolved with regard to software patents, and whether patents should even be permitted for software remains highly contentious.
MINIX is a clone of UNIX that was written in 1987 for use in computer science classes because of a sudden reversal in policy that prohibited the formerly freely available UNIX source code from being available to students. Linux is a UNIX clone that was developed in 1991 because of the desire for a more powerful operating system than the then widely used MS-DOS to take full advantage of the capabilities of the new Intel 386 processor. It was also written because of the very high licensing fees for UNIX and because of some dissatisfaction with MINIX, including the fact that it lacked some of the features of UNIX and because of its lower but still significant licensing fees.
Linux, MINIX and other UNIX clones are commonly referred to as Unix-like operating systems. Actually, this term is usually used in a broader sense to include all operating systems that have the major characteristics of the original UNIX as originally written by Ken Thompson at Bell Labs in 1969 and as subsequently developed at both Bell Labs and the University of California at Berkeley (UCB), regardless of whether they are clones or have some direct lineage from the original source code.
Clones are generally cheaper than the original software, and in many cases they are free software (i.e., software that is free both in a monetary sense and with regard to use). However, they are not necessarily inferior. In fact, in some cases they are as good as or superior to the originals, as is clearly illustrated by Linux. They also frequently have the benefit of providing competition for the original software, thereby stimulating its developers to improve its performance and features and to lower its price.
In contrast to proprietary software, there is no reason to make clones of free software. This is because, by definition, the source code for free software is freely available to anyone to use for any purpose, including modification and redistribution of such modified versions. Occasionally, there is sufficient dissatisfaction with the way in which a free software program is being developed to result in a project fork, which is the starting of a new development branch independent of the the existing project but based on the same source code.
A second meaning of the word clone in a software context is to make an exact copy of a file, directory or disk inclusive of any files and subdirectories within that directory or disk.
The term is also used in a hardware context. Most notably, when IBM introduced its revolutionary IBM PC in 1981, other companies decided to develop clones as a legal reimplementation from the PC's documentation and through reverse engineering. Because most of the components were publicly available with the exception of the BIOS (basic input output system), the only major task was reverse engineering the BIOS.
The term clone has other meanings in other contexts. It has become widely used in the field of biotechnology in recent years to refer to an organism (i.e., an animal or plant) that is produced asexually (i.e., with only a single parent) from a single cell of its parent and is genetically identical to that parent. Unfortunately, in contrast to software cloning, the results of biological cloning have not been entirely satisfactory to date in that that the cloned individuals have been inferior to their parents, particularly with regard to life expectancies.
Created April 15, 2005. Updated July 29, 2006.