In computing applications, a project fork is a situation where a particular aspect or feature of an established software product is used as the basis for creating a new product that is geared toward applications that are not the focus of the original software. The creation of project forks is a common occurrence, and may take place using open source or free software. There are also examples of a project fork project that came into being by using some aspect of a proprietary software product.
Within the process of software engineering, there is the constant development of new software packages that meet a growing range of consumer needs. Often, existing software provides the inspiration for these new products. One or two features of a current software package may form the basis for a new product. In this scenario, it is said that the new software "forked" or branched off of the preexisting software product. The new project fork seeks to enhance the appeal of those borrowed features, as well as add new features that are not present in the original software offering.
The use of open source software for the creation of a project fork is relatively simple. There is no need to secure permission from the original developer, nor any requirement to collaborate with the developers of the originating software in any manner. However, it is not uncommon for the developer of a project fork to interact with the original developers, sometimes to the point of working on the project fork together. However, this level of communication and collaboration is completely voluntary and is not a requirement when free software is involved.
With proprietary software applications, creating a project fork is normally conducted by whatever entity holds the license on the original software. However, it is possible for an independent developer to enter into a contractual agreement that allows limited use of licensed software in the development of the branch or fork. More commonly, the company controlling the original software will simply make use of in house resources to develop the project fork, and maintain full control of the license. This approach is often employed when developing new and more feature rich versions of proprietary software, or creating companion software packages that will work with the original software.
It is possible that a project fork may lead to the development of a software package that eventually overshadows and even replaces the original software. At other times, forks may develop only to eventually be routed back into the original software application and marketed as a new and improved version.