Project Fork Definition

A project fork, also called a fork or forking, is the creation of a new branch of a software development project that is independent of the existing project.

Forking usually occurs because of differences in philosophy or incompatible personalities. The people starting the fork typically are dissatisfied with the pace and/or direction of the project, and they often have the goal of replacing it.

The possibility of forking occurring is a characteristic of the free software, also referred to as open source software, development model. This is because, by definition, the source code produced by projects following such model is freely available to anyone to use for any purpose, including modifying, redistributing and starting their own development projects. Source code is the version of software as it is initially written by programmers in a programming language; it is extremely difficult to modify or improve software without the source code.

Sometimes it is said that the possibility of forking is a weakness of the free software development model. One reason is that it appears that it could lead to a great deal of duplicated, and thus wasted, effort. Another is that forks tend to be accompanied by a great deal of bitterness and fighting over issues of legitimacy and design direction, thereby further slowing down the development of the software.

However, the possibility of forking is actually one of the greatest strengths of the free software development model. One reason is that widespread awareness of the possibility of forking and the consequent problems that can result can serve as a strong incentive to achieve consensus and work together cooperatively. Another is that such awareness provides an additional incentive to developers to do outstanding work. In addition, when forking occurs, the possibility exists that it will eventually result in a productive cross pollination, or even a merger, of the branches.

Conversely, the difficulty or inability for forks to occur in proprietary (i.e., commercial) software may be a serious weakness of that development model. It is, of course, much more difficult for forks to occur in proprietary software because the source code is kept secret, and even if it were not, copyright restrictions prevent its unauthorized modification. This is a weakness because there is a reduced incentive to produce truly outstanding software, particularly in the case in which the software has some degree of monopoly power and thus there is relatively little financial incentive to achieve excellence.

An alternative approach in the case of proprietary software is cloning, which can sometimes be used with great success. Cloning refers to copying functions and behavior of a program without copying its source code. The most outstanding example of successful cloning is Linux, which began as a clone of UNIX (which, ironically, was originally free software).

Forking should not be confused with a development branch, which is an officially authorized part of the main project and which may later be folded back into the original source code base. However, sometimes the distinction is not completely clear and the term fork is used in a broader sense to include such branches.

The creation of new distributions (i.e., versions) of the Linux operating system could be considered as forking, although the term evolutionary branch might be more appropriate. This proliferation of versions has been very beneficial because specialized versions are available to suit particular tastes and requirements; however, there is also the disadvantage of compatibility problems in some cases.

A particularly noteworthy fork in the past several years is that which occurred with the X Window System, which is standard system for managing GUIs (graphical user interfaces) on Linux and other Unix-like operating system. The most common variant on Unix-like operating systems was formerly XFree86; however, because the XFree86 project implemented an unpopular change in licensing in February 2004, another organization, X.Org, became the main development branch. Most Linux distributions have switched to it, and it is widely felt that this fork has resulted in a faster pace of technological advance.

Created July 24, 2006.
Copyright © 2006 The Linux Information Project. All Rights Reserved.