Fork (software development)

Fork (software development)

In software engineering, a project fork happens when developers take a legal copy of source code from one software package and start independent development on it, creating a distinct piece of software. The term implies a split in the developer community, analogous to a religious schism.

Free and open source software is that which, by definition, may be forked from the original development team without prior permission without violating any copyright law. However, licensed forks of proprietary software (e.g. Unix) also happen.

Contents

Branching

A kind of internal fork that is standard practice for the development of many software projects is a stable or release branch, modified only for bug fixes, while a development branch develops new features. Such internal forks are usually referred to as "branches".

Etymology

The term "fork" was first used in the sense of "branch" by Eric Allman in 1980, to describe forming branches in sccs:

Creating a branch "forks off" a version of the program.[1]

The term was in use on Usenet by 1983 for the process of creating a subgroup to move topics of discussion to.[2]

"Fork" is not known to have been used in the sense of a community schism during the origins of Lucid Emacs (now XEmacs) (1991) or the BSDs (1993-4); Russ Nelson used the term "shattering" for this sort of fork in 1993, attributing it to John Gilmore.[3] However, "fork" was in use in this sense by 1995 to describe the XEmacs split[4] and an understood usage in the GNU Project by 1996.[5]

Forking free and open source software

Free and open source software may be legally forked without the approval of those currently managing a software project or distributing the software, per the definitions of "free software" copyright license ("Freedom 3: The freedom to improve the program, and release your improvements to the public, so that the whole community benefits") and "open source" ("3. Derived Works: redistribution of modifications must be allowed. (To allow legal sharing and to permit new features or repairs.)").

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.

Forks are considered an expression of the freedom made available by free and open source software, but a weakness since they duplicate development efforts and can confuse users over which forked package to use. Developers have the option to collaborate and pool resources with free and open source software software, but it is not ensured by free software licenses, only by a commitment to cooperation.

Eric S. Raymond, in his seminal 1997 essay The Cathedral and the Bazaar,[6] 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".

In some cases, a fork can merge back into the original project or replace it. EGCS (the Experimental/Enhanced GNU Compiler System) was a fork from GCC which proved more vital than the original project and was eventually "blessed" as the official GCC project. Some have attempted to invoke this effect deliberately, e.g., Mozilla Firefox started as an unofficial project within Mozilla that soon replaced the Mozilla Suite as the focus of development.

On the matter of forking, Eric Raymond says in the Jargon File:[7]

Forking is considered a Bad Thing—not merely because it implies a lot of wasted effort in the future, but because forks tend to be accompanied by a great deal of strife and acrimony between the successor groups over issues of legitimacy, succession, and design direction. There is serious social pressure against forking. As a result, major forks (such as the Gnu-Emacs/XEmacs split, the fissioning of the 386BSD group into three daughter projects, and the short-lived GCC/EGCS split) are rare enough that they are remembered individually in hacker folklore.

It is easy to declare a fork, but can require considerable effort to continue independent development and support. As such, forks without adequate resources can soon become inactive, e.g., GoneME, a fork of GNOME by a former developer, which was soon discontinued despite attracting some publicity. Some well-known forks have enjoyed great success, however, such as the X.Org X11 server, a fork from XFree86 which gained widespread support from developers and users and notably sped up X development.

More recently, the use of distributed revision control (DVCS) tools has made the term "fork" less emotive. With a DVCS such as Mercurial or Git, the normal way to contribute to a project is to first 'fork' the repository, and later seek to have your changes integrated with the main repository. These tools have been designed to make creating, maintaining and merging branches (internal forks) much easier than with a centralised VCS, and in so doing they eliminate the difference between a branch and a fork from the point of view of the VCS tool. In addition, sites such as Github, Bitbucket and Launchpad provide free DVCS hosting with very easy-to-use support for this kind of forking, so that the technical, social and financial barriers to forking a source code repository are massively reduced. While forking the community necessarily remains costly and painful, having many forks of the source code has become a more natural and accepted part of the development process (blurring the distinction between forks and branches).

Usually, forks restart from version 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 of the original project, in which case, for example, forked version 5.2 is compatible with version 5.2 of the original software (as it happens in the case of MariaDB and MySQL as of 2011).[8]

Forking proprietary software

In proprietary software, 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 version, or versions for differing operating systems, such as a wordprocessor for IBM PC compatible machines and 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 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 — all derived from AT&T Unix and all called "Unix", but increasingly mutually incompatible.[9] See UNIX wars.

