Infraestructura técnica
La infraestructura técnica necesaria para alojar un proyecto de software libre consta típicamente de diferentes elementos y herramientas, muchas veces vinculadas entre sí de maneras complejas. En este capítulo recomendamos algunas herramientas y prácticas de uso común en el sector.
Un principio general que se ve concretado en las medidas de este capítulo es que las personas que participan en un proyecto nunca se tienen que ver obligadas a instalar software privativo en sus máquinas.
Sitios web asociados al proyecto
Un proyecto de software puede tener típicamente dos tipos de sitio web:
Una web de desarrollo, orientada a personas que contribuyen al proyecto con código o documentación técnica contratadas por el Ayuntamiento o no
Una web orientada a personas usuarias y participantes en general. Eso incluye a personas o entidades que puedan querer instalar y usar el software fuera del Ayuntamiento, pero también a personas interesadas en el proyecto aunque no sean usuarias directas del software. En esta web se tiene que facilitar la participación en el proyecto e incentivarla con contribuciones menos (o nada) técnicas: financiación, documentación de usuario, test de pre-releases, difusión, traducciones, etcétera.
Normalmente los dos tipos de contenido son necesarios, pero no siempre se requiere que se encuentren en dos sitios separados, con nombres de dominio diferentes. En cada proyecto que lidere, el Ayuntamiento tendrá que valorar hasta qué punto las necesidades y mentalidades de los dos conjuntos de personas son diferentes, y resulta, por lo tanto, imposible que un único modelo de web se adecue a los dos grupos.
En el apartado [Code Repositorio de código y control de versiones] se explica cómo crear la web de desarrollo, que es la única que se necesita desde el principio. A medida que el proyecto crece, se puede valorar si se requiere también un sitio orientado a otros perfiles de participante.
Lo que sí es interesante tener desde el principio es un nombre de dominio propio (o una URL permanente bajo algún dominio del Ayuntamiento), que, si es necesario, se pueda redirigir hacia donde se encuentre inicialmente la web del proyecto (posiblemente un sitio como GitHub).
Repositorio de código y control de versiones
Un elemento central de la web de desarrollo de un proyecto es un repositorio de código —público y bajo control de versiones— que sirva de base para centralizar las modificaciones que tienen que formar parte de cada nueva entrega (release) del producto.
En el escenario NuevoProducto
o Plugin
, el Ayuntamiento tendrá que crear
este repositorio. En el caso de una integración o adaptación, el
Ayuntamiento tendrá su propia copia (clone o fork) del repositorio original
(upstream), donde centralizará los trabajos correspondientes a las
modificaciones de su interés. A este repositorio que crea el Ayuntamiento, y
que sirve para realizar las entregas de un producto original o para
centralizar las contribuciones a un proyecto externo, lo denominaremos
repositorio principal. Pueden existir muchas otras copias públicas y
privadas del código.
El Ayuntamiento está reconsiderando la plataforma que se utilizará para alojar cosas como los repositorios de código públicos o los gestores de incidéncias de cada proyecto. Los primeros proyectos de software libre del Ayuntamiento han utilizado GitHub, pero ahora queremos pasar a una plataforma que:
Las numerosas referéncias a GitHub en las siguientes secciones serán sustituídas cuando se tome una decisión. Hace fatla tener en cuenta las ventajas de GitHub que se indiquen a continuación para escoger una alternativa. Cualquier alternativa tiene que ofrecer garantías similares cuanto a durabilidad y sostenibilidad. Una posibilidad viable es una instalación autogestionada de Gitlab. Hay un caso de uso reigido por la administración pública en Francia. |
Como se indica en las medidas de más abajo, el repositorio principal se alojará en GitHub, un servicio que utiliza Git como sistema de control de versiones distribuido. El vocabulario y los conceptos fundamentales para entender su funcionamiento se puede encontrar en Version Control Vocabulary.
Hay muchas alternativas viables y razonables a GitHub, e incluso algunas alternativas viables a Git como software de control de versiones, pero GitHub ofrece bastantes ventajas como para ser la opción por defecto:
-
La mayoría de desarrolladores la conocen y no tienen que aprender nuevas herramientas y procedimientos ad hoc para el proyecto.
-
Lanza el mensaje de que el proyecto está abierto a colaboración.
-
Ofrece una buena integración con el resto de infraestructura técnica y social de un proyecto: gestión de incidencias, integración continua, canales de comunicación para desarrollo, etcétera.
-
Permite también guardar y mostrar (parte de) la documentación de un proyecto, que puede ser una wiki. La presentación de la información es lo bastante agradable como para permitir emplear la construcción de una web orientada a personas usuarias y participantes en general del proyecto.
-
Es la plataforma más utilizada por proyectos de software libre, da mucha visibilidad.
Inconveniente: GitHub no es 100 % libre. A pesar de ser un servicio gratuito para un gran abanico de posibles usos, no todo el código de la infraestructura que hay detrás de GitHub es libre, y en última instancia se está estableciendo una dependencia con una empresa que no sabemos cómo evolucionará en el futuro. |
Gestor de incidencias
Una herramienta que todos los proyectos de software libre necesitan es un gestor de incidencias. En los proyectos del Ayuntamiento le asignaremos las siguientes funciones:
-
Notificar los defectos detectados (bug tracker) por parte tanto de usuarios como de desarrolladores, así como hacer transparente el tratamiento, evolución y eventual solución. Es importante que los commits que resuelven un defecto lo señalen en su mensaje. GitHub tiene una sintaxis especial para ello.
-
Hacer seguimiento de las tareas pendientes, lo que permite después vincular uno o más commits con el cierre de una tarea. Asimismo, poder ver a quién se asignan las tareas y cómo se priorizan. Opcionalmente, se pueden especificar fechas estimadas de realización. Todo ello contribuye a la transparencia y trazabilidad del proceso de desarrollo.
-
Hacer seguimiento de cómo se gestionan las contribuciones de diferentes partes, mediante el mecanismo de pull request. Incluso se puede abrir el gestor de incidencias a peticiones de funcionalidades (feature request) y se puede utilizar el espacio de GitHub como sitio donde se priorizan y gestionan de manera pública.
Debe tenerse en cuenta que el gestor de incidencias no es solo importante para el día a día de los desarrolladores, sino que muchos observadores del proyecto también lo utilizan como medida para saber hasta qué punto están ante un proyecto serio.
Este gestor de incidencias tiene que estar operativo y ser público durante toda la vida útil del producto, más allá de la duración que tengan los contratos con el Ayuntamiento.
Canales de comunicación internos y externos
Los primeros canales de comunicación entre desarrolladores son los mensajes de commit del repositorio y los hilos del gestor de incidencias. Muchas decisiones técnicas se toman en estos hilos, pero es conveniente que las discusiones que se llevan a cabo estén siempre muy focalizadas y sean estrictamente técnicas. Cuando el ámbito de la discusión se amplía, hay que recurrir a otros canales.
Todos los proyectos nuevos tienen que crear inicialmente una lista de correo o foro de discusión para desarrollo, con archivos públicos. En este canal es donde se pide la opinión a las diferentes partes o personas que participan en el proyecto, y donde se toman las decisiones estratégicas.
Inicialmente habrá poca distancia en cuanto a inquietudes y lenguaje entre los desarrolladores y los primeros usuarios (early adopters), que suelen estar muy motivados. Por eso, en muchos casos podrán compartir el mismo canal. Más adelante puede ser necesario crear canales de comunicación especializados para los diferentes tipos de participante.
Dependiendo de la naturaleza y composición del equipo, puede resultar conveniente disponer también de un chat que permita una comunicación más inmediata. De todos modos, el chat es complementario a la lista o foro, nunca los tiene que sustituir. La lista o foro es donde queda registrada de forma referenciable toda la historia del proyecto (debates, decisiones, etcétera), que constituye un activo muy valioso para toda la comunidad presente y futura del proyecto.