En ingeniería de software , una bifurcación de proyecto ocurre cuando los desarrolladores toman una copia del código fuente de un paquete de software y comienzan un desarrollo independiente en él, creando una pieza de software distinta y separada. [ ejemplo necesario ] El término a menudo implica no solo una rama de desarrollo , sino también una división en la comunidad de desarrolladores; como tal, es una forma de cisma . [1] Los motivos para la bifurcación son las diferentes preferencias de los usuarios y el desarrollo estancado o discontinuado del software original.
El software libre y de código abierto es aquel que, por definición, puede ser derivado del equipo de desarrollo original sin permiso previo y sin violar la ley de derechos de autor . Sin embargo, también se producen derivaciones con licencia de software propietario ( por ejemplo , Unix ).
La palabra "fork" se ha utilizado para significar "dividir en ramas, seguir caminos separados" desde el siglo XIV. [2] En el entorno de software, la palabra evoca la llamada al sistema fork , que hace que un proceso en ejecución se divida en dos copias (casi) idénticas que (normalmente) divergen para realizar tareas diferentes. [3]
En el contexto del desarrollo de software, Eric Allman utilizó "fork" en el sentido de crear una " rama " de control de revisión en 1980, en el contexto del Sistema de Control de Código Fuente : [4]
La creación de una rama "bifurca" una versión del programa.
El término se empezó a utilizar en Usenet en 1983 para designar el proceso de creación de un subgrupo al que trasladar temas de discusión. [5]
No se sabe que "fork" haya sido usado en el sentido de un cisma de la comunidad durante los orígenes de Lucid Emacs (ahora XEmacs ) (1991) o las distribuciones de software de Berkeley (BSD) (1993-1994); Russ Nelson usó el término "shattering" para este tipo de bifurcación en 1993, atribuyéndolo a John Gilmore . [6] Sin embargo, "fork" se usaba en el sentido actual en 1995 para describir la división de XEmacs, [7] y era un uso entendido en el Proyecto GNU en 1996. [8]
El software libre y de código abierto puede bifurcarse legalmente sin la aprobación previa de quienes actualmente desarrollan, administran o distribuyen el software, según la Definición de Software Libre y la Definición de Código Abierto : [9]
La libertad de distribuir copias de sus versiones modificadas a otros (libertad 3). Al hacer esto, puede darle a toda la comunidad la oportunidad de beneficiarse de sus cambios. El acceso al código fuente es una condición previa para esto.
3. Trabajos derivados: La licencia debe permitir modificaciones y trabajos derivados, y debe permitir que se distribuyan bajo los mismos términos que la licencia del software original.
En el software libre, las bifurcaciones suelen ser el resultado de un cisma sobre objetivos diferentes o enfrentamientos de personalidades. En una bifurcación, ambas partes asumen bases de código casi idénticas, pero normalmente sólo el grupo más grande, o quien controle el sitio web, conservará el nombre original completo y la comunidad de usuarios asociada. Por lo tanto, existe una penalización de reputación asociada a la bifurcación. [9] La relación entre los diferentes equipos puede ser cordial o muy amarga. Por otro lado, una bifurcación amistosa o una bifurcación suave es una bifurcación que no tiene la intención de competir, sino que quiere eventualmente fusionarse con el original.
Eric S. Raymond , en su ensayo Homesteading the Noosphere [12], afirmó que "la característica más importante de una bifurcación es que genera proyectos en competencia que luego no pueden intercambiar código, dividiendo la comunidad potencial de desarrolladores". Señala en Jargon File : [13]
La bifurcación se considera algo malo, no sólo porque implica mucho esfuerzo desperdiciado en el futuro, sino porque las bifurcaciones suelen ir acompañadas de una gran cantidad de conflictos y acritud entre los grupos sucesores sobre cuestiones de legitimidad, sucesión y dirección del diseño. Existe una gran presión social contra las bifurcaciones. Como resultado, las bifurcaciones importantes (como la división de Gnu-Emacs / XEmacs , la división del grupo 386BSD en tres proyectos hijos y la efímera división de GCC/EGCS) son lo suficientemente raras como para que se las recuerde individualmente en el folclore hacker.
David A. Wheeler señala [9] cuatro posibles resultados de una bifurcación, con ejemplos:
Las herramientas de control de revisión distribuida (DVCS) han popularizado un uso menos emotivo del término "bifurcación", desdibujando la distinción con "rama". [14] Con un DVCS como Mercurial o Git , la forma normal de contribuir a un proyecto es crear primero una rama personal del repositorio, independiente del repositorio principal, y luego buscar que sus cambios se integren con él. Sitios como GitHub , Bitbucket y Launchpad proporcionan alojamiento gratuito de DVCS que admite expresamente ramas independientes, de modo que las barreras técnicas, sociales y financieras para bifurcar un repositorio de código fuente se reducen enormemente, y GitHub usa "bifurcación" como su término para este método de contribución a un proyecto.
Las bifurcaciones a menudo reinician la numeración de versiones a partir de los números que se usan normalmente para las versiones iniciales de los programas, como 0.0.1, 0.1 o 1.0, incluso si el software original era de otra versión, como 3.0, 4.0 o 5.0. A veces se hace una excepción cuando el software bifurcado está diseñado para ser un reemplazo directo del proyecto original, por ejemplo, MariaDB para MySQL [15] o LibreOffice para OpenOffice.org .
Las licencias BSD permiten que las bifurcaciones se conviertan en software propietario, y los defensores del copyleft dicen que los incentivos comerciales hacen que la propiedad sea casi inevitable. (Sin embargo, las licencias copyleft se pueden eludir mediante una licencia dual con una concesión de propiedad en forma de un Acuerdo de Licencia de Colaborador ). Los ejemplos incluyen macOS (basado en el propietario NeXTSTEP y el código abierto FreeBSD ), Cedega y CrossOver (bifurcaciones propietarias de Wine , aunque CrossOver rastrea Wine y contribuye considerablemente), EnterpriseDB (una bifurcación de PostgreSQL , que agrega características de compatibilidad con Oracle [16] ), Supported PostgreSQL con su sistema de almacenamiento ESM propietario, [17] y el derivado altamente escalable propietario de PostgreSQL de Netezza [18] . Algunos de estos proveedores contribuyen con cambios al proyecto de la comunidad, mientras que otros mantienen sus cambios como sus propias ventajas competitivas.
En el software propietario , los derechos de autor suelen estar en manos de la entidad que lo emplea, no de los desarrolladores de software individuales. Por lo tanto, el código propietario se bifurca con mayor frecuencia cuando el propietario necesita desarrollar dos o más versiones, como una versión con ventanas y una versión de línea de comandos , o versiones para diferentes sistemas operativos, como un procesador de textos para máquinas compatibles con IBM PC y computadoras Macintosh . Por lo general, estas bifurcaciones internas se concentrarán en tener la misma apariencia, sensación, formato de datos y comportamiento entre plataformas para que un usuario familiarizado con una también pueda ser productivo o compartir documentos generados en la otra. Esta es casi siempre una decisión económica para generar una mayor participación en el mercado y, por lo tanto, recuperar los costos de desarrollo adicionales asociados creados por la bifurcación.
Una notable bifurcación propietaria que no es de este tipo son las muchas variedades de Unix propietario —casi todas derivadas de AT&T Unix bajo licencia y todas llamadas "Unix", pero cada vez más incompatibles entre sí. [19] Véase Unix wars .
Las bifurcaciones son una parte natural del modelo de desarrollo abierto, tanto que GitHub coloca un botón "bifurca tu propia copia" en casi todas las páginas.Véase también Nyman, Linus (2015). Understanding Code Forking in Open Source Software (PhD). Hanken School of Economics. p. 57. hdl :10138/153135.
Si bien antes los profesionales tenían definiciones bastante estrechas de una bifurcación, [...] ahora el término parece usarse de manera mucho más amplia. Acciones que tradicionalmente se habrían llamado una rama, una nueva distribución, fragmentación de código, una pseudobifurcación, etc., ahora pueden ser llamadas bifurcaciones por algunos desarrolladores. Esto parece deberse en gran parte a la amplia definición y uso del término bifurcación por parte de GitHub.