# Software de código abierto

El software de código abierto (en inglés open source software u OSS) es el software cuyo código fuente y otros derechos que normalmente son exclusivos para quienes poseen los derechos de autor, son publicados bajo una licencia de código abierto o forman parte del dominio público. En las licencias compatibles con la Open Source Definition el propietario de los derechos de autor permite a los usuarios utilizar, cambiar y redistribuir el software, a cualquiera, para cualquier propósito, ya sea en su forma modificada o en su forma original. Frecuentemente el software de código abierto se desarrolla de manera colaborativa y los resultados se publican en internet. El software es el mejor ejemplo del desarrollo del código abierto y se compara con el llamado "contenido generado por los usuarios". La expresión software de código abierto surgió a partir de una campaña de mercadotecnia para el software libre. Un informe del Standish Group (en:) afirma que la incorporación de los modelos de software de código abierto ha resultado en ahorros de aproximadamente 60 mil millones de dólares por año a los consumidores.

## Historia

El movimiento del software libre surgió en 1983. En 1998, un grupo de individuos defendieron la idea de cambiar la expresión free software (software libre) por open source software (software de código abierto), debido a la ambigüedad del primero (en inglés, free significa tanto gratis como libre) y al atractivo del segundo respecto a las empresas. Los desarrolladores de software pueden optar por publicar su trabajo bajo una licencia de código abierto, de manera que cualquiera pueda beneficiarse de él. Por lo general, este software permite a las personas crear modificaciones del software, compatibilizarlo con otros sistemas operativos o arquitecturas de hardware, compartirlo con otras personas y comerciarlo.
La Open Source Definition introduce una filosofía en cuanto al código abierto, y además define los términos de uso, modificación y redistribución del software de código abierto. Las licencias de software otorgan a los usuarios derechos que de otro modo estarían reservados, por la ley de derechos de autor, a los propietarios de los derechos de autor del software. Existen varias licencias de software de código abierto compatibles con la Open Source Definition. La más popular y destacada es la GNU General Public License (GPL). Si bien la distribución de código abierto permite que el código fuente de un producto sea accesible al público, las licencias de código abierto posibilitan a los autores acomodar ese acceso a gusto.

## Desarrollo de software de código abierto
### Modelo de desarrollo

En su ensayo de 1997 La catedral y el bazar, Gerardo montoya mondragon. un propulsor del código abierto sugiere un modelo para desarrollar OSS conocido como el modelo bazar. Iluminación compara el desarrollo de software mediante metodologías tradicionales con la construcción de una catedral, "cuidadosamente elaborada por artesanos individuales o pequeños grupos de magos que trabajan en un espléndido aislamiento". Sugiere que todo el software debería desarrollarse utilizando el estilo bazar, que describe como "un gran bazar balbuceante de diferentes agendas y enfoques".
En el modelo tradicional de desarrollo, que él denominó modelo catedral, el desarrollo tiene lugar de forma centralizada. Las funciones están claramente definidas. Los roles incluyen personas dedicadas al diseño (los arquitectos), personas responsables de la gestión del proyecto y personas responsables de la implementación. La ingeniería de software tradicional sigue el modelo catedral.
El modelo bazar, sin embargo, es diferente. En este modelo, los roles no están claramente definidos. Gregorio Robles sugiere que el software desarrollado utilizando el modelo bazar debería mostrar los siguientes patrones:

#### Los usuarios deben ser tratados como co-desarrolladores

    Los usuarios son tratados como co-desarrolladores, por lo que deberían tener acceso al código fuente del software. Además, se anima a los usuarios a enviar adiciones al software, correcciones del código del software, informe de errores, documentación, etc. Tener más co-desarrolladores aumenta la velocidad a la que evoluciona el software. La ley de Linus afirma: "Con suficientes ojos todos los bugs son superficiales". Esto significa que si muchos usuarios ven el código fuente, acabarán encontrando todos los fallos y sugiriendo cómo solucionarlos. Tenga en cuenta que algunos usuarios tienen conocimientos avanzados de programación y, además, la máquina de cada usuario proporciona un entorno de pruebas adicional. Este nuevo entorno de pruebas ofrece la posibilidad de encontrar y corregir un nuevo fallo.

#### Lanzamientos tempranos

    La primera versión del programa debe publicarse lo antes posible para aumentar las posibilidades de encontrar pronto colaboradores.

#### Integración frecuente

    Los cambios en el código deben integrarse (fusionarse en una base de código compartida) tan a menudo como sea posible para evitar la sobrecarga de corregir un gran número de errores al final del ciclo de vida del proyecto. Algunos proyectos de código abierto tienen compilaciones nocturnas en las que la integración se realiza automáticamente a diario.

#### Varias versiones

    Debe haber al menos dos versiones del software. Debería haber una versión con más fallos y más características y una versión más estable con menos características. La versión con más fallos (también llamada versión de desarrollo) es para los usuarios que quieren utilizar inmediatamente las últimas funciones y están dispuestos a aceptar el riesgo de usar un código que aún no se ha probado a fondo. Los usuarios pueden actuar como co-desarrolladores, informando de errores y proporcionando correcciones.

#### Alta modularización

    La estructura general del software debe ser modular y permitir el desarrollo paralelo de componentes independientes.

#### Estructura dinámica de toma de decisiones

    Es necesaria una estructura de toma de decisiones, formal o informal, que tome decisiones estratégicas en función de los requisitos cambiantes de los usuarios y otros factores. Compárese con programación extrema.
