# Fork (sviluppo software)

Un fork (o branch), nell'ambito dell'ingegneria del software e dell'informatica, indica lo sviluppo di un nuovo progetto software che parte dal codice sorgente di un altro già esistente, a opera di un programmatore.
Il termine è usato (più raramente) per indicare questo tipo di condizione anche per progetti e attività non necessariamente legate al software e all'informatica, sebbene nella maggior parte dei casi ci si riferisce a progetti di software libero e/o open source: infatti per questo tipo di licenze software, non è richiesta alcuna autorizzazione formale da parte dello sviluppatore originario per la loro modifica o il loro sviluppo a partire dai codici sorgenti ed è più facile dunque iniziare un fork.

## Descrizione

I fork, nell'ambito del software libero, risultano spesso essere dei veri e propri scismi dovuti a conflitti personali o al perseguimento di diversi obiettivi. Quando si verifica un fork entrambe le parti iniziano il lavoro sulla stessa identica base di codice, ma solo il gruppo più numeroso, o quello che rappresenta il nucleo originario, mantiene il nome e la comunità virtuale a esso legato. Talvolta l'atto di effettuare un fork porta a una penalizzazione in termini di reputazione.
Nell'ambito del software proprietario il copyright è detenuto dalla società che sviluppa il prodotto, non dal singolo sviluppatore. Il codice proprietario solitamente subisce un fork quando la società necessita di due o più versioni dello stesso prodotto, ad esempio una grafica e una a riga di comando, o di versioni per diversi sistemi operativi. Generalmente questo tipo di fork interni mantengono lo stesso aspetto, lo stesso formato per i file e lo stesso comportamento, in modo che l'utente possa essere produttivo con entrambi: tutto ciò si traduce quasi sempre in un incremento della quota di mercato.
Il fork è una pratica abituale in molti progetti, in quanto esistono versioni stabili (o di release) destinate a ospitare solo correzioni minori, e versioni di sviluppo che contengono l'implementazione di nuove caratteristiche. Ciò accade nello sviluppo del kernel Linux, ad esempio. Questo tipo di fork sono solitamente chiamati branches per evitare il fraintendimento dovuto alla connotazione negativa della parola "fork" e perché le applicazioni che assistono lo sviluppo (come CVS o SVN) usano proprio questo termine.
In taluni casi, un fork può essere nuovamente integrato nel progetto originario, o addirittura rimpiazzarlo. L'Experimental/Enhanced GNU Compiler System (EGCS) è stato un fork di GCC, e dimostrò una tale vitalità rispetto al progetto originario che venne promosso a essere la versione ufficiale di GCC.
I fork sono considerati espressione della libertà resa disponibile dal software libero, ma anche una debolezza dovuta alla dispersione delle risorse e alla confusione indotta nell'utente finale. A seguito di un fork le relazioni tra i diversi gruppi di sviluppo possono mantenersi cordiali o diventare assai gravose: ad esempio, quando l'autore del programma di file sharing per Linux LMule non si dimostrò interessato a portare l'applicazione su altre piattaforme, esso venne forkato in xMule. A sua volta, questo venne diviso in aMule, a causa delle divergenze tra gli sviluppatori, e le tensioni rimasero.
In merito al processo di fork, lo Jargon File si esprime così:
«Il fork è considerato una cosa cattiva, non solo perché implica un enorme spreco di risorse ma soprattutto perché tende a essere accompagnato da gravi tensioni. Esiste una seria pressione sociale contro i fork. Come risultato, i fork di grandi proporzioni (come quello di Emacs e XEmacs, la divisione di 386BSD in tre progetti paralleli, e quello di GCC e EGCS) sono sufficientemente rari da essere singolarmente ricordati nella storia del folklore hacker»
(Jargon File)
Forkare un progetto in uno nuovo è semplice, ma continuare a mantenerlo e supportarlo no: è cosa comune che i fork senza sufficienti risorse diventino inattivi. Ad esempio GonoME, un fork di GNOME, venne ben presto abbandonato sebbene all'inizio avesse suscitato un discreto interesse. Alcuni fork hanno invece avuto grande successo, come quello di XFree86, X.org e di MATE, un fork di GNOME 2 attualmente adottato dalla maggior parte delle distribuzioni Linux.

### Esempi

* Enciclopedia Libre è un fork della Wikipedia spagnola, creato per cercare di evadere lo spamming
* Pretty Good Privacy è stato forkato al di fuori degli Stati Uniti d'America per aggirare le restrizioni sull'esportazione di software dedito alla crittografia
* Le innumerevoli versioni di Unix derivano tutte dall'originario Unix di AT&T e si chiamano tutte "UNIX", sebbene siano divenute incompatibili tra loro
* Il gioco NetHack è un fork di Rogue e a sua volta venne forkato in numerose varianti
* OpenSSH è un fork di SSH, avvenuto in quanto la seconda versione dell'originale venne distribuito con una licenza non libera; la prima versione, ancora con licenza libera, venne forkata e, nel corso dei mesi, tutte le distribuzioni Linux e BSD rimpiazzarono SSH con OpenSSH
* DragonFly BSD venne forkato da FreeBSD 4.8 da un suo vecchio sviluppatore, Matt Dillon, a causa del disaccordo sulle scelte implementative adottate in FreeBSD 5.
* LibreOffice è un fork di Apache OpenOffice
* Wikivoyage (oggi parte della Wikimedia Foundation) è nato come fork di Wikitravel quando quest'ultimo decise di diventare un sito di stampo commerciale.
* EdgeHTML (il motore di rendering di Microsoft Edge) è un fork di Trident.
* Waterfox (browser web) è un fork di Mozilla Firefox.
* MariaDB è nato da un fork di MySQL, operato dallo stesso autore di quest'ultimo in seguito all'acquisizione del DBMS originario da parte della Sun Microsystems.