Em
engenharia de software, uma
bifurcação ou
ramificação acontece quando um desenvolvedor (ou um grupo de desenvolvedores) inicia um projeto independente com base no código de um projeto já existente, ou seja, quando um software é desenvolvido com base em outro, já existente, sem a descontinuidade deste último. O termo é também usado para outras separações de qualquer tipo de trabalho (por exemplo, há várias bifurcações da língua inglesa na
Wikipédia).
O termo é particularmente usado no
software livre ou de
código aberto, quando uma divisão ocorre por causa de diferentes objetivos ou brigas de personalidade. Alguns vêem as bifurcações como uma fraqueza no software livre, mas outros acreditam que eles demonstram a adaptabilidade do modelo. A relação entre os times pode ser cordial ou muito dura (ver
xMule e sua bifurcação
aMule). Em uma bifurcação deste tipo, ambos os lados herdam
propriedade intelectual idêntica, mas tipicamente apenas o maior grupo, ou aquele que contém o
arquiteto original, irá manter o nome original e o seu
capital social associado. Então, existe uma penalidade na reputação associada com o bifurcação.
Isto pode acontecer no software de
código fechado também, se os direitos ao código comum forem compartilhados; mas este é mais raro, como há, em geral, regras estritas sobre a propriedade do código. É mais comum no software de código fechado um desenvolvedor fazer uma bifurcação do seu próprio projeto, para desenvolver duas versões, como uma versão
em janelas e outra em
linha de comando. Outro tipo de bifurcação é uma prática padrão em muitos projetos: fazer uma bifurcação
estável ou de
produção que será modificada apenas para correções de defeitos, enquanto uma versão de
desenvolvimento continua tendo novas características adicionadas. Isto é uma prática comum no
núcleo Linux, por exemplo, mas é comumente mal-interpretado na imprensa como o tipo mais problemático de bifurcação. Veja um exemplo
aqui] Em alguns casos, um bifurcação pode voltar ao seu projeto original ou substituí-lo. O EGCS (Experimental/Enhanced GNU Compiler System) era um bifurcação do
GCC que era mais ativo que o projeto original e foi depois considerado o projeto GCC oficial.