Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Podcast On Collaboration. Git y Github como ecosistema de colaboración

Imago voragine.net

On Collaboration Podcast

En junio pasado tuve la oportunidad de participar en el primer programa del podcast On Collaboration, que explora en 5 episodios los recovecos de lo colaborativo. Del sitio web de On Collaboration:

5 enfoques distintos dan forma a los 5 PROGRAMAS del proyecto. Cada programa viene estructurado mediante una serie de secciones o PÍLDORAS transversales a todos ellos, de manera que el oyente se convierte en el último engranaje y editor de contenido resultado de este proceso colaborativo que es en sí mismo On Collaboration. Tú escoges qué y cómo organizas el contenido.

El primer programa, titulado Historias de la colaboración, está comisariado por Zuloark y Juanito Jones, se puede escuchar en web de On Collaboration.

Dentro de la sección de Herramientas para la colaboración del programa, estuve charlando con Manuel Pascual de Zuloark, sobre el potencial de git y github como ecosistemas de colaboración. Aquí el audio:

Dejo por aquí las notas que preparé, algo más estructuradas.

Git y Github

Github es un servicio web que permite compartir código. Para ello usa el sistema de control de versiones git.

Git empezó a usarse en 2005. Linus Tovards, el impulsor inicial de Linux, el núcleo de los sistemas operativos GNU/Linux, empezó a desarrollar este sistema de control de versiones para poder trabajar como quería en el desarrollo del núcleo de Linux. git se sigue usando para ello. El repositorio (así es como se llama a los proyectos de código en git y otros sistema de control de versiones) del núcleo de Linux pronto tendrá un millón de commits (pequeñas tareas que se van publicando y que forman el registro de cambios del proyecto) aportados por casi 20.000 desarrolladores.

La plataforma Github se lanza en 2008. Desde entonces se ha convertido en el mayor repositorio de código de internet, el lugar al que casi cualquiera acude para compartir su proyecto de código. Github usa git como sistema de control de versiones.

Qué es un sistema de control de versiones

Un sistema de control de versiones permite saber quién ha hecho qué en cada momento, qué persona ha hecho cada modificación. También permite volver a una versión anterior del proyecto ya que se guarda registro de cada cambio, de cada línea de código que se añade o se elimina. Quizás lo más importante es que permite trabajar colectivamente y de manera remota en el mismo proyecto.

Para entender lo que es un sistema de control de versiones quizás lo más fácil sea pensar en la Wikipedia. Cada contenido de Wikipedia tiene un registro de todas las versiones por las que ha pasado, qué usuario ha hecho cada cambio, en qué momento, e incluso pequeños comentarios de por qué se hicieron.

git, un sistema de control de versiones distribuido

Un sistema de control de versiones distribuido implica que el repositorio de código de un proyecto se replica completamente en todos los ordenadores de las personas que contribuyen a él. Así que un desarrollador puede trabajar localmente en ese repositorio sin conectarse a internet, y luego una vez que tenga conexión enviar los cambios al resto de copias del repositorio en los ordenadores de los otros desarrolladores. Es un sistema más seguro por diseño ya que no depende de una única máquina, el ordenador de cada desarrollador funciona como una copia de seguridad del repositorio.

Pero más que una cuestión de eficiencia es una cuestión de poder: no hay o no tiene por qué haber una autoridad central que controla el repositorio.

Los sistemas de control de versiones distribuidos permiten además trabajar de manera privada. En contextos en los que estamos permanentemente conectados y nuestra actividad tiende más y más a ser pública, necesitamos espacios de intimidad para experimentar, para probar cosas sin sentir que estamos siendo observados, evaluados o juzgados. Esto lo explica de maravilla Jeremmie Zimmerman, hacker y antiguo portavoz de La Quadrature du net en el documental Nothing to hide. Sin estos espacios de intimidad estamos sometidos incluso inconscientemente a una auto-censura que limita la creatividad.

Aunque fue concebido para desarrollar software, git se usa en otros contextos, por ejemplo para escribir textos colaborativamente, para mantener un registro del contenido de una web o para producir diseños entre varios diseñadores. En realidad git, y cualquier sistema de control de versiones, es como una máquina del tiempo que permite recorrer fácilmente el desarrollo de un proyecto de código hasta su comienzo, y hoy en día casi todo es código: un libro es código, un diseño es código.

Github como ecosistema de colaboración

Github se ha convertido en un ecosistema completo de colaboración. Es por supuesto una interfaz web que permite compartir repositorios de código y explorarlos. Tiene un servicio asociado que se llama Gist que permite compartir snippets, pequeños trozos de código reutilizable, pequeñas soluciones que se pueden usar en cualquier proyecto de código; en algunos casos también permite ver en acción ese código para hacerse una idea más fácilmente de para qué sirve sin tener que leerlo.

Además cada repositorio puede tener asociada una wiki que se suele usar para crear la documentación del proyecto; también un sistema de issues para notificar errores en el código, mejoras, ideas… y asignar esas nuevas tareas a desarrolladores específicos y organizarlas según su importancia y urgencia.

Github también es una red social para desarrolladores. Se puede seguir a otros usuarios, enviarles mensajes y formar grupos de trabajo asignando diferentes roles.

Conceptos que facilitan la colaboración

Usar git y también Github cambia la manera de desarrollar un proyecto de código. Hay varios conceptos que facilitan el trabajo colaborativo.

El commit

Un commit es una pequeña tarea. Es la unidad que va definiendo el desarrollo del proyecto. Siempre tiene asociado una descripción y un usuario. Todos los cambios que cualquier desarrollador va haciendo se incorporan al proyecto usando commits. Esto permite organizar el trabajo en pequeñas tareas que se ejecutan rápidamente, lo cual define la manera de trabajar. Pero sobre todo la manera de compartir el código: los commits ayudan a compartir rápida y frecuentemente el trabajo con el resto de desarrolladores. Esta alta frecuencia de publicación es muy importante para que todo el mundo sepa en que están trabajando otros desarrolladores, para poder tener feedback y facilitar la coordinación.

Branch o rama

Las ramas permiten hacer desarrollos en paralelo dentro del mismo proyectos de código. Esto permite dejar un desarrollo en pausa porque aparece una urgencia, que se empieza a desarrollar en otra rama, o desarrollar dos soluciones diferentes para el mismo problema de manera simultánea. Las ramas llevan asociadas otro concepto, merge, la unión de dos ramas de desarrollo, fundamental para incorporar en la rama principal los desarrollos de otras ramas.

Fork o tenedor

Un fork consiste en una bifurcación de un proyecto de código, a partir de la cual hay dos desarrollos en paralelo. El concepto es análogo al de branch pero es más irreversible. Los forks permiten seguir adelante cuando hay posiciones divergentes, en lugar de bloquear el desarrollo. Esto es posible porque todo el código es abierto y el sistema de control de versiones distribuido, con lo que cualquier persona o grupo tiene acceso a todo el código.

Las ramas y las bifurcaciones son herramientas muy importantes para evitar coacciones y neutralizar desequilibrios de poder dentro de una comunidad de desarrollo. Y también para evitar bloqueos causados por discusiones y posiciones enfrentadas.

También hay que pensar en las bifurcaciones como dos caminos que, aunque en el momento de separarse parecen irreconciliables, en el futuro pueden alimentar el mismo interés, caminar hacia un horizonte común. Un buen ejemplo de esta idea es el árbol de distribuciones de GNU/Linux, que se van alimentando unas a otras a pesar de haberse separado hace años.

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks