El desarrollo de software de código abierto ( OSSD , por sus siglas en inglés) es el proceso mediante el cual un proyecto de software de código abierto desarrolla software de código abierto , o software similar cuyo código fuente está disponible públicamente . Se trata de productos de software disponibles con su código fuente bajo una licencia de código abierto para estudiar, modificar y mejorar su diseño. Algunos ejemplos de productos de software de código abierto populares son Mozilla Firefox , Google Chromium , Android , LibreOffice y el reproductor multimedia VLC .
Historia
En 1997, Eric S. Raymond escribió La catedral y el bazar . [ 1 ] En este libro, Raymond distingue entre dos tipos de desarrollo de software . El primero es el desarrollo convencional de código cerrado . Este método de desarrollo es, según Raymond, como la construcción de una catedral: planificación centralizada, organización rigurosa y un único proceso de principio a fin. El segundo es el desarrollo progresivo de código abierto, que se asemeja más a «un gran bazar bullicioso de agendas y enfoques diversos, del cual un sistema coherente y estable solo podría surgir, aparentemente, por una sucesión de milagros». Esta última analogía alude al debate inherente a un proceso de desarrollo de código abierto.
Según Bar y Fogel, las diferencias entre los dos estilos de desarrollo radican, en general, en la gestión (y creación) de informes de errores y solicitudes de funcionalidades , así como en las limitaciones bajo las que trabajan los programadores. [ 2 ] En el desarrollo de software de código cerrado, los programadores suelen dedicar mucho tiempo a gestionar y crear informes de errores, además de atender las solicitudes de funcionalidades. Este tiempo se emplea en crear y priorizar planes de desarrollo adicionales. Esto conlleva que parte del equipo de desarrollo dedique mucho tiempo a estos asuntos, en lugar de al desarrollo propiamente dicho. Asimismo, en los proyectos de código cerrado, los equipos de desarrollo a menudo deben trabajar bajo limitaciones relacionadas con la gestión (como plazos, presupuestos, etc.) que interfieren con los aspectos técnicos del software. En el desarrollo de software de código abierto, estos problemas se resuelven integrando a los usuarios del software en el proceso de desarrollo, o incluso permitiéndoles construir el sistema ellos mismos.
Modelo

