Ir al contenido principal
Logo Ciencia Abierta

Código abierto

Sistemas de Control de Código

Lo principal para comenzar a compartir nuestro software es alojarlo en un sistema de control de versiones de código SCM (Source Code Management).

Un sistema de control de versiones de código debe poder almacenar los elementos a gestionar, realizar cambios sobre los resultados y mantener un histórico de los mismos. Estos sistemas de gestión cumplen los principios FAIR pensados para los datos de investigación. El código fuente se almacenará en un repositorio donde se crearán, modificarán y eliminarán elementos.

El sistema se encargará de gestionar revisiones, versiones, líneas y ramificaciones de desarrollo así como la consolidación de los desarrollos y solventar los conflictos entre diferentes versiones de un software modificado por varios usuarios.

La colaboración entre distintos usuarios para evitar que todos tengan su copia de código de forma local es otro de los fines de usar un un SCM. De esta manera evitamos tener que solventar los conflictos, juntar y mezclar todo el código para una nueva versión de forma manual con la posibilidad de error que puede llevar a ello.

 

Colaboración

 

Ejemplo uso SCM

En un ejemplo vemos como el código de toda la aplicación se mantiene en un repositorio de código (central o distribuido) y los usuarios descargan sendas versiones en su equipo de trabajo (copia local) mediante una operación checkout, ambos trabajan sin afectar el uno al otro. Al terminar sus modificaciones subirán los cambios al repositorio resolviendo antes los posibles problemas o conflictos en los cambios mediante una operación commit.

 

Ramas, versionado y etiquetado

 

Ramas de desarrollo

El mantenimiento del histórico se realiza con los sucesivos registros de las modificaciones en la base de datos del repositorio. De esta manera podemos ver todas las modificaciones realizadas a un fichero de código cualquiera, deshacer nuestros cambios, ir a una versión anterior, comparar diferencias, mezclar cambios, obtener una versión con un parcheo o nueva funcionalidad.

Las modificaciones se pueden agrupar en modificaciones sucesivas subidas al repositorio común, cuando una modificación se quiere aislar de la rama principal se crea una o varias ramas que avanzan de forma paralela y que después se podrán mezclar entre sí.

En el ejemplo de arriba se tiene una rama principal que en un momento dado se bifurca en una nueva rama de preproducción, a su vez esta se bifurca en la rama de desarrollo. Los cambios que se van realizando en la rama de desarrollo se probarán en la rama de preproducción mezclando antes ambas ramas. Una vez los cambios probados sin errores se mezclaran ambas ramas de preproducción y producción.

 

Ejemplos de sistemas de control de versiones

Algunos sistemas de control de código son:

  • CVS: uno de los primeros de código abierto y muy usado en el pasado. No incluía gestión de directorios pero si checkouts de lectura.
  • Subversion: Creado para sustituir a CVS y completarlo. Al igual que su predecesor los repositorios se crean en un servidor centralizado.
  • GIT: Diseñado por Linus Torvalds y usado en el proyecto del kernel de Linux. Es un sistema distribuido eficiente, confiable y compatible para mantener versiones de muchos archivos de código fuente.
  • Otros: Mercurial, Team Foundation, Arch, OpenCM, Arx. 

Plataformas de colaboración

También llamadas plataformas de forja sirven para cooperar y colaborar en el mantenimiento, difusión y soporte de software existen plataformas en internet donde poder encontrar proyectos de software. Estas plataformas son la ventana a la colaboración entre desarrolladores de todo el mundo a través de una interfaz web.

Estas plataformas permiten publicar los ficheros de código fuente, descargarlo, conectarlo con nuestras versiones locales, llevar la gestión de las diferentes versiones, ramas y etiquetado.

