Desarrollo de software de código abierto
Desarrollo de software de código abierto (OSSD) es el proceso mediante el cual un software de código abierto, o software similar cuyo código fuente esté disponible públicamente, se desarrolla mediante un proyecto de software de código abierto. . Son productos de software disponibles con su código fuente bajo una licencia de código abierto para estudiar, cambiar y mejorar su diseño. Ejemplos de algunos 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. En este libro, Raymond hace la distinción entre dos tipos de desarrollo de software. El primero es el desarrollo convencional de código cerrado. Este tipo de método de desarrollo es, según Raymond, como la construcción de una catedral; Planificación central, organización estricta y un proceso de principio a fin. El segundo es el desarrollo progresivo del código abierto, que se parece más a "un gran bazar de diferentes agendas y enfoques del que aparentemente sólo podría surgir un sistema coherente y estable mediante una sucesión de milagros". La última analogía apunta a la discusión involucrada en un proceso de desarrollo de código abierto.
Las diferencias entre los dos estilos de desarrollo, según Bar y Fogel, son en general el manejo (y creación) de informes de errores y solicitudes de funciones, y las limitaciones bajo las cuales trabajan los programadores. En el desarrollo de software de código cerrado, los programadores suelen dedicar mucho tiempo a tratar y crear informes de errores, así como a gestionar solicitudes de funciones. Este tiempo se dedica a crear y priorizar futuros planes de desarrollo. Esto lleva a que parte del equipo de desarrollo dedique mucho tiempo a estos temas, y no al desarrollo real. Además, en 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 cuestiones técnicas 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 permitiendo que estos usuarios construyan el sistema ellos mismos.
Modelo

