Github es el centro neurálgico del mundo Open Source. En este enorme almacén de código se encuentran los principales proyectos de código abierto del mundo y todos, desde el programador aficionado hasta las grandes empresas, lo usan para publicar sus proyectos.
Pero cuando trabajas en un proyecto Open Source no siempre partes de cero ni es un proyecto propio. Lo más habitual, de hecho, es que colabores en un proyecto de alguien, aportando cambios para corregir errores, añadir características, etc...
¿Cuál es la mejor manera para iniciar esa colaboración? ¿es necesario que te pongas en contacto con el programador principal y que te añada como colaborador? ¿qué cosas debes tener en cuenta?
Localizar un buen proyecto Open Source
Si no vas a crear tu propio proyecto lo primero que debes hacer es localizar alguno que te interese y encaje con tus conocimientos y experiencia.
Obviamente lo primero es pensar qué tipo de programas, tecnologías o problemas te interesan, y puedes ir al propio buscador de GitHub y localizar por palabras clave, filtrando luego por los lenguajes de programación que domines y otros criterios.
GitHub también tiene lo que llaman "Project Showcases" que son proyectos que buscan colaboradores y que los ofrecen agrupados por categorías, facilitando mucho la búsqueda segmentada. Incluso tienen una categoría de "Proyectos ideales para nuevos contribuidores", aunque a mi los proyectos que sacan ahí me parecen demasiado complejos para un principiante.
Pero ni siquiera es necesario que escojas alguno de estos proyectos: cualquiera que ya conozcas bien porque lo usas en tus desarrollos, seguro que tiene bugs y sugerencias en la sección de "issues" en las que puedes colaborar, bien aportando soluciones, bien corrigiendo el problema y haciendo un Pull Request como veremos luego o incluso, por qué no, creando una buena documentación de algunas características, algo que de lo que adolecen la mayor parte de estos proyectos.
En fin, que opciones no te van a faltar. Lo difícil será decidirse por una sola 😉
Conocer con quién te juntas
Una vez que te decides por un proyecto debes observarlo con calma para ver varias cosas.
Lo primero es averiguar con qué frecuencia se actualiza el proyecto. Uno que lleve meses o años "muerto" quizá no te interese, aunque a lo mejor es que tiene poco que mejorar y tu idea aportará mucho. Otro que haga varias actualizaciones al día tampoco es muy conveniente salvo que tengas mucho tiempo libre y ya lo conozcas por dentro muy bien.
También debes ver quiénes son los colaboradores del proyecto:
- Está el "Owner" que es la persona u organización que han creado el proyecto y lo "fiscalizan".
- Los "Collaborators" y "Maintainers" son los que tiene acceso completo al escritorio y los que llevan la voz cantante sobre el proyecto y, generalmente, más contribuyen. A esos los tienen que añadir al proyecto explícitamente.
- Los "Contributors" o contribuidores, son los que tiene código mezclado con el tronco porque han aportado correcciones, añadidos, etc.. pero desde fuera del repositorio principal, mediante "Pull requests", como veremos enseguida.
- Los "Community Members" son los que han creado "Forks" del repositorio y por lo tanto, a priori, tienen intención de aportar al proyecto. También se suelen incluir aquí los que aportan con "incidencias" (conocidas como "Issues"), que comentan en diversas discusiones, etc... En general a la gente que le importa el proyecto.
La comunidad es muy importante en Open Source, así que hay que echarle un vistazo. GitHub también nos ayuda con esto y nos ofrece diversas maneras de ver este tipo de información, además de unas magníficas gráficas:
Empaparse del proyecto
Antes de intentar meterle mano al código conviene conocer el código actual y, por supuesto, el proyecto.
Todos los repos tienen un README.md que trata de resumir los objetivos y funcionalidades del proyecto. A veces también explican cómo se puede contribuir, aunque los más profesionales suelen tener un archivo CONTRIBUTING.md que detalla la condiciones para aceptar colaboraciones: desde cosas que más les interesan hasta estilo de escritura de código, los test que debes crear o pasar, etc... Y no te olvides de la licencia (archivo LICENSE) que explica qué se puede hacer con el proyecto y que a lo mejor no te convence.
Lee la documentación que haya pero, sobre todo, descárgate el código y examínalo con calma tratando de entender lo que se hace, ver si lo comprendes bien, si te convence la forma de hacer las cosas, etc... Antes de aportar normalmente debes conocer bien el código pre-existente. Por eso también creo que un proyecto muy grande no es apropiado para alguien que quiere empezar a colaborar. Mejor uno pequeño en estos casos.
Flujo de trabajo
Vale, si ya te has decidido y quieres empezar a tocar código, ¿cómo debes proceder? ¿le debes pedir permiso a alguien? ¿con quién debes hablar?
Pues lo cierto es que con nadie. El proceso de trabajo para colaboración en GitHub es bastante sencillo. Vamos a verlo:
1.- Crear un "Fork"
Creas un "Fork" del proyecto que te interesa, para lo cual tienes un botón justo en la parte de arriba de cualquier repositorio, que solo tienes que pulsar:
Esto crea una copia exacta del repositorio en tu propio perfil. Se trata de dos repositorios diferentes e independientes, pero que están "conectados". El tuyo es como si fuese una rama del anterior, aunque no lo sea (he subrayado en rojo cómo aparece en tu repo la referencia al original):
2.- Modifica tu copia para añadir tus aportaciones
Ahora, si ya tienes claro qué es lo que vas a tocar, salvo en cambios muy pequeños, lo normal es que abras una rama para tus modificaciones en tu copia del repo (en tu "fork") y que toques el código en ésta para hacer los cambios que creas oportunos.
Asegúrate de probar bien todo y de interferir lo menos posible con el código original para evitar o minimizar los conflictos cuando se haga la mezcla.
3.- Hacer un "Pull request"
Cuando estén listos tus cambios, pasen las pruebas, etc... puedes solicitar que el repo original adopte tus ideas haciendo lo que se llama un "Pull Request".
Básicamente consiste en pedirle al responsable del repo original que tome, desde la rama que has usado en tu copia, los cambios que has hecho, "bajándoselos" al repositorio original y mezclándolos con el código pre-existente.
Para hacer un Pull Request hay un apartado específico en el repositorio, con un botón muy prominente para hacerlo:
Al pulsarlo se nos muestra una comparación entre nuestro código y el código del repo original al que estamos haciendo la petición:
Debemos fijarnos en que no haya conflictos o es probable, que si no están muy justificados, nos nieguen el pull request.
Pulsamos el botón verde grande para crearlo y se nos da la oportunidad de comentar la operación. Este paso es crucial porque debemos expresar de la manera más clara y concisa posible qué es lo que estamos aportando, o sea el problema que estamos solucionado, la característica nueva que aportamos, etc... y porqué deberían aceptarla. Adjunta imágenes si crees que van a ayudar. Lo que sea, pero mejor no pasarse de largo ni quedarse corto.
4.- Esperar respuesta
Una vez hecha la petición ahora queda esperar a que respondan, lo cual puede tardar más o menos en función de lo ocupada que esté la persona responsable de revisarla, lo complejo que sea el código que le has enviado, etc...
Muchas veces comentarán en el pull request pidiendo más información o detalles. Deberías prestar atención para no perdértelos y poder contestar rápido.
Otras veces lo denegarán rápidamente, con suerte diciéndote por qué.
Y otras veces conseguirás lo que esperabas: que acepten los cambios, los mezclen con el tronco y tengas tu granito de arena aportando en un buen proyecto :-) ¡Objetivo conseguido! Ya eres "Contributor".
Si contribuyes mucho y te aceptan a menudo es posible que te pidan que te unas al equipo principal y seas "Maintainer" o "Collaborator". Genial.
En resumen
A través de este artículo he intentado explicar de manera rápida y sencilla de qué manera podemos contribuir a un proyecto Open Source en GitHub y qué pasos debemos seguir.
Si tienes tiempo y ganas es una de las mejores maneras de aprender, practicar, coger experiencia (e incluso curriculum) y sobre todo divertirte.
¡Ánímate a colaborar en algún proyecto!