[[meta copyright="Copyright © 2008, 2009 Free Software Foundation, Inc."]] [[meta license="""[[toggle id="license" text="GFDL 1.2+"]][[toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU_Free_Documentation_License|/fdl]]."]]"""]] [[meta title="Convert Hurd Libraries and Servers to pthreads"]] The Hurd was originally created at a time when the [pthreads standard](http://www.opengroup.org/onlinepubs/009695399/basedefs/pthread.h.html) didn't exist yet. Thus all Hurd servers and libraries are using the old [[cthreads|hurd/libcthreads]] package that came with [[microkernel/Mach]], which is not compatible with [[pthreads|hurd/libpthread]]. Not only does that mean that people hacking on Hurd internals have to deal with a non-standard thread package, which nobody is familiar with. Although a pthreads implementation for the Hurd was created in the meantime, it's not possible to use both cthreads and pthreads in the same program. Consequently, pthreads can't presently be used in any Hurd servers -- including translators. Some work already has been done once on converting the Hurd servers and libraries to use pthreads, but that work hasn't been finished. It is available as [[GNU_Savannah_task 5487]] and can of course be used to base the new work upon. The goal of this project is to have all the Hurd code use pthreads. Should any limitations in the existing pthreads implementation turn up that hinder this transition, they will have to be fixed as well. One possible option is creating a wrapper that implements the cthreads interfaces on top of pthreads, to ease the transition -- but it might very well turn out that it's easier to just change all the existing code to use pthreads directly. This is up to the student. Such a wrapper has been proposed as [[GNU_Savannah_task 7895]] and its implementation would be a useful starting-point. This project requires relatively little Hurd-specific knowledge. Experience with multithreaded programming in general and pthreads in particular is required, though. Possible mentors: Samuel Thibault (youpi) Exercise: Take some small piece of code using ctreads and convert it to pthreads.