Los desarrolladores están en constante búsqueda de librerías en GitHub, Bitbucket o cualquier otro servicio Git que exista en internet. El problema es que cuando encuentras esa librería, no se adapta a tus necesidades, ejemplo: falta algún método que a los maintainers no les interesa, no es prioridad o en el peor de los casos, el repositorio se encuentra en estado de "sin mantenimiento".

Esto en el mundo de los desarrolladores sucede de manera frecuente, y dependiendo de lo que se necesite, si es algo que puede beneficiar a toda la comunidad, por lo general se abre un issue indicando la falta de ese feature. Esto puede terminar en un "si, lo tenemos pensado realizar pero no ahora", "no, nos sirve para nada" o ninguna respuesta porque el repositorio está abandonado.

A lo largo del tiempo, he desarrollado muchas librerías sobre todo API wrappers en Python para un proyecto llamado GearPlug y por supuesto dejo los repositorios públicos en Github para que otros desarrolladores que los necesiten puedan usarlos. En la mayoría de los casos, otros desarrolladores han colaborado en estas librerías enviando códigos para mejorarlas, lo cual agradezco mucho, pero en otros casos, he visto que otros desarrolladores se han abstenido a colaborar, y preguntan (o piden) si se puede hacer alguna mejora específica o agregar alguna que otra cosa.

GearPlug
Connecting you everywhere. GearPlug has 39 repositories available. Follow their code on GitHub.

La pregunta que me hago es, ¿será que no tienen la iniciativa de colaborar porque no tienen los conocimientos necesarios para hacerlo? A ellos va dirigida esta publicación, a los que creería yo, van comenzando este viaje en el mundo de la programación, para dar una breve introducción a Git Fork y Pull Request.

Fork del repositorio

Realizar un Fork del repositorio es la simple acción de crear tu propia copia del mismo, en donde puedes realizar los cambios de código necesarios para agregar ese nuevo feature, mejorar el código en general o tomar ese código existente como base para desarrollar algo mucho más grande, digamos, un nuevo proyecto con un enfoque distinto a lo que originalmente se tenía pensado.. ¿Por qué no?.. Mientras el tipo de licencia del repositorio sea ampliamente abierta como MIT, puedes hacer esto.

Pero para mantener este post sin complicaciones, concentrémonos a simplemente agregar un nuevo método que le sirva a toda la comunidad, entonces, haces Fork del repositorio desde el sitio web, lo clonas localmente, creas un branch con nombre del objetivo del nuevo feature, envías los commits con los cambios necesarios y la pregunta que queda es ¿ahora qué?. Ahora, hay muchas opciones, puedes mantener tu propia versión por tu cuenta, instalarlo en tus proyectos o contribuir al repositorio haciendo un Pull Request (PR).

Pull Request del feature

Un PR es la manera de decirle a los maintainers de un repositorio que has sugerido cambios de código en su repositorio, con una finalidad muy específica, un feature, de esta forma ellos pueden revisar, discutir y finalmente hacer merge del código o rechazarlo. Ellos también pueden sugerir cambios antes de aceptarlo, por lo que no importa si habías hecho el PR, puedes actualizar tu branch y actualizar el PR.

En caso de aceptarlo, habrás contribuido con el repositorio, que a su vez es una comunidad de desarrolladores que dependen de ese proyecto, lo cual no está nada mal, además aparecerás en la lista de contributors del repositorio. Parece cualquier tontería, pero no lo es, no todos tienen la iniciativa de contribuir, lo cual si te pones a pensar, es el principio que mantiene a toda una comunidad viva y es a lo que te quiero invitar, a contribuir.

Mi opinión

A menos de que el cambio a realizar sea para algo muy diferente al propósito del proyecto, siempre contribuir a los repositorios existentes para mejorar la que ya existe, de esta manera estoy seguro que estarán muy agradecidos. Para esto es necesario identificar si el proyecto acepta contribuciones mediante PR, por lo general está escrito en el README.md, en caso de no estar especificado, se puede preguntar abriendo un issue.

Solicitar mediante issue la incorporación de algún feature que tu mismo puedes contribuir significa falta de colaboración, ya que los maintainers no necesariamente tienen el tiempo para desarrollar cosas nuevas, por lo que es más fácil que en vez de solicitar, tu puedas aportar, además esto mantiene el principio de colaboración de cualquier proyecto open source.

Por último, también se dan casos de repositorios abandonados, lo que yo haría es abrir un issue y pedir el repositorio para mantenerlo, y de nunca obtener respuesta, solo en este caso haría un Fork del proyecto y mantendría el mismo en mi propia versión siempre y cuando se le de créditos al proyecto original.

Espero haber ayudado muy ligeramente a animarte a contribuir, ¡Happy coding!