Mostrando entradas con la etiqueta software libre. Mostrar todas las entradas
Mostrando entradas con la etiqueta software libre. Mostrar todas las entradas

jueves, 1 de mayo de 2014

Cómo colaborar en un proyecto de software libre(GitHub)?


En este post estaré explicando la manera de colaborar con un proyecto de software libre existente y de qué manera esto te puede ser útil.

Siempre que hacemos algo hay un motivo detrás: dinero, odio, aburrimiento, satisfacción, aventurarse, aprender y hasta porque sí! como comentan a veces los hackers ja. En el caso del desarrollo de software también aplican algunos de estos motivos, por ejemplo en mi caso me hice una cuenta en github con el objetivo de colgar algunos proyectos que pudiese integrar a mi portafolio de trabajo y en cunato me creé la cuenta me percaté de algo que señalan los estudiosos de la metodología de la investigación científica "...para resolver un problema, lo primero que necesitas es precisamente eso, tener un problema..." y he ahí el mio, uso aplicaciones básicas a diario y por lo general resuelven todas mis necesidades. Después de pasado algún tiempo tenía algunos proyecticos que creé para aprender mientras "jugaba" con alguna que otra biblioteca o framework, ya cuando me decidí a trabajar en algo en concreto revisé algunos proyectos existentes que me parecieran interesantes en busca de algún candidato con el que me gustaría colaborar finalmente seleccioné un wannabe de textmate(editor de texto de MAC OS X) el cual no mencionaré porque no viene al caso... El mismo día que fui a hacer mi fork vi un correo de embebidos32@googlegroups.com en el cual se comentaba algo acerca de un proyecto llamado CIAA, ja sorpresa, me olvidé de el editor, si eres una persona que le gusta la electrónica, la automatización, la domótica y todos estos temas relacionados con el software de/para sistemas embebidos, este es el proyecto que buscas, son infinitas las oportunidades que tienes para aprender al integrarte a este. Y esto solo de gratis...?, pués rsulta que no, el día que esté en busqueda de empleo y me pidan un currículo esta es otra de las cosas que puedo enseñar ya que es un proyecto bien fomentado, que además es de software libre por lo que mi código esta disponible a ser leido. Además de esto si eres argentino que trabaja con este tema de los embebidos o relacionados deberías estar al tanto de este proyecto y prever las oportunidades que este depara en un futuro cercano en la medida en que este sea adoptado por las compañías y centros educacionales(que hoy están trabajando en su desarrollo), en la página oficial puedes ver algunas de las multiples aplicaciones de este.

Los proyectos de software libre han cambiado el mundo del software. Detrás de la ejecución de tales proyectos se encuentran personas que dedican su tiempo a crear tecnologías abiertas en las que cualquiera puede contribuir. Hay una falsa creencia que para participar en estos proyectos es imprescindible ser un gran programador o tener mucho tiempo. Pero no, no es un requisito indispensable. Existen muchas formas de las que puedes ser colaborador de un proyecto de software libre, aunque casi siempre hay dos o tres que son unos genios,(Dennis Ritchie, Sara Sharp, Dave Jones, Linus Torvalds, Richard Stallman, …) el resto suelen ser personas común y corriente como tu y como yo y que para nada esto nos hace menos importantes, hay que tener en cuenta que hasta las más grandes obras se hacen a partir de la unión de pequeñas partes, y siempre tiene haber una primera vez para todo, donde verás que aprender es un proceso activo y no pasivo. Todo este comentario relacionado al hecho de que en los proyectos de software hay varios roles, no solo el de programar, además tener en cuenta que según Roger Pressman el software es un conjunto de uno o varios programas + un conjunto de documentos, aquí te dejo una lista no exaustiva de algunos de los roles que puedes asumir:

  • Integrarse en la comunidad y ayudar a su difusión.
  • Detección y la resolución de bugs.
  • Código del proyecto.
  • Documentar y crear ejemplos.
  • Traducción a diferentes idiomas.
  • Manual de usuario.
  • Testear.
  • Reportar bugs.
  • Otros...


