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.
git
pull https://github.com/ciaa/Software.git
master
#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”:
git
push https://github.com/testuser23/Software.git
foo
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.