Kabosu - Creando cosas
Publicado: 2025-02-15
Etiquetas: Git, Linux, Proyectos
Buenos días, tardes o noches:
Ya comenté en su día que estaba intentando aprender "a fondo" Linux y había elegido Alpine Linux por ser una de las distribuciones más pequeñas. En este artículo voy a comentar el proceso que seguí y cómo envié un parche para hacer un pequeño cambio en el código de un programa.
Yo ya tengo un conocimiento medio-alto sobre los aspectos básicos de Linux (y Unix): permisos, procesos, programas básicos, etc. Incluso puedo apañármelas para hacer cambios en el kernel. Como ya tengo una buena base puedo coger un sistema y ponerme a mirar por mi cuenta qué hace, consultado en el buscador lo que no sepa.
El método que seguí fue bastante bruto. Instalé Alpine Linux en una pequeña máquina virtual y nada más iniciarlo, como ocupaba menos de 200MB, me guardé en un fichero un listado de todos los que había en el sistema: programas en /bin
o /sbin/
, ficheros de configuración en /etc
... todo. Luego durante un par de días fui leyendo la lista y me hice una lista de "tareas de aprendizaje". En ella ponía comandos que había visto y que no conocía como scanelf
o aquellos que sí que conocía pero me interesaba aprender más como sed
. Poco a poco he ido tachando tareas de la lista y creo que estoy aprendiendo bastante. La lista aún tiene 15 cosas que quiero hacer.
Me di cuenta de que había algunas lagunas en la documentación. Encontré al menos media docena de programas que no tenían página de ayuda en man
. Algunos de ellos no tenían ni argumento -h
para mostrar una explicación sobre qué hacen. No fue difícil encontrar en internet qué hacía cada uno y ver su código fuente pero que no haya nada de información sobre un binario que tenía instalado en Linux no me gustaba.
Uno de los "indocumentados" era parte del propio sistema Alpine Linux y al leer su código fuente vi que tenía varios TODOs con tareas pendientes. Una de ellas era añadir usage
. Es decir, que al ejecutarlo con -h
mostrase una ayuda de uso. Apunté como tarea de aprendizaje añadir ese código y aportarlo al proyecto.
Dos meses después fue aprendiendo cosas de mi lista de tareas y por fin me animé a hacer el cambio. Me abrí una cuenta en el Gitlab de Alpine Linux, que es donde guardan todo el código del proyecto, y me cercioré de que el TODO siguiera estando. Lo estaba.
El cambio en sí no me costó demasiado. Había que añadir un bucle que leyera las opciones con getopt
y realmente solo había una opción (-h
). Me costó unos minutos escribir el código y luego casi una hora escribir el mensaje de mi pull request explicando porqué estaba mandando ese cambio tan simple.
Lo envié y seguí con mis cosas. No esperaba tener respuesta hasta días o semanas más tarde, si es que me llegaban a contestar.
Para mi sorpresa alguien comentó en mi PR al día siguiente. No parecía ser mantenedor de ese repositorio pero había echado un ojo a mi código. Sugirió algunos cambios de estilo que yo acepté y también comentó sobre un pequeño detalle de implementación. Hacer el cambio me costó un par de minutos y luego media hora más para escribir mi respuesta a su comentario. Soy muy lento escribiendo.
Una semanas después ya ni me acordaba del PR de Alpine cuando me llegaron un par de emails del Gitlab de Alpine. El primero que leí decía que mi PR había sido cerrado por una persona que sí que reconocía como mantenedora de la distribución. El email de una línea no daba más información así que no sabía si lo habían aceptado o simplemente eliminado.
Por suerte el otro email sí que tenía un comentario del mantenedor en el que decía que había incluido mi cambio en nosequé versión y me daba las gracias.
Creo que esta fue la segunda contribución en código que he hecho a un proyecto de software libre. Mis aportaciones casi siempre han sido monetarias o en documentación. El proceso fue muy sencillo. Mi código no le va a cambiar la vida a nadie pero al menos si hay alguna persona tan bruta como yo que se pone a mirar los binarios del sistema uno a uno podrá saber lo que hacen.
Estaría bien aportar más código a este u otros proyectos de software libre. Creo que tengo conocimientos para ello pero no sé si tengo el tiempo y la energía para meterme tan a fondo en el código ajeno. No es lo mismo sumergirse en un programa de cachondeo para meter una paella que contribuir en serio.
Todo esto me sirvió para aprender un poco cómo funciona Gitlab que nunca lo había usado. En mi trabajo usamos Github para revisar el código y para mis cosas personales uso Gitea. Gitlab es muy similar a Github aunque la interfaz es más sobria. No he tenido dificultades con este software.