Trabajar en el código del proyecto.
Yo en mi caso he seleccionado esta parte y de aquí el título del post que está dedicado principalmente a los que van escribir código nuevo para el proyecto y no se han decidido a empesar. Una de las primeras cosas que debes hacer es consultar cuál es el estilo de código del proyecto, para esto puedes buscar un archivo llamado HACKING en el código fuente en el que encontrarás información de este tipo, revisar en la wiki, escribir en las listas, e incluso si coincide que están usando alguno bien conocido y que además tu sepas reconocer es algo que queda implícito en el código, esto parecería una pavada pero busca los proyectos más famosos que conozcas y verás como cada uno guarda su propia formalidad como GNU, Linux, Qt, … la responsabilidad es otra de las buenas cosas que puedes aprender manteniendo el estilo y hacer los commit lo más oportunos posibles para que los desarrolladores más experimentados integren nuestro código en la rama principal en caso de haber hecho algo bueno, de no ser correcto, de seguro recibes algún comentario y esto también es bueno porque te hace aprender, no se pierde de ninguna manera :). Puedes comenzar por las partes que sean menos difíciles de integrar en el proyecto como hacer pruebas unitarias, probar la portabilidad, y de ahí podrías resultar por ejemplo el encargado de dar soporte a alguna plataforma que conozcas bien. Te puedes dedicar además a solucionar errores de los recién llegados, resolver tickets, y cualquier cosa que pueda ayudar a liberar los desarrolladores de manera que centren su esfuerso en el código.

Una vez entendido esto lo que sigue es seleccionar el proyecto en el que quieres colaborar, como comentaba en mi caso seleccioné CIAA (Computadora Industrial Abierta Argentina), específicamente la parte de software para PC. El primer paso es, estando en el repositorio “forkear” el repositorio.







Y ya tenemos el repositorio en nuestra cuenta.









Esto es necesario porque como es común no debes tener permiso directo sobre repositorio de los proyectos y cuando haces un fork en esa copia del proyecto cambian algunas cosas como por ejemplo la propiedad y por ende los permisos que ahora son plenos, entonces la idea es clonarte el repositorio desde su url(ver imagen), hacer los cambios, subirlos y hacer un pull rquest.







Empecemos a trabajar!
Luego de tener el repositorio en nuestra cuenta lo clonamos como comentaba(para este caso usaré https):
cd Software
git branch foo
git checkout foo
#editas tus cambios, durante días, semanas, …
#actualizas tu código, con las cosas que pudieran no estar en tu repo por el paso de los días.
#agregas tus cambios
git add .
git commit -m “no acepte estos cambios, es que estoy escribiendo un tuto”
~/Software (foo) [1]> git commit -m "no acepte estos cambios, es que estoy escribiendo un tuto"
[foo fa6051f] no acepte estos cambios, es que estoy escribiendo un tuto
4 files changed, 14 insertions(+), 10 deletions(-)

Subes los cambios a “tu fork”:
Username for 'https://github.com': testuser23
Password for 'https://testuser23@github.com':
Counting objects: 34, done.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (12/12), 1.09 KiB | 0 bytes/s, done.
Total 12 (delta 9), reused 0 (delta 0)
To https://github.com/testuser23/Software.git
* [new branch] foo -> foo

Es importante mencionar que se recomienda no hacer los cambios en la rama master, sino utilizar otras ramas, para comodidad y evitar perder otros cambios; el master se mantendrá solo para recuperar los últimos cambios del repositorio original.

El último paso para que nuestro aporte se haga efectivo en el repositorio es enviar un Pull Request y esperar a que el encargado del repositorio lo revise, acepte y mezcle en la rama correspondiente a la versión del software.

Hacemos click en "Compare & Pull Request", nos llevará a otra página donde podremos detallar nuestro Pull Request.








Si todo está bien, realizamos el envío con el botón "Send Pull Request".






Además de todo esto comentar que no es ético estar usando proyectos externos hosteados en github para estar haciendo tests por tanto yo no lo haré :)

Sobre todos estos tick puedes ver en el propio github.