# Fork (développement logiciel)

Un fork (terme anglais signifiant « fourche », « fourchette », « bifurcation », « embranchement ») est, dans le jargon informatique, un nouveau logiciel créé à partir du code source d'un logiciel existant. Son existence découle d’un choix politique venant de visions différentes du projet des différents acteurs qui y participent, un acteur décidant alors de créer cette dérivation pour lui imposer les idées qu’il n’a pas pu soumettre au précédent projet, une forme de schisme.
Les forks sont courants dans le domaine des logiciels libres, dont les licences permettent l'utilisation, la modification et la redistribution du code source. L'Office québécois de la langue française préconise les termes de fourche ou d'embranchement.
Un fork peut être bénéfique pour un projet lorsque sa gouvernance conduit à une impasse, sa reprise par un nouveau groupe pouvant le relancer. Le Fork peut aussi être néfaste en provoquant un éparpillement des ressources.
Un fork peut naître à la suite de divergences de points de vue ou d'objectifs parmi les développeurs, ou encore à la suite de conflits personnels (Ex : Iceweasel sous Debian est un fork de Mozilla Firefox). Les projets parents et dissidents peuvent avoir des rapports amicaux (fork amical) ou bien conflictuels (fork inamical). Quels que soient les rapports entre les deux projets, les licences de logiciels libres permettent l'emprunt de code d'un projet par l'autre. Ainsi, les différents BSD s'empruntent régulièrement du code, car ils partagent la même licence.
Une illustration de la régulation des projets libres par ce moyen est l'apparition d'au moins trois forks libres pour le projet SourceForge à l'issue de la « dérive de SourceForge » :
* Gforge,
* Debian SF,
* GNU Savannah,
* Codendi,
* et d'autres qui ne sont plus maintenus.

## Spork

Il existe une autre catégorie de fork, qui porte le nom de « spork ». Ce type de fork est créé à la suite de problèmes relationnels avec le mainteneur (le responsable) d'un paquet logiciel qui refuse de se conformer au rôle classique du mainteneur. Par exemple, il refuse d’intégrer des corrections tout à fait valides ou de nouvelles fonctionnalités sans en donner la raison. Le spork consiste à prendre le code source du projet en amont et à lui appliquer les patchs légitimes rejetés par ce dernier.
Un spork permet de partager l'effort de maintenance en aval du projet. Au lieu que chaque distribution maintienne indépendamment un ensemble de patchs à appliquer au projet amont, elles peuvent ainsi partager l'effort en créant un projet intermédiaire qui rassemble les patchs communs, il ne reste alors plus aux distributions qu'à gérer les patchs spécifiques à leur propre distribution.
Ce fut le cas notamment de projets comme :
* eglibc, un spork de la glibc, qui intègre des patchs légitimes refusés par Ulrich Drepper. Debian utilise la eglibc depuis 2009.
* Go-oo, un logiciel dérivé d'OpenOffice.org, qui comporte des patchs non intégrés par Sun Microsystems pour cause de lenteur d'intégration ou d'opposition à la politique commerciale de Sun. Depuis le rachat de Sun par la société Oracle, la situation s'est encore détériorée. Devant le silence d'Oracle sur l'avenir du projet, le spork s'est transformé en un véritable fork nommé LibreOffice. Si Go-oo était principalement utilisé par OpenSuse et Ubuntu, LibreOffice est maintenant utilisé par quasiment toutes les distributions.
En anglais général, un spork (cuillère-fourchette), est un mot-valise créé à partir de spoon (cuillère) et de fork (fourchette). Du fait de la dualité de fonction de l'objet, l'analogie a été conservée avec les ramifications informatiques qui gardent à la fois les fonctions existantes et en rajoutent de nouvelles.

## Exemples de forks

