# Bifurcación (desarrollo de software)

En ingeniería de software se considera una bifurcación (en inglés: fork) al desarrollo de un proyecto informático tomando como base un código fuente que ya existe o a la ramificación de un proyecto madre en varios proyectos que son independientes entre sí y que cuentan con objetivos o desarrolladores diferentes. Como resultado de una bifurcación se pueden derivar varios proyectos de uno preexistente, los cuales pueden intentar cubrir necesidades distintas aunque similares o implementar diferentes soluciones con el fin de abordar los mismos problemas pudiendo llegar a competir entre ellos.
Ejemplos de bifurcaciones de software son la Enciclopedia Libre (escindida de la Wikipedia en español), los sistemas operativos Android, Debian y Ubuntu (derivados de GNU Linux), las suites de ofimática de código abierto LibreOffice y AndrOpen Office (basadas en OpenOffice).

## Contextos
### Software libre

Las bifurcaciones de proyectos de software libre pueden surgir de un cisma en los objetivos o un choque de personalidades. En una bifurcación, ambos lados asumen derechos de autor idénticos pero típicamente solo el grupo de mayor tamaño, o el que contiene al arquitecto original, retendrá el nombre original completo. Al tratarse de software con licencia libre, cada miembro de la comunidad de usuarios asociada puede elegir mantenerse en el proyecto original, o cambiarse a la versión bifurcada y actualizada mediante una forma de gestión diferente. Además, gracias a la licencia libre está permitido trasladar las mejoras creadas en una versión a la otra cuando sea deseable. El resultado puede ser tener dos proyectos que evolucionan en paralelo, cada uno especializado en adaptarse a unas condiciones distintas al otro.

### Software privativo

En proyectos de software privativo las bifurcaciones usualmente se llevan a cabo para crear versiones de un mismo programa que funcionen en diversos sistemas operativos, aumentando así la cuota de mercado. Pero suelen retener las mismas características, facilitando así a los usuarios el uso del mismo programa en diferentes sistemas operativos.

## Tecnología blockchain

En el contexto de las criptomonedas el término bifurcación puede significar varias cosas, aunque por lo general, refiere a eventos que implican ajustes de las reglas de consenso de la red peer-to-peer de una cadena de bloques, en los cuales es posible que se produzcan divisiones de dichas redes. Estos eventos pueden ser usados como medios para ejecutar actualizaciones de protocolo o crear nuevas criptomonedas a partir de otras, aunque también pueden ocurrir como consecuencia de errores de código. También se suele usar, aunque en una menor medida, el término bifurcación de software para denotar el desarrollo de un programa o proyecto que copia parte del código fuente de uno preexistente, o al lanzamiento de una criptomoneda cuyo código está basado en el de otra.

### Tipos de bifurcaciones de una cadena de bloques

* Bifurcación blanda (soft fork): no implican cambios radicales de las reglas de consenso y mantienen la retrocompatibilidad entre los nodos actualizados y los nodos que ejecutan software antiguo. Pueden ser usadas para agregar nuevas funciones sin la necesidad de que todos los participantes actualicen el software de sus nodos, siendo necesario el nuevo software solo para quienes quieren gozar de las nuevas características.
* Bifurcación dura (hard fork): implican cambios radicales de las reglas de consenso que hacen incompatibles a los nodos no actualizados con los nodos actualizados de forma que hace técnicamente imposible a los primeros validar bloques producidos por los segundos. Pueden ser usados para arreglar fallas o agregar, mejorar e incluso eliminar características.

### Eventos relacionados

* Actualizaciones de red: activación de un nuevo conjunto de reglas de consenso de forma programada.
* Divisiones (chain split): separación de los nodos que conforman una red blockchain en redes peer-to-peer diferentes (sea de forma coordinada o accidental) las cuales pueden tener un carácter temporal o permanente. Pueden producirse por errores, incompatibilidad entre el código de distintas implementaciones de software para nodos y bifurcaciones contenciosas.
* Guerras de hash (hash war): división y competencia del poder de minado de una criptomoneda en apoyo a consensos diferentes sobre el protocolo.