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.
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.
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.
Algunos sistemas de control de código son:
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:
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.
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.
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:
© UNIVERSIDAD POLITÉCNICA DE CARTAGENA - Pza. del Cronista Isidoro Valverde, Edif. La Milagrosa, CP. 30202 Cartagena. Tlf: 968 32 54 00.