* GNU Emacs, en raison de différences de points de vue entre le projet GNU (qui était à l'origine de cette version d'Emacs) et des développeurs externes (principalement de l'entreprise Lucid qui développait un produit utilisant GNU Emacs), donne GNU Emacs et Lucid Emacs (qui est ensuite renommé en XEmacs).
* En 1994, Theo de Raadt, cofondateur de NetBSD, est exclu par les développeurs de ce dernier. Il crée alors OpenBSD à partir du code source de NetBSD, et décide de rendre son développement le plus ouvert possible (d'où le « Open ») tout en portant l'accent sur la sécurité.
* En 1997, GNU Compiler Collection (GCC) stagne et le fork EGCS apparaît pour progresser plus vite, notamment dans le support du C++ standard. Finalement, la branche EGCS supplante la branche stagnante de GCC en 1999 et est publiée sous la version 2.95.
* En 2003, un fork du logiciel libre de dessin vectoriel Sodipodi, nommé Inkscape est lancé. Aujourd'hui, Sodipodi n'a pas sorti de nouvelles versions depuis février 2004 alors qu'Inkscape connaît un développement très actif. Sodipodi était déjà à l'origine un fork du logiciel libre Gill.
* En 2003, à la suite de l'abandon apparent du logiciel de blog « b2 » par son créateur, Matthew Mullenweg et Mike Little décident de reprendre le projet sous le nom de WordPress. WordPress est aujourd'hui l'un des systèmes de gestion de contenu les plus utilisés sur le Web.
* En 2004, en raison d'un désaccord de licence, un bon nombre de développeurs de XFree86 décident de créer X.Org à partir de XFree86 4.4 RC2. Très vite, X.Org remplace XFree86 dans la plupart des distributions Linux.
* En 2005, du fait de la volonté de l'éditeur Miro de créer une fondation autour de Mambo, les développeurs décident de lancer Joomla!.
* Le 16 août 2010, Xiaomi développe son système d'exploitation (Miui) créé à partir du code source d'Android qui a été ouvert par Google via l'Android Source Projet (AOSP).
* Le 18 septembre 2010, création de Mageia après la liquidation judiciaire de Edge-IT qui participait à l'édition de la distribution Mandriva.
* Le 28 septembre 2010, création de The Document Foundation pour le développement de la suite LibreOffice, fork de la suite bureautique OpenOffice.org, par une communauté de développeurs et de contributeurs de cette dernière, insatisfaits du rachat de Sun Microsystems (éditeur d'OpenOffice.org) par Oracle.
* SkySQL et MariaDB fork de MySQL de Oracle également.
* Blink, moteur de rendu HTML de Google, fork de WebKit, dont le développement a été annoncé le 4 avril 2013.
* Début 2011, naît Jenkins, un outil open source d'intégration continue fork de l'outil Hudson, après les différends entre son auteur, Kohsuke Kawaguchi, et Oracle.
* Les distributions Linux de base ont donné naissance a un très grand nombre de forks, eux-mêmes donnant parfois naissance à d'autres forks. On dénombre actuellement plusieurs centaines de distributions.
* Dans le domaine des cryptomonnaies, on compte de nombreux exemples de fork, comme Bitcoin Cash qui est un fork de Bitcoin.
* Dans le domaine des wikis les "fourches" sont communes, comme Wikivoyage qui est né comme un 'fork' de Wikitravel en 2006.

## Exemples de « fusions »

À l'inverse des forks, certains projets de logiciels libres décident de fusionner leur base de code car ils partagent des objectifs similaires ou parviennent à réconcilier leurs points de vue.
Exemples de fusion de logiciels libres:
* Après avoir forké, Compiz et Beryl ont fusionné en 2007 en Compiz Fusion.
* AspectWerkz et AspectJ avaient des approches différentes pour faire de la programmation orientée aspect. Ils ont fusionné dans AspectJ 5 et offrent toujours aux utilisateurs de continuer à utiliser l'approche qui leur convient.
* Ruby on Rails et Merb ont fusionné en Ruby on Rails 3.
* En 2010, Pylons et repoze.bfg fusionnent pour donner Pyramid.