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. El término a menudo implica no sólo 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 bifurcar son las preferencias variables del usuario y el desarrollo estancado o interrumpido del software original.
El software gratuito y de código abierto es aquel que, por definición, puede derivarse del equipo de desarrollo original sin permiso previo y sin violar la ley de derechos de autor . Sin embargo, también existen bifurcaciones con licencia de software propietario ( por ejemplo, Unix ).
La palabra "tenedor" se ha utilizado para significar "dividir en ramas, tomar caminos separados" ya en 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 diferentes tareas. [3]
En el contexto del desarrollo de software, Eric Allman utilizó "fork" en el sentido de crear una " rama " de control de revisión ya 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 ya se utilizaba en Usenet en 1983 para el proceso de creación de un subgrupo al que trasladar los temas de discusión. [5]
No se sabe que "Fork" se haya utilizado en el sentido de un cisma comunitario durante los orígenes de Lucid Emacs (ahora XEmacs ) (1991) o Berkeley Software Distributions (BSD) (1993-1994); Russ Nelson utilizó el término "destrozar" para este tipo de bifurcación en 1993, atribuyéndolo a John Gilmore . [6] Sin embargo, "fork" se utilizaba en el sentido actual en 1995 para describir la división de XEmacs, [7] y era un uso comprendido en el Proyecto GNU en 1996. [8]
El software gratuito 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 brindarle a toda la comunidad la oportunidad de beneficiarse de sus cambios. El acceso al código fuente es una condición previa para ello.
3. Obras Derivadas: La licencia debe permitir modificaciones y obras derivadas, y debe permitir su distribución en los mismos términos que la licencia del software original.
En el software libre, las bifurcaciones suelen ser el resultado de un cisma entre diferentes objetivos o choques de personalidad. 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 con la bifurcación. [9] La relación entre los diferentes equipos puede ser cordial o muy amarga. Por otro lado, un fork amigable o un fork suave es un fork que no pretende competir, pero que eventualmente quiere 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 competitivos que luego no pueden intercambiar código, dividiendo a la comunidad de desarrolladores potencial". Él señala en el archivo Jergon : [13]
La bifurcación se considera algo malo, no sólo porque implica una gran cantidad de esfuerzo desperdiciado en el futuro, sino porque las bifurcaciones tienden a 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 la bifurcación. Como resultado, las bifurcaciones principales (como la división Gnu-Emacs / XEmacs , la fisión del grupo 386BSD en tres proyectos hijos y la breve división GCC/EGCS) son lo suficientemente raras como para ser recordadas individualmente en el folklore hacker.
David A. Wheeler señala [9] cuatro posibles resultados de una bifurcación, con ejemplos:
Las herramientas de control de revisiones distribuidas (DVCS) han popularizado un uso menos emotivo del término "bifurcación", desdibujando la distinción con "bifurcación". [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 brindan alojamiento DVCS gratuito que respalda expresamente sucursales 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 término para este método de contribución. a un proyecto.
Las bifurcaciones a menudo reinician la numeración de versiones desde 0.1 o 1.0 incluso si el software original tenía la versión 3.0, 4.0 o 5.0. Una excepción es 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 los forks 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 patentadas de Wine , aunque CrossOver sigue a Wine y contribuye considerablemente), EnterpriseDB (una bifurcación de PostgreSQL , que agrega características de compatibilidad con Oracle [16] ), PostgreSQL compatible con su sistema de almacenamiento ESM patentado, [17] y el derivado altamente escalable patentado de Netezza [18] de PostgreSQL. . Algunos de estos proveedores contribuyen con cambios al proyecto comunitario, mientras que otros mantienen sus cambios como sus propias ventajas competitivas.
En el software propietario , los derechos de autor generalmente pertenecen a la entidad empleadora, no a los desarrolladores de software individuales. Por lo tanto, el código propietario se bifurca más comúnmente cuando el propietario necesita desarrollar dos o más versiones, como una versión en ventana 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 . Generalmente, dichas bifurcaciones internas se concentrarán en tener la misma apariencia, 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 de mercado y así pagar los costos de desarrollo adicionales asociados creados por la bifurcación.
Una bifurcación propietaria notable 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 Guerras Unix .
Las bifurcaciones son una parte natural del modelo de desarrollo abierto, hasta el punto de que GitHub incluye un botón de "bifurca tu propia copia" en casi todas las páginas.Véase también Nyman, Linus (2015). Comprensión de la bifurcación de código en software de código abierto (Doctor). Escuela de Economía Hanken. pag. 57. hdl : 10138/153135.
Si antes los profesionales tenían definiciones bastante estrechas de bifurcación, [...] el término ahora parece usarse de manera mucho más amplia. Acciones que tradicionalmente se habrían llamado bifurcación, nueva distribución, fragmentación de código, pseudobifurcación, etc., ahora algunos desarrolladores pueden llamarlas bifurcaciones. Esto parece deberse en gran medida a la amplia definición y uso del término bifurcación por parte de GitHub.