Forking é pegar o código fonte de um programa de código aberto e desenvolver um programa inteiramente novo.
Forking é frequentemente o resultado de um impasse num projecto de código aberto que é tão intransponível que todo o trabalho pára. Normalmente isto acontece quando os membros da equipe de desenvolvimento não conseguem resolver conflitos pessoais ou não conseguem chegar a um consenso sobre os próximos passos. Garfos também podem ocorrer quando membros centrais de uma equipe de desenvolvimento de código aberto decidem não abordar casos de uso que outros membros da comunidade de desenvolvimento consideram importantes.
Garfos de software podem ser controversos quando duplicam esforços, mas a maioria dos desenvolvedores concorda que o direito de garfo é a maior força do software de código aberto. Um garfo de sucesso pode poupar tempo de desenvolvimento, inspirar outros usos para código antigo e criar novas oportunidades de negócio. Para ser considerado um garfo, a versão mais recente do software deve ter seu próprio nome e sua própria comunidade de desenvolvedores. Quando um novo programa permanece compatível com o programa original, é referido como um garfo raso.
O nome do garfo é derivado do padrão POSIX para operar systsems. Neste contexto, um garfo é um processo que gera uma cópia de si mesmo.