Posted & filed under Valencià.

El passat estiu vaig començar a dedicar-me més seriosament a l'estudi del Hurd. Ja feia temps que m'hi volia ficar, però llavors treballava i no disposava del temps necessari. Finalment, a finals d'agost i ja sense feina, m'hi vaig poder dedicar un parell de setmanes abans del començament del semestre a la UOC. Pràcticament tot el que vaig fer va ser llegir documentació i més documentació, fer resums esquemàtics de tot allò que anava aprenent i realitzar alguns dels exercicis que hi ha a la wiki del projecte. De la wiki, en vaig llegir una bona part; d'exercicis no en vaig fer tants, només en vaig trobar tres, i aquest n'és un.

He de dir que al principi em va semblar força difícil assumir alguns conceptes. Per exemple, els conceptes de port, port right i port name tenen diferències molt subtils i, a més, la documentació sol utilitzar aquests tres noms indistintament per a referir-se al port name quan es parla des del punt de vista del programador. Aquest document em va ajudar una mica. Una altra confusió és la de la llibreria de threads. A les darreres versions del Hurd la Glibc proporciona la llibreria pthreads que tots coneixem, però bona part de la documentació encara fa referència a la llibreria cthreads del GNU Mach.

Durant el semestre vaig dedicar un parell d'hores a la setmana a seguir llegint documentació, per exemple, vaig aprendre bases per a poder escriure un translator: libports, libtrivfs i MIG. El translator hello és un bon exemple. En tot aquest temps he après que la millor font d'informació és el registre del canal #hurd a freenode: Allà hom ho ha preguntat ja pràcticament tot. Es pot emprar el wget per descarregar tots els fitxers i després fer la recerca localment amb la comanda grep:

wget --mirror --no-parent -A "hurd-*" -e robots=off http://richtlijn.be/~larstiq/hurd/

Al febrer, les estudiants de la UOC tenim unes tres setmanes de vacances abans que comence el nou semestre. Va ser en aquest temps que vaig estar mirant idees i al final vaig decidir intentar-ho amb aquesta. El primer pas era triar una pila per a portar. Llegint una mica el registre del canal #hurd, vaig trobar que els desenvolupadors del Hurd ja havien discutit sobre açò anteriorment i principalment es debatien entre LwIP i la pila de NetBSD. Primer ho vaig intentar amb la pila de NetBSD però de seguida vaig desistir perquè no vaig ser capaç de trobar la documentació adequada i ja preveia que aquest projecte no el podia fer sense experiència prèvia en programació de sistemes operatius. LwIP, en canvi, em va resultar molt més fàcil des del començament. Té una wiki que va molt bé per a principiants, encara que no va molt més enllà. També té la documentació de Doxygen penjada a Internet, i aquesta sí que no té preu.

Les darreres setmanes de febrer vaig començar a treballar en el prototip, amb la idea al cap que si arribava a tindre alguna cosa presentable abans del 20 de març faria una proposta per al GSoC. El primer pas per iniciar un projecte que en principi sembla llarg i difícil és trobar la manera de començar. En el meu cas la millor referència era el pfinet, el servidor que ofereix actualment el servei TCP/IP al Hurd i que utilitza la pila d'una versió antiga de Linux. Vaig decidir desacrregar el codi del translator pfinet i preguntar-me què havia de canviar per a fer-lo funcionar amb LwIP. Vaig esborrar tot el codi referent a la pila de Linux, vaig afegir-hi el codi de LwIP i vaig començar a modificar la implementació de les operacions de sockets i entrada/sortida bàsiques per adaptar-les a LwIP.

La veritat és que, al final, aquest projecte no consisteix tant en programar com en documentar-se. Fins ara he llegit molt més codi del que he escrit i m'imagine que seguirà sent així durant tot l'estiu.