El desarrollo de software de código abierto se puede dividir en varias fases. Las fases especificadas aquí se derivan de Sharma et al. A la derecha se muestra un diagrama que muestra la estructura de datos de proceso del desarrollo de software de código abierto. En esta imagen se muestran las fases del desarrollo de software de código abierto, junto con los elementos de datos correspondientes. Este diagrama se realiza utilizando las técnicas de metamodelado y modelado de metaprocesos.
Iniciar un proyecto de código abierto
Hay varias formas de comenzar a trabajar en un proyecto de código abierto:
- Un individuo que siente la necesidad de un proyecto anuncia la intención de desarrollar un proyecto en público.
- Un desarrollador que trabaja en una base de código limitada pero de trabajo, lo libera al público como la primera versión de un programa de código abierto.
- El código fuente de un proyecto maduro se publica al público.
- Un proyecto de código abierto bien establecido puede ser forjado 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 hacer público un proyecto en funcionamiento.
Es un error común iniciar un proyecto cuando contribuir a un proyecto similar existente sería más efectivo (síndrome NIH). Para iniciar un proyecto exitoso es muy importante investigar lo que ya existe. El proceso comienza con la elección entre adoptar un proyecto existente o iniciar un proyecto nuevo. Si se inicia un nuevo proyecto, 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á la gran variedad de programas de software y bibliotecas, que constan de fragmentos de código independientes. Algunos incluso podrían depender de otros proyectos de código abierto. Estos proyectos tienen un propósito específico y satisfacen una necesidad definida. Ejemplos de este tipo de proyectos incluyen el kernel de Linux, el navegador web Firefox y el conjunto de herramientas ofimáticas LibreOffice.
Las distribuciones son otro tipo de proyecto de código abierto. Las distribuciones son colecciones de software que se publican desde la misma fuente con un propósito común. El ejemplo más destacado de "distribución" es un sistema operativo. Hay muchas distribuciones de Linux (como Debian, Fedora Core, Mandriva, Slackware, Ubuntu, etc.) que incluyen el kernel de Linux junto con muchos componentes del usuario. Existen otras distribuciones, como ActivePerl, el lenguaje de programación Perl para varios sistemas operativos, y 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 sistema de control de revisiones; Desarrollando todo el sistema en conjunto como un solo equipo. Estos proyectos de desarrollo de sistemas operativos integran estrechamente sus herramientas, más que en otros sistemas basados en distribución.
Por último, está el proyecto de libro o documento independiente. Por lo general, estos artículos no se envían como parte de un paquete de software de código abierto. El Proyecto de documentación de Linux alberga muchos de estos proyectos que documentan diversos aspectos del sistema operativo Linux. Hay muchos otros ejemplos de este tipo de proyecto de código abierto.
Métodos
Es difícil ejecutar un proyecto de código abierto siguiendo un método de desarrollo de software más tradicional como el modelo en cascada, porque en estos métodos tradicionales no se permite volver a una fase anterior. En el desarrollo de software de código abierto, los requisitos rara vez se reúnen antes del inicio del proyecto; en cambio, se basan en versiones anteriores del producto de software, como describe Robbins. Además de los requisitos, a menudo se atrae personal voluntario para ayudar a desarrollar el producto de software basándose en las primeras versiones del software. Este efecto de red es esencial según Abrahamsson et al.: “si el prototipo presentado atrae suficiente atención, poco a poco empezará a atraer a más y más desarrolladores”. Sin embargo, Abrahamson et al. También señalan que la comunidad es muy dura, muy parecida al mundo empresarial del software de código cerrado: “si encuentras clientes sobrevives, pero sin clientes mueres”.
Fugetta sostiene que “la creación rápida de prototipos, 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 se pueden aplicar igualmente 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. De manera más general, 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 para el desarrollo de software de código abierto y cerrado: Internet-Speed Development, por ejemplo, es adecuado para el desarrollo de software de código abierto debido al principio de desarrollo distribuido que adopta. Internet-Speed Development utiliza equipos distribuidos geográficamente para "trabajar las 24 horas del día". Este método, adoptado principalmente por grandes empresas de código cerrado (porque son las únicas que cuentan con 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 debe Naturalmente, tienden a tener desarrolladores repartidos en todas las zonas horarias.
Herramientas
Canales de comunicación
No todos los desarrolladores y usuarios de un proyecto de código abierto necesariamente trabajan en el proyecto de forma cercana. Requieren algún medio electrónico de comunicación. El correo electrónico es una de las formas de comunicación más comunes entre los desarrolladores y usuarios de código abierto. A menudo, las listas de correo electrónico se utilizan para garantizar que los mensajes de correo electrónico se entreguen a todas las partes interesadas a la vez. Esto asegura 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. Recientemente, los foros web se han convertido en una forma común para que los usuarios obtengan ayuda con los problemas que encuentran al utilizar un producto de código abierto. Los wikis se han vuelto comunes como medio de comunicación para desarrolladores y usuarios.
Sistemas de control de versiones
En el desarrollo de OSS, los participantes, que en su mayoría son voluntarios, se distribuyen entre diferentes regiones geográficas, por lo que se necesitan herramientas que ayuden a los participantes 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 una herramienta de colaboración de código fuente utilizada en proyectos OSS. CVS ayuda a gestionar los archivos y códigos de un proyecto cuando varias personas trabajan en el proyecto al mismo tiempo. CVS permite que varias personas trabajen en el mismo archivo al mismo tiempo. Esto se hace moviendo el archivo a los directorios de los usuarios y luego fusionando los archivos cuando los usuarios hayan terminado. 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 revisiones Subversion (SVN) para reemplazar CVS. Está ganando terreno rápidamente como sistema de control de versiones de proyectos OSS.
Muchos proyectos de código abierto utilizan ahora sistemas de control de revisiones distribuidos, que escalan mejor que los repositorios centralizados como SVN y CVS. Ejemplos populares son git, utilizado por el kernel de Linux, y Mercurial, utilizado por el lenguaje de programación Python.
Rastreadores de errores y listas de tareas
La mayoría de los proyectos a gran escala requieren un sistema de seguimiento de errores para realizar un seguimiento del estado de varios problemas en el desarrollo del proyecto.
Herramientas de prueba y depuración
Dado que los proyectos OSS se integran con frecuencia, se utilizan herramientas que ayudan a automatizar las pruebas durante la integración del sistema. Un ejemplo de dicha herramienta es Tinderbox. Tinderbox permite a los participantes en un proyecto OSS detectar errores durante la integración del sistema. Tinderbox ejecuta un proceso de compilación continuo e informa a los usuarios sobre las partes del código fuente que tienen problemas y en qué plataformas surgen estos problemas.
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 aplicable al desarrollo de software de código abierto.
Una herramienta de pérdida de memoria o depurador de memoria es una herramienta de programación para encontrar pérdidas de memoria y desbordamientos de búfer. Una pérdida de memoria es un tipo particular de consumo innecesario de memoria por parte de un programa de computadora, donde el programa no logra liberar memoria que ya no es necesaria. Ejemplos de herramientas de detección de pérdidas de memoria utilizadas por Mozilla son las herramientas XPCOM Memory Leak. Las herramientas de validación se utilizan para comprobar si las piezas de código se ajustan a la sintaxis especificada. Un ejemplo de herramienta de validación es Splint.
Gestión de paquetes
Un sistema de administración de paquetes es una colección de herramientas para automatizar el proceso de instalación, actualización, configuración y eliminación de paquetes de software de una computadora. Red Hat Package Manager (RPM) para el formato de archivo.rpm y Advanced Packaging Tool (APT) para el formato.deb son sistemas de administración de paquetes utilizados por varias distribuciones de Linux.
Publicidad de un proyecto
Directorios de software y registros de versiones:
- El Directorio de Software Libre
Artículos:
- Linux Weekly News
- IBM developer Obras