Para colaborar con algún proyecto de software en estas plataformas conectaremos el código con el repositorio de una de estas plataformas por ejemplo con una URL como (https://github.com/ProyectoComunidad).

Algunas plataformas son:

  • GITHUB: Usa GIT. Una de las más importantes plataformas, adquirida por Microsoft en 2018. Permite la gestión de repositorios alojados en la nube, conectarlo con repositorios locales, gestión de propuestas, proyectos, errores, debates, admisiones de código, proyectos y wiki. Además permite la gestión de usuarios y flujos de trabajo. Los usuarios pueden publicar sus repositorios públicos gratis de forma privada se debe asociar a una organización.
  • GITLAB: Basado en GIT. Tiene dos versiones una libre GitLab CE (Community Edition)  y otra privativa GitLab EE (Enterprise Edition). Permite gestión de repositorios, wikis y gestión de errores. También permite la gestión de flujos de trabajo DevOps.
  • BITBUCKET: Ofrece planes comerciales y gratuitos gestionando repositorios del control de versiones GIT y Mercurial. Permite repositorios públicos y privados.
  • SOURCEFORGE: Contiene gran cantidad de proyectos de software y también funciona como repositorio de código fuente.
  • GNU SAVANNAH: Proyecto de la Free Software Foundation permite la gestión de proyectos de software libre. Es bastante estricto en las políticas de publicación.
     
Integración Continua

 

La integración continua (Continuous Integration o CI) es la práctica basada en hacer integraciones de código, compilados, generación de versiones o automatización de pruebas a menudo para detectar y corregir fallos. Muchas de las plataformas de colaboración online antes descritas tienen flujos de trabajo que permiten realizar la integración continua o prepararla.

Estas habilidades de integración además de detectar y solucionar errores permiten tener versiones funcionales del software de forma continua. Además permite obtener métricas acerca del proyecto.

Además de GITHUB o GITLAB existen herramientas de integración continua como Jenkins, Apache Continuum o Hudson.

Otras funcionalidades que tienen las plataformas son los flujos de trabajo en el desarrollo, compilación, contenización y despliegue de la aplicación.

Evaluación y disponibilidad

En el marco de la ciencia abierta es importante dar un identificador persistente a nuestro código de investigaciones. Un DOI a nuestro código fuente puede ser generado e integrado por plataformas colaborativas como GITHUB y entre repositorios mayoritarios de acceso abierto como ZENODO.

La integración de herramientas colaborativas y repositorios como GITHUB y ZENODO.

A su vez también es importante citar el software usado en nuestras investigaciones a través de su DOI. Cuando no tengamos el identificador lo referenciaremos con la URL, el número de versión o la clave hash del envío del código.

 

Evaluar el software en su entorno

 

Muchas veces el software abierto desarrollado depende de otras plataformas, bibliotecas, software que requieren estar disponibles y configurados para ser probados y poder obtener resultados de estudio válidos. En este ámbito es donde entran en acción los contenedores.

Los contenedores permiten crear un entorno con todas las dependencias de nuestro software y todo lo necesario en la configuración del entorno. Un contenedor permite paquetizar un sistema operativo y permitir su ejecución virtualizada como un entorno aislado donde se tiene todo lo necesario para ejecutar el software a probar.

Tecnologías de contenedores son Docker y Kubernetes. Otras herramientas importantes son:

  • Binder: Permite crear entornos de computación para compartir y usar con usuarios en internet. Se usan para crear o publicar contenedores kubernetes.
  • Code Ocean: Similar al anterior donde poder publicar contenedores preparados.
     
  • Sala 1, Campus Alfonso XIII
  • Paseo Alfonso XIII, 48
  • Teléfono 968 32 5505
  • 30203 Cartagena
  • Sala 2, Campus Muralla del Mar
  • Plaza del Hospital, 1
  • Teléfono 968 33 8864
  • 30202 Cartagena
  • craibiblioteca@upct.es
  • Sala 3, Campus CIM
  • Calle Real, 3
  • Teléfono 868 07 1041
  • 30201 Cartagena

© UNIVERSIDAD POLITÉCNICA DE CARTAGENA - Pza. del Cronista Isidoro Valverde, Edif. La Milagrosa, CP. 30202 Cartagena. Tlf: 968 32 54 00.