El desarrollo de software de código abierto se puede dividir en varias fases. Las fases aquí descritas provienen de Sharma et al . [ 3 ]. A la derecha se muestra un diagrama que ilustra la estructura de datos del proceso de desarrollo de software de código abierto. En este diagrama se muestran las fases del desarrollo de software de código abierto, junto con los elementos de datos correspondientes. Este diagrama se elaboró utilizando técnicas de metamodelado y metaproceso .
Iniciar un proyecto de código abierto
Existen varias maneras de comenzar a trabajar en un proyecto de código abierto:
- Una persona que percibe la necesidad de un proyecto anuncia públicamente su intención de desarrollarlo.
- Un desarrollador que trabaja en un código fuente limitado pero funcional, lo publica como la primera versión de un programa de código abierto.
- El código fuente de un proyecto maduro se publica para el público.
- Un proyecto de código abierto bien establecido puede ser bifurcado por una parte externa interesada.
Eric Raymond observó en su ensayo " La catedral y el bazar" que anunciar la intención de un proyecto suele ser inferior a presentar un proyecto en funcionamiento al público.
Es un error común iniciar un proyecto cuando sería más efectivo contribuir a uno similar ya existente ( síndrome NIH ) . Para iniciar un proyecto exitoso, es fundamental investigar lo que ya existe. El proceso comienza con la decisión de adoptar un proyecto existente o iniciar uno nuevo. Si se inicia un proyecto nuevo, el proceso pasa a la fase de Iniciación. Si se adopta un proyecto existente, el proceso pasa directamente a la fase de Ejecución.
Tipos de proyectos de código abierto
Existen varios tipos de proyectos de código abierto. En primer lugar, están los programas y bibliotecas de software más comunes, que consisten en fragmentos de código independientes. Algunos incluso pueden depender de otros proyectos de código abierto. Estos proyectos cumplen una función específica y satisfacen una necesidad concreta. Ejemplos de este tipo de proyectos son el kernel de Linux , el navegador web Firefox y la suite ofimática LibreOffice.
Las distribuciones son otro tipo de proyecto de código abierto. Son colecciones de software publicadas desde una misma fuente con un propósito común. El ejemplo más destacado de una "distribución" es un sistema operativo. Existen muchas distribuciones de Linux (como Debian , Fedora Core , Mandriva , Slackware , Ubuntu , etc.) que incluyen el núcleo de Linux junto con numerosos componentes de espacio de usuario. También existen otras distribuciones, como ActivePerl , el lenguaje de programación Perl para diversos sistemas operativos, y las distribuciones Cygwin de programas de código abierto para Microsoft Windows .
Otros proyectos de código abierto, como los derivados de BSD , mantienen el código fuente de un sistema operativo completo, el núcleo y todos sus componentes principales, en un único sistema de control de versiones ; desarrollando todo el sistema en conjunto como un solo equipo. Estos proyectos de desarrollo de sistemas operativos integran sus herramientas de forma más estrecha que en otros sistemas basados en distribuciones.
Finalmente, están los libros o proyectos de documentación independientes. Estos elementos generalmente no se distribuyen como parte de un paquete de software de código abierto. El Proyecto de Documentación de Linux alberga muchos proyectos de este tipo que documentan diversos aspectos del sistema operativo Linux. Existen muchos otros ejemplos de este tipo de proyectos de código abierto.
Métodos
Es difícil gestionar un proyecto de código abierto siguiendo un método de desarrollo de software más tradicional, como el modelo en cascada , ya que estos métodos tradicionales no permiten retroceder a una fase anterior. En el desarrollo de software de código abierto, los requisitos rara vez se recopilan antes del inicio del proyecto; en cambio, se basan en las primeras versiones del producto de software, como describe Robbins. [ 4 ] Además de los requisitos, a menudo se atrae a personal voluntario para ayudar a desarrollar el producto de software a partir de las primeras versiones. Este efecto de red es esencial, según Abrahamsson et al.: «si el prototipo presentado atrae suficiente atención, gradualmente comenzará a atraer a más y más desarrolladores». Sin embargo, Abrahamsson et al. también señalan que la comunidad es muy exigente, al igual que el mundo empresarial del software de código cerrado: «si encuentras clientes, sobrevives; sin clientes, mueres». [ 5 ]
Fuggetta [ 6 ] argumenta que “el prototipado rápido, el desarrollo incremental y evolutivo, el ciclo de vida en espiral, el desarrollo rápido de aplicaciones y, recientemente, la programación extrema y el proceso de software ágil pueden aplicarse por igual al software propietario y de código abierto”. También señala la Programación Extrema como un método extremadamente útil para el desarrollo de software de código abierto. En términos más generales, todos los métodos de programación ágil son aplicables al desarrollo de software de código abierto, debido a su carácter iterativo e incremental. Otros métodos ágiles son igualmente útiles tanto para el desarrollo de software de código abierto como de código cerrado: el Desarrollo a Velocidad de Internet , por ejemplo, es adecuado para el desarrollo de software de código abierto debido al principio de desarrollo distribuido que adopta. El Desarrollo a Velocidad de Internet utiliza equipos distribuidos geográficamente para "trabajar las 24 horas". Este método, adoptado principalmente por grandes empresas de código cerrado (porque son las únicas que pueden permitirse centros de desarrollo en diferentes zonas horarias), funciona igualmente bien en proyectos de código abierto porque un software desarrollado por un gran grupo de voluntarios tenderá naturalmente a tener desarrolladores repartidos por todas las zonas horarias.
Herramientas
Canales de comunicación
Los desarrolladores y usuarios de un proyecto de código abierto no necesariamente trabajan en el mismo lugar. Necesitan algún medio de comunicación electrónico. El correo electrónico es una de las formas de comunicación más comunes entre desarrolladores y usuarios de código abierto. A menudo, se utilizan listas de correo electrónico para asegurar que los mensajes lleguen a todos los interesados a la vez. Esto garantiza que al menos uno de los miembros pueda responder. Para comunicarse en tiempo real, muchos proyectos utilizan un método de mensajería instantánea como IRC . Los foros web se han convertido recientemente en una forma común para que los usuarios obtengan ayuda con los problemas que encuentran al usar un producto de código abierto. Las wikis se han vuelto comunes como medio de comunicación para desarrolladores y usuarios. [ 7 ]
Sistemas de control de versiones
En el desarrollo de software de código abierto, los participantes, que en su mayoría son voluntarios, están distribuidos en diferentes regiones geográficas, por lo que se necesitan herramientas que les ayuden a colaborar en el desarrollo del código fuente.
A principios de la década de 2000, el Sistema de Versiones Concurrentes (CVS) fue un ejemplo destacado de herramienta de colaboración de código fuente utilizada en proyectos de código abierto. CVS ayuda a gestionar los archivos y el código de un proyecto cuando varias personas trabajan en él simultáneamente. CVS permite que varias personas trabajen en el mismo archivo al mismo tiempo. Esto se logra moviendo el archivo a los directorios de los usuarios y luego fusionando los archivos cuando estos terminan. CVS también permite recuperar fácilmente una versión anterior de un archivo. A mediados de la década de 2000, se creó el sistema de control de versiones Subversion (SVN) para reemplazar a CVS. Está ganando terreno rápidamente como sistema de control de versiones para proyectos de código abierto. [ 7 ]
Muchos proyectos de código abierto utilizan ahora sistemas de control de versiones distribuidos , que escalan mejor que los repositorios centralizados como SVN y CVS. Ejemplos populares son Git , utilizado por el kernel de Linux , [ 8 ] y Mercurial , utilizado por el lenguaje de programación Python . [ 9 ]
Sistemas de seguimiento de errores y listas de tareas
La mayoría de los proyectos a gran escala requieren un sistema de seguimiento de errores para controlar el estado de los distintos problemas durante el desarrollo del proyecto.
Herramientas de prueba y depuración
Dado que los proyectos de código abierto (OSS) se integran con frecuencia, se utilizan herramientas que automatizan las pruebas durante la integración del sistema . Un ejemplo de ello es Tinderbox. Tinderbox permite a los participantes de un proyecto OSS detectar errores durante la integración del sistema. Tinderbox ejecuta un proceso de compilación continua e informa a los usuarios sobre las partes del código fuente que presentan problemas y en qué plataforma(s) se producen. [ 7 ]
Un depurador es un programa informático que se utiliza para depurar (y a veces probar u optimizar) otros programas. GNU Debugger (GDB) es un ejemplo de depurador utilizado en el desarrollo de software de código abierto. Este depurador ofrece depuración remota, lo que lo hace especialmente útil en el desarrollo de software de código abierto.
Una herramienta de detección de fugas de memoria o depurador de memoria es una herramienta de programación para encontrar fugas de memoria y desbordamientos de búfer . Una fuga de memoria es un tipo particular de consumo innecesario de memoria por parte de un programa informático, donde el programa no libera la memoria que ya no necesita. Ejemplos de herramientas de detección de fugas de memoria utilizadas por Mozilla son las herramientas XPCOM Memory Leak. Las herramientas de validación se utilizan para comprobar si las partes del código se ajustan a la sintaxis especificada. Un ejemplo de herramienta de validación es Splint .
Gestión de paquetes
Un sistema de gestión de paquetes es un conjunto de herramientas que automatizan el proceso de instalación, actualización, configuración y eliminación de paquetes de software en un ordenador. El Administrador de Paquetes de Red Hat (RPM) para archivos .rpm y la Herramienta de Empaquetado Avanzado (APT) para archivos .deb son sistemas de gestión de paquetes utilizados por varias distribuciones de Linux.
Publicitar un proyecto
Directorios de software y registros de versiones:
- Directorio de software libre
Artículos:
- Noticias semanales de Linux
- IBM developerWorks
Véase también
Referencias
- ↑ Raymond, ES (1999). La catedral y el bazar . O'Reilly. Recuperado de http://www.catb.org/~esr/writings/cathedral-bazaar/ .
- ↑ Bar, M. y Fogel, K. (2003). Desarrollo de código abierto con CVS , 3.ª edición. Paraglyph Press. ( ISBN) 1-932111-81-6)
- ↑ Sharma, S., Sugumaran, V. y Rajagopalan, B. (2002). Un marco para la creación de comunidades de software híbridas de código abierto . Information Systems Journal 12 (1), 7 – 25.
- ↑ Robbins, JE (2003). Adopción de prácticas de ingeniería de software de código abierto (OSSE) mediante la adopción de herramientas OSSE . Making Sense of the Bazaar: Perspectives on Open Source and Free Software, otoño de 2003.
- ↑ Abrahamsson, P., Salo, O. y Warsta, J. (2002). Métodos de desarrollo de software ágil: revisión y análisis . VTT Publications.
- ↑ Fuggetta, Alfonso (2003). "Software de código abierto: una evaluación". Journal of Systems and Software . 66 (1): 77– 90. doi : 10.1016/S0164-1212(02)00065-1 .
- 1 2 3 "Tim Berners-Lee en la web a los 25 años: pasado, presente y futuro" . Wired UK .
- ↑ "La grandeza de Git - Linux Foundation" . www.linuxfoundation.org . Consultado el 25 de agosto de 2023 .
- ↑ "PEP 385 – Migración de Subversion a Mercurial | peps.python.org" . Propuestas de mejora de Python (PEPs) . Consultado el 8 de enero de 2026 .
Lecturas adicionales
- Kavanagh, Paul (2004). Software de código abierto: implementación y gestión . Desarrollo de software. Ámsterdam - Boston: Elsevier Digital Press. ISBN 978-1-55558-320-0.
- Feller, Joseph, ed. (2005). Perspectivas sobre el software libre y de código abierto . Cambridge, Mass: MIT Press. ISBN 978-0-262-06246-6.
- Koch, Stefan, ed. (2005). Desarrollo de software libre y de código abierto . Hershey, Pa.: Idea Group Publ. ISBN 978-1-59140-370-8.
- Fogel, Karl (2005). Producción de software de código abierto: cómo gestionar un proyecto de software libre exitoso (1.ª ed.). Pekín; Sebastopol, CA: O'Reilly. ISBN 978-0-596-00759-1OCLC 62322583
- Muir, Scott P. (2005). Software de código abierto . Biblioteca de alta tecnología. Mark Leggott. Bradford: Emerald Publishing Limited. ISBN 978-1-84544-877-6.
- Feller, Joseph (2007). Desarrollo, adopción e innovación de código abierto: Grupo de trabajo 2.13 de IFIP sobre software de código abierto, 11-14 de junio de 2007, Limerick, Irlanda . IFIP Advances in Information and Communication Technology Ser. Brian Fitzgerald, Walt Scacchi, Alberto Sillitti. Nueva York, NY: Springer. ISBN 978-0-387-72485-0.
- Sowe, Sulayman K.; Stamelos, Ioannis G.; Samoladas, Ioannis M., eds. (2008). Prácticas emergentes de software libre y de código abierto . Hershey: IGI Pub. ISBN 978-1-59904-210-7OCLC 84838909
- Fogel, Karl (2009). Producción de software de código abierto: Cómo gestionar un proyecto de software libre exitoso . Sebastopol: O'Reilly Media, Inc. ISBN 978-0-596-00759-1.
- Engard, Nicole C. (2010). Software práctico de código abierto para bibliotecas . Serie para profesionales de la información de Chandos. Oxford: Chandos Publishing. ISBN 978-1-84334-585-5.
- Tucker, Allen B.; Morelli, Ralph; de Silva, Chamindra (2012). Desarrollo de software: Un enfoque de código abierto . Chapman and Hall/CRC Innovations in Software Engineering and Software Development Ser. Boca Raton: Chapman and Hall/CRC. ISBN 978-1-4398-1290-7.
- Haff, Gordon (2021). Cómo el código abierto devoró el software: Entienda el movimiento del código abierto y mucho más (2.ª ed.). Berkeley, CA: Apress LP ISBN 978-1-4842-6799-8.
Enlaces externos
- Software libre y de código abierto