The BSD licenses permit forks to become proprietary software, and some say[who?] that commercial incentives thus make proprietisation almost inevitable. Examples include Mac OS X (based on Nextstep and FreeBSD), Cedega and CrossOver (proprietary forks of Wine, though CrossOver tracks Wine and contributes considerably), EnterpriseDB (a fork of PostgreSQL, adding Oracle compatibility features), Fujitsu Supported PostgreSQL with their proprietary ESM storage system, and Netezza's proprietary highly scalable derivative of PostgreSQL. Some of these vendors contribute back changes to the community project, while some keep their changes as their own competitive advantages.

Other notable forks

A timeline chart of how Linux distributions forked.
  • Most Linux distributions are descended from other distributions, most being traceable back to Debian, Red Hat or Slackware. Since most of the content of a distribution is free and open source software, ideas and software interchange freely as is useful to the individual distribution. Merges (e.g., United Linux or Mandriva) are rare.
  • The game NetHack has spawned a number of variants using the original code, notably Slash'EM, and was itself a fork of Hack.
  • OpenSSH was a fork from SSH, which happened because the license for SSH 2.x was non-free (even though the source was available), so an older version of SSH 1.x, the last to have been licensed as free software, was forked. Within months, virtually all Linux distributions, BSD versions and even some proprietary Unixes had replaced SSH with OpenSSH.
  • Oracle's purchase of Sun Microsystems soon resulted in the forking of LibreOffice from OpenOffice.org, and MariaDB from MySQL, due to concerns about Oracle's commitment to open-source development.

References

  1. ^ Allman, Eric. "An Introduction to the Source Code Control System." Project Ingres, University of California at Berkeley, 1980.
  2. ^ Can somebody fork off a "net.philosophy"? (John Gilmore, net.misc, 18 Jan 1983)
  3. ^ Shattering -- good or bad? (Russell Nelson, gnu.misc.discuss, 01 Oct 1993)
  4. ^ Re: Hey Franz: 32K Windows SUCK!!!!! (Bill Dubuque, cu.cs.macl.info, 21 Sep 1995)
  5. ^ Lignux? (Marcus G. Daniels, gnu.misc.discuss, 07 June 1996)
  6. ^ Eric S. Raymond (Last-Modified: Thu, 15 Aug 2002). "Promiscuous Theory, Puritan Practice". http://www.catb.org/~esr/writings/cathedral-bazaar/homesteading/ar01s03.html. 
  7. ^ Forked (Jargon File), first added to v4.2.2, 20 Aug 2000)
  8. ^ http://programmers.stackexchange.com/questions/31551/forked-a-project-where-do-my-version-numbers-start
  9. ^ Fear of forking - An essay about forking in free software projects, by Rick Moen

External links


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Look at other dictionaries:

  • Fork (disambiguation) — A fork is a utensil for eating and cooking.Fork may also refer to: * Pitchfork, a tined farm implement used to lift hay and perform other tasks * Tuning fork, a vibrating device used to tune musical instruments * Fork (chess), a situation in… …   Wikipedia

  • Fork — For other uses, see Fork (disambiguation). Assorted forks. From left to right: dessert fork, relish fork, salad fork, dinner fork, cold cuts fork, serving fork, carving fork …   Wikipedia

  • Fork bomb — The concept behind the fork bomb – the processes recursively fork until a denial of service or a crash occurs In computing, the fork bomb is a form of denial of service attack against a computer system which makes use of the fork operation (or… …   Wikipedia

  • Development of Windows Vista — This article is part of a series on Windows Vista New features Overview Technical and core system Security and safety Networking technologies I/O technologies Management and administration Removed features …   Wikipedia

  • Software patent — Computer programs, software and patent law Topics …   Wikipedia

  • Free and open source software — FOSS redirects here. For the K 8 science curriculum, see Full Option Science System. Free and open source software (F/OSS, FOSS) or free/libre/open source software (FLOSS) is software that is liberally licensed to grant users the right to use,… …   Wikipedia

  • List of software that supports Office Open XML — Office Open XML Office Open XML file formats Open Packaging Conventions Open Specification Promise Vector Markup Language Office Open XML software Comparison of Office Open XML software Office Open XML standardization This is an overview of… …   Wikipedia

  • Comparison of open source software hosting facilities — A source code repository or source code escrow[citation needed] is a file archive and web hosting facility where large amounts of source code are kept, either publicly or privately. They are often used by open source projects and other multi… …   Wikipedia

  • Branching (software) — For other uses, see Branching (disambiguation). Branching, in revision control and software configuration management, is the duplication of an object under revision control (such as a source code file, or a directory tree) so that modifications… …   Wikipedia

  • Comparison of revision control software — The following is a comparison of revision control software. The following tables includes general and technical information for notable revision control and software configuration management (SCM) software. This is an incomplete list, which may… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”