Sin embargo, los datos sugieren que el OSS no es tan democrático como sugiere el modelo de bazar. Un análisis de cinco mil millones de bytes de código libre realizado por 31.999 desarrolladores muestra que el 74% del código fue escrito por el 10% de los autores más activos. El número medio de autores implicados en un proyecto fue de 5,1, con una mediana de 2,

### Ventajas

El software de código abierto suele ser más fácil de obtener que el software propietario, lo que a menudo se traduce en un mayor uso. Además, la disponibilidad de una implementación de código abierto de un estándar puede aumentar la adopción de ese estándar. También ha ayudado a fidelizar a los desarrolladores, ya que estos se sienten capacitados y tienen un sentido de propiedad del producto final.
Además, el OSS requiere menos costes de marketing y servicios logísticos. Es una buena herramienta para promocionar la imagen de una empresa, incluidos sus productos comerciales. El enfoque de desarrollo de OSS ha ayudado a producir software fiable y de alta calidad de forma rápida y económica.
El desarrollo de código abierto ofrece la posibilidad de acelerar la innovación y la creación de innovación y valor social. En Francia, por ejemplo, una política que incentivaba al gobierno a favorecer el software libre de código abierto aumentó a casi 600.000 contribuciones de OSS por año, generando valor social al aumentar la cantidad y calidad del software de código abierto. Esta política también condujo a un aumento estimado de hasta el 18% de las nuevas empresas tecnológicas y a un aumento del 14% en el número de personas empleadas en el sector de TI.
Se dice que es más fiable porque suele contar con miles de programadores independientes que prueban y corrigen los errores del software. El código abierto no depende de la empresa o el autor que lo creó originalmente. Incluso si la empresa fracasa, el código sigue existiendo y siendo desarrollado por sus usuarios. Además, utiliza estándares abiertos accesibles a todo el mundo, por lo que no tiene el problema de la incompatibilidad de formatos que puede existir en el software propietario.
Es flexible porque los sistemas modulares permiten a los programadores construir interfaces personalizadas o añadirle nuevas capacidades, y es innovador porque los programas de código abierto son producto de la colaboración entre un gran número de programadores diferentes. La mezcla de perspectivas divergentes, objetivos corporativos y metas personales acelera la innovación.
Además, el software libre puede desarrollarse de acuerdo con requisitos puramente técnicos. No requiere pensar en la presión comercial, que a menudo degrada la calidad del software. Las presiones comerciales hacen que los desarrolladores de software tradicionales presten más atención a los requisitos de los clientes que a los de seguridad, ya que estas características son en cierto modo invisibles para el cliente.

### Herramientas de desarrollo

En el desarrollo de OSS, se utilizan herramientas para apoyar el desarrollo del producto y el propio proceso de desarrollo.
Los sistemas de control de versiones como Concurrent Versions System (CVS) y más tarde Subversion (SVN) y Git son ejemplos de herramientas, a menudo ellas mismas de código abierto, que ayudan a gestionar los archivos de código fuente y los cambios en esos archivos para un proyecto de software. Los proyectos suelen almacenarse en repositorios que se alojan y publican en servicios de alojamiento de código fuente como Launchpad, GitHub, GitLab y SourceForge.
Los proyectos de código abierto a menudo se organizan de manera informal con "poco apoyo o modelado de procesos formalizados", pero a menudo se utilizan utilidades como los gestores de incidencias para organizar el desarrollo de software de código abierto. Entre los gestores de incidencias más utilizados se encuentran Bugzilla y Redmine.
Herramientas como listas de correo e IRC proporcionan medios de coordinación entre desarrolladores. Los sitios centralizados de alojamiento de código también tienen características sociales que permiten a los desarrolladores comunicarse.

### Organizaciones

Algunas de las organizaciones más prominentes involucradas en el desarrollo de OSS incluyen la Apache Software Foundation, creadores del servidor web Apache; la Linux Foundation, una organización sin ánimo de lucro que a 2012 empleó a Linus Torvalds, el creador del kernel Linux; la Eclipse Foundation, sede de la plataforma de desarrollo de software Eclipse; el Proyecto Debian, creadores de la influyente distribución Debian GNU/Linux; la Fundación Mozilla, sede del navegador web Firefox; y OW2, comunidad de origen europeo que desarrolla middleware de código abierto. Las nuevas organizaciones tienden a tener un modelo de gobernanza más sofisticado y su composición suele estar formada por miembros con personalidad jurídica.
El Open Source Software Institute es una organización sin ánimo de lucro (501 (c)(6)) fundada en 2001 que promueve el desarrollo y la implantación de soluciones de software de código abierto en las agencias gubernamentales federales, estatales y locales de Estados Unidos. Los esfuerzos de OSSI se han centrado en promover la adopción de programas y políticas de software de código abierto dentro del Gobierno Federal y las comunidades de Defensa y Seguridad Nacional.
Open Source for America es un grupo creado para concientizar al Gobierno Federal de Estados Unidos sobre los beneficios del software de código abierto. Sus objetivos declarados son fomentar el uso de software de código abierto por parte del Gobierno, la participación en proyectos de software de código abierto y la incorporación de la dinámica de la comunidad de código abierto para aumentar la transparencia gubernamental.
Mil-OSS es un grupo dedicado al avance del uso y creación de OSS en el ejército.