HOME

TheInfoList




In
software engineering Software engineering is the systematic application of engineering Engineering is the use of scientific principles to design and build machines, structures, and other items, including bridges, tunnels, roads, vehicles, and buildings. The d ...
, a project fork happens when developers take a copy of
source code In computing Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithmic processes and development of both computer hardware , hardware and ...

source code
from one
software package
software package
and start independent development on it, creating a distinct and separate piece of software. The term often implies not merely a development branch, but also a split in the developer community; as such, it is a form of
schism A schism ( , , or, less commonly, ) is a division between people, usually belonging to an organization, movement, or religious denomination. The word is most frequently applied to a split in what had previously been a single religious body, s ...
. Grounds for forking are varying user preferences and stagnated or discontinued development of the original software.
Free and open-source software Free and open-source software (FOSS) is software Software is a collection of instructions that tell a computer A computer is a machine that can be programmed to carry out sequences of arithmetic or logical operations automatically. ...
is that which, by definition, may be forked from the original development team without prior permission, and without violating
copyright Copyright is a type of intellectual property Intellectual property (IP) is a category of property Property is a system of rights that gives people legal control of valuable things, and also refers to the valuable things themselves. ...

copyright
law. However, licensed forks of proprietary software (''e.g.''
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser Multi-user software is computer software Software is a collection of Instruction (computer science), instructions that tell a computer how to work. This is in contrast t ...

Unix
) also happen.


Etymology

The word "fork" has been used to mean "to divide in branches, go separate ways" as early as the 14th century. In the software environment, the word evokes the
fork In cutlery or kitchenware, a fork (from la, furca 'pitchfork') is a utensil, now usually made of metal, whose long handle terminates in a head that branches into several narrow and often slightly curved tine (structural), tines with which one ...
system call, which causes a running process to split itself into two (almost) identical copies that (typically) diverge to perform different tasks. In the context of software development, "fork" was used in the sense of creating a revision control "
branch A branch ( or , ) or tree branch (sometimes referred to in botany Botany, also called , plant biology or phytology, is the science of plant life and a branch of biology. A botanist, plant scientist or phytologist is a scientist who spe ...
" by
Eric Allman Eric Paul Allman (born September 2, 1955) is an American computer programmer who developed sendmail and its precursor delivermail in the late 1970s and early 1980s at UC Berkeley. In 1998, Allman and Greg Olson co-founded the company Sendmail, I ...

Eric Allman
as early as 1980, in the context of SCCS: The term was in use on
Usenet Usenet () is a worldwide distributed discussion system available on computers. It was developed from the general-purpose Unix-to-Unix Copy (UUCP) dial-up Dial-up Internet access is a form of Internet access Internet access is the ability of ...
by 1983 for the process of creating a subgroup to move topics of discussion to. "Fork" is not known to have been used in the sense of a community schism during the origins of Lucid Emacs (now
XEmacs XEmacs is a graphical Graphics (from Greek Greek may refer to: Greece Anything of, from, or related to Greece Greece ( el, Ελλάδα, , ), officially the Hellenic Republic, is a country located in Southeast Europe. Its population is a ...
) (1991) or the BSDs (1993–1994);
Russ Nelson Russell "Russ" Nelson (born March 21, 1958) is an American computer programmer A computer programmer, sometimes called a software developer, a programmer or more recently a coder (especially in more informal contexts), is a person who creat ...

Russ Nelson
used the term "shattering" for this sort of fork in 1993, attributing it to John Gilmore. However, "fork" was in use in the present sense by 1995 to describe the XEmacs split, and was an understood usage in the
GNU GNU () is an extensive collection of free software Free software (or libre software) is computer software distributed under terms that allow users to run the software for any purpose as well as to study, change, and distribute it and any ...

GNU
Project by 1996.


Forking of free and open-source software

Free and open-source software may be legally forked without prior approval of those currently developing, managing, or distributing the software per both
The Free Software Definition The Free Software Definition written by Richard Stallman Richard Matthew Stallman (; born March 16, 1953), also known by his initials, rms, is an American free software movement activist and programmer A computer programmer, sometimes cal ...
and
The Open Source Definition ''The Open Source Definition'' is a document published by the Open Source Initiative The Open Source Initiative (OSI) is the steward of the Open Source Definition ''The Open Source Definition'' is a document published by the Open Source Initiati ...
: In free software, forks often result from a schism over different goals or personality clashes. In a fork, both parties assume nearly identical code bases, but typically only the larger group, or whoever controls the Web site, will retain the full original name and the associated user community. Thus, there is a reputation penalty associated with forking. The relationship between the different teams can be cordial or very bitter. On the other hand, a ''friendly fork'' or a ''soft fork'' is a fork that does not intend to compete, but wants to eventually merge with the original.
Eric S. Raymond Eric Steven Raymond (born December 4, 1957), often referred to as ESR, is an American software developer, open-source software advocate, and author of the 1997 essay and 1999 book ''The Cathedral and the Bazaar''. He wrote a guidebook for the R ...
, in his essay '' Homesteading the Noosphere'', stated that "The most important characteristic of a fork is that it spawns competing projects that cannot later exchange code, splitting the potential developer community". He notes in the
Jargon File The Jargon File is a glossary __NOTOC__ A glossary (from grc, γλῶσσα / language, speech, wording) also known as a vocabulary or clavis, is an alphabetical list of terms in a particular domain of knowledge Domain knowledge is knowledge ...
: David A. Wheeler notesWhy Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers!: Forking
(David A. Wheeler)
four possible outcomes of a fork, with examples: # The death of the fork. This is by far the most common case. It is easy to declare a fork, but considerable effort to continue independent development and support. # A re-merging of the fork (''e.g.'',
egcs The GNU Compiler Collection (GCC) is an optimizing compiler In computing Computing is any goal-oriented activity requiring, benefiting from, or creating computing machinery. It includes the study and experimentation of algorithm of an ...
becoming "blessed" as the new version of gcc.) # The death of the original (''e.g.'' the
X.Org Server X.Org Server is the free and open-source Free and open-source software (FOSS) is software that is both free software and open-source software where anyone is free software license, freely licensed to use, copy, study, and change the software ...
succeeding and
XFree86 XFree86 is an implementation of the X Window System The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems. X provides the basic framework for a GUI environment: drawing and mov ...
dying.) # Successful branching, typically with differentiation (''e.g.'',
OpenBSD OpenBSD is a security-focused operating system, security-focused, free and open-source, Unix-like operating system based on the Berkeley Software Distribution (BSD). Theo de Raadt created OpenBSD in 1995 by fork (software development), forking N ...
and
NetBSD NetBSD is a based on the (BSD). It was the first open-source BSD descendant officially released after was . It continues to be actively developed and is available for many platforms, including servers, desktops, handheld devices, and s. Th ...

NetBSD
.)
Distributed revision controlIn software development Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. ...
(DVCS) tools have popularised a less emotive use of the term "fork", blurring the distinction with "branch". With a DVCS such as
Mercurial Mercurial is a distributed revision control tool for software developers. It is supported on Microsoft Windows and Unix-like systems, such as FreeBSD, macOS, and Linux. Mercurial's major design goals include high performance and scalability, d ...
or
Git Git () is software for tracking changes in any set of files File or filing may refer to: Mechanical tools and processes * File (tool), used to remove fine amounts of material from a workpiece **Filing (metalworking), a material removal proc ...
, the normal way to contribute to a project, is to first create a personal branch of the repository, independent of the main repository, and later seek to have your changes integrated with it. Sites such as
GitHub __FORCETOC__ GitHub, Inc. is a provider of Internet hosting service, Internet hosting for software development and version control using Git. It offers the distributed version control and source code management (SCM) functionality of Git, plus ...

GitHub
,
Bitbucket Bitbucket is a Git Git () is software for tracking changes in any set of , usually used for coordinating work among s collaboratively developing during . Its goals include speed, , and support for distributed, non-linear workflows (thousa ...
and Launchpad provide free DVCS hosting expressly supporting independent branches, such that the technical, social and financial barriers to forking a source code repository are massively reduced, and GitHub uses "fork" as its term for this method of contribution to a project. Forks often restart version numbering from 0.1 or 1.0 even if the original software was at version 3.0, 4.0, or 5.0. An exception is when the forked software is designed to be a drop-in replacement for the original project, ''e.g.''
MariaDB MariaDB is a community-developed, commercially supported Fork (software development), fork of the MySQL relational database management system (RDBMS), intended to remain free and open-source software under the GNU General Public License. Developme ...
for
MySQL MySQL () is an open-source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source m ...
or
LibreOffice LibreOffice () is a free and open-source productivity software, office productivity software suite, a project of The Document Foundation (TDF). It was fork (software development), forked in 2010 from OpenOffice.org, an open-sourced version of ...

LibreOffice
for .


Forking proprietary software

In
proprietary software Proprietary software, also known as non-free software or closed-source software, is computer software for which the software's publisher or another person reserves some rights from licenses to use, modify, share modifications, or share the softwa ...
, the copyright is usually held by the employing entity, not by the individual software developers. Proprietary code is thus more commonly forked when the owner needs to develop two or more versions, such as a windowed version and a
command line A command-line interface (CLI) processes command (computing), commands to a computer program in the form of lines of text. The program which handles the interface is called a command-line interpreter or command-line processor. Operating systems ...
version, or versions for differing operating systems, such as a
word processor A word processor (WP) is a device or computer program that provides for input, editing, formatting, and output of text, often with some additional features. Early word processors were stand-alone devices dedicated to the function, but current ...
for
IBM PC The IBM Personal Computer (model 5150, commonly known as the IBM PC) is the first computer released in the IBM PC model line and the basis for the IBM PC compatible IBM PC compatible computers are similar to the original IBM PC The IBM ...

IBM PC
compatible machines and
Macintosh The Macintosh (mainly Mac since 1998) is a family of personal computer A personal computer (PC) is a multi-purpose computer whose size, capabilities, and price make it feasible for individual use. Personal computers are intended to be op ...

Macintosh
computers. Generally, such internal forks will concentrate on having the same look, feel, data format, and behavior between platforms so that a user familiar with one can also be productive or share documents generated on the other. This is almost always an economic decision to generate a greater
market share Market share is the percentage of the total revenue or sales in a market Market may refer to: *Market (economics) *Market economy *Marketplace, a physical marketplace or public market Geography *Märket, an island shared by Finland and Swe ...
and thus pay back the associated extra development costs created by the fork. A notable proprietary fork not of this kind is the many varieties of proprietary
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser Multi-user software is computer software Software is a collection of Instruction (computer science), instructions that tell a computer how to work. This is in contrast t ...

Unix
—almost all derived from AT&T Unix under license and all called "Unix", but increasingly mutually incompatible.Fear of forking
- An essay about forking in
free software Free software (or libre software) is computer software distributed under terms that allow users to run the software for any purpose as well as to study, change, and distribute it and any adapted versions. Free software is a matter of liberty ...

free software
projects, by Rick Moen
''See''
UNIX wars 450px, Unix genealogy tree The Unix wars were the struggles between vendors of the Unix computer operating system in the late 1980s and early 1990s to set the standard for Unix thenceforth. Origins Although AT&T Corporation created Unix, by the ...
. The
BSD licenses BSD licenses are a family of permissive free software license A permissive software license, sometimes also called BSD-like or BSD-style license, is a free-software license with only minimal restrictions on how the software can be used, modi ...
permit forks to become proprietary software, and
copyleft Copyleft is the practice of granting the right to freely distribute and modify with the requirement that the same rights be preserved in derivative works created from that property. Copyleft in the form of s can be used to maintain conditions ...

copyleft
proponents say that commercial incentives thus make proprietisation almost inevitable. (Copyleft licenses can, however, be circumvented via dual-licensing with a proprietary grant in the form of a Contributor License Agreement.) Examples include
macOS macOS (; previously Mac OS X and later OS X) is a proprietary {{Short pages monitor *
Modular programming Modular programming is a software design technique that emphasizes separating the functionality of a Computer program, program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the ...
**
Modding ''Modding'' is a slang Slang is language (words, phrases, and usages) of an informal register. It also sometimes refer to the language generally exclusive to the members of particular In-group and out-group, in-groups prefer over the comm ...
*
Custom software Customised software (also known as bespoke software or tailor-made software) is software Software is a collection of Instruction (computer science), instructions and data (computing), data that tell a computer how to work. This is in contrast ...
*
Personalization Personalization (broadly known as customization) consists of tailoring a service or a product to accommodate specific individuals, sometimes tied to groups or segments of individuals. A wide variety of organizations use personalization to improve ...
* Team effectiveness **
Duplicate codeDuplicate code is a computer programming Computer programming is the process of designing and building an executable computer program to accomplish a specific computing result or to perform a particular task. Programming involves tasks such as an ...

Duplicate code
*
ROM Hacking ROM hacking is the process of modifying a ROM image, ROM image or ROM file of a video game to alter the game's graphics, dialogue, levels, gameplay, and/or other elements. This is usually done by technically inclined video game fans to breathe new ...


References


External links


Right to Fork
at Meatball Wiki * A PhD examining forking
(Nyman, 2015)
"Understanding Code Forking in Open Source Software - An examination of code forking, its effect on open source software, and how it is viewed and practiced by developers" {{DEFAULTSORT:Fork (Software Development) Software project management