[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

A blog about my GSoC project

From: Joan Lledó
Subject: A blog about my GSoC project
Date: Tue, 30 May 2017 17:29:36 +0200


Justus suggested me to create a blog to document my progress in my
GSoC project. I'm going to paste here the first post where I talk
about how I started to work in the prototype. You can find the blog at



Last summer I started to spend my time studying the Hurd more
seriously. I wanted to do it long time ago, but I was working then and
didn't have the time. Finally, by the end of August and after leaving
my job, I was able to spend a couple of weeks studying the Hurd before
beginning of the university term. Mainly, all I did was read more and
more documentation, write some schematic summaries about everything I
was learning and make some exercises that can be found in the
project's wiki[1]. I read many wiki pages, and not so many exercises
as I only found three of them. This one[2] is an example.

I have to say that in the beginning I had some problems understanding
some concepts. For instance, the concepts of port, port right and port
name have some subtle differences and the documentation often use the
three terms to talk about the port name from the programmer's point of
view. This document[3] helped me a bit. I was a little confused by the
threads library as well. In the last versions of the hurd, Glibc
provides the pthreads library everybody knows, but in some manuals and
many pages of the wiki you can still find references to the old GNU
Mach's cthreads library.

During the semester, I spent a couple of hours per week reading more
documentation. For instance, I learnt the basics to write a
translator: libports[4], libtrivfs[5] i MIG[6]. The Hello[7]
translator is a good example. I this time I've learnt that the best
source of information are the logs of the #hurd channel at freenode:
everything has been asked before there. Wget may be used to download
the logs in order to grep them locally:

wget --mirror --no-parent -A "hurd-*" -e robots=off

In February, we the students of the UOC have about three free weeks
before the beginning of the next term. It was in this time when I was
looking for ideas[8] and finally decided to try with this one[9]. The
first step was to choose a stack to port. Reading the logs of the
#hurd channel, I found that some Hurd developers talked about it, and
particularly debated[10] between porting LwIP and the NetBSD's stack.
I first tried with the NetBSD's stack but soon desisted since I failed
to find the right documentation and realized it was maybe too much for
someone without previous experience in OS programming. However, I
found LwIP much easier since the beginning. It has a very suitable
wiki[11] for beginners, though it doesn't go much further. Besides, it
also has its Doxygen documentation[12] online, and that's priceless.

The last weeks of February I started working on the prototype, with
the purpose of having something to show before March 20th, the start
of the GSoC call for proposals term. The first step to be made in a
big and difficult project is to find a way to start. In my case the
best reference was pfinet, the server that is currently offering the
TCP/IP service in the Hurd based in an old version of the Linux's
stack. I decided to download pfinet's code[13] and wonder what should
I change to make it work with LwIP. I removed all the code related
with the Linux's stack, added LwIP's one and started to modify the
implementation of the sockets and I/O operations to adapt them to

At the end of the day, this project is more about reading
documentation than about programming. I've read much more code than I
wrote so far, and imagine I'll continue to do so for the rest of the

[1] http://darnassus.sceen.net/~hurd-web/
[2] http://darnassus.sceen.net/~hurd-web/microkernel/for_beginners/
[3] http://www.nongnu.org/hurdextras/ipc_guide/mach_ipc_basic_concepts.html
[4] http://darnassus.sceen.net/~hurd-web/hurd/libports/
[5] http://darnassus.sceen.net/~hurd-web/hurd/libtrivfs/
[6] http://darnassus.sceen.net/~hurd-web/microkernel/mach/mig/
[7] http://darnassus.sceen.net/~hurd-web/hurd/translator/hello/
[8] http://darnassus.sceen.net/~hurd-web/community/gsoc/project_ideas/
[10] http://darnassus.sceen.net/~hurd-web/hurd/translator/pfinet/implementation/
[11] http://lwip.wikia.com/wiki/LwIP_Wiki
[12] http://www.nongnu.org/lwip/2_0_x/index.html
[13] http://git.savannah.gnu.org/cgit/hurd/hurd.git/tree/pfinet/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]