Spesso nel mondo open source si tende ad attribuire alle parole fork e clone il medesimo significato. Tuttavia questi due termini indicano diversi modi di modificare e gestire il codice. Quali sono le differenze tra questi due concetti?
Andiamo con ordine, il concetto di forking esiste da decenni all'interno del mondo open source, il verbo "to fork" (letteralmente "biforcare") significa, in ambito informatico, eseguire un copia di un progetto, rinominarlo e crearne uno nuovo sulla base del codice prelevato. Questi fork possono anche dare dei contributi ai progetti da cui hanno avuto origine, condividendo con loro nuovo codice e patch.
Esistono svariate ragioni per creare un fork, ad esempio con lo scopo di realizzare una funzionalità che poi verrà riassorbita nel ramo di sviluppo originale. Il kernel Linux è stato forkato da Google per integrarlo al meglio in Android, successivamente il fork è stato poi riassorbito all'interno del ramo principale del kernel Linux.
Un fork può anche essere utilizzato per dare nuova linfa vitale ad un progetto. È il caso della famosa suite d'ufficio OpenOffice che è stata forkata dal team di LibreOffice dopo che il progetto venne lasciato nelle mani della fondazione Apache.
Tuttavia, la ragione principale per cui un fork viene creato è che spesso all'interno di un team di sviluppo nascono delle divergenze che portano una parte dei developer ad abbandonare il proprio gruppo di sviluppatori e a creare un progetto parallelo con obbiettivi e feature diverse, è il caso di MariaDB nato da una scissione in seno a MySQL.
Passiamo adesso al concetto di clone. Prima dell'arrivo di Git o di qualsiasi DVCS (Distributed Version Control System) l'unico modo per lavorare in sicurezza su un progetto senza andare ad intaccare il ramo principale era creare dei cloni del codice in locale, per poi eseguite le modifiche che una volta testate potevano poi essere proposte per il merge.
Dunque clonare un progetto è un'azione effettuata per poter contribuire ad un progetto, mentre quando un developer crea un fork spesso ha finalità e obbiettivi diversi rispetto all'idea del team che lo ha creato.
Ma da dove nasce questa sovrapposizione di termini? E' probabile che l'utenza abbia iniziato a confondere le due parole quando Github è stato lanciato nel mercato. Per eseguire un fork nella console di Github è infatti necessario utilizzare il comando "git clone", particolare che potrebbe rendere meno distinguibili i due termini ai non addetti ai lavori.