---
created_at: '2017-09-23T01:38:15.000Z'
title: How to contribute to GNU Hurd (2006)
url: https://www.gnu.org/software/hurd/contributing.html
author: pmoriarty
points: 58
story_text: 
comment_text: 
num_comments: 15
story_id: 
story_title: 
story_url: 
parent_id: 
created_at_i: 1506130695
_tags:
- story
- author_pmoriarty
- story_15317515
objectID: '15317515'

---
[Source](https://www.gnu.org/software/hurd/contributing.html "Permalink to contributing")

# contributing

[GNU Hurd][1]/  contributing 

* [Recent Changes][2]
* [Preferences][3]
* [Edit][4]
* [History][5]
* [Source][6]
* [Discussion][7]

Welcome to... ![][8] ... the GNU Hurd!

* * *
* [**Home][1]**
* [**Community][9]**
    * [Contact Us][10]
* [**Donate][11]**
* **Contributing**
    * [Public Hurd Boxen][12]
    * [QEMU Images][13]
    * [Getting Help][14]
    * [Project Ideas][15]
    * [Open Issues][16]
* [**Documentation][17]**
    * [FAQ][18]
* * *
* [**Hurd][19]**
    * [Documentation][20]
    * [Running][21]
* [**Mach][22]**
    * [Documentation][23]
    * [GNU Mach][24]
* [**MIG][25]**
    * [Documentation][26]
    * [GNU MIG][27]
* * *
* [**Debian GNU/Hurd][28]**
* [**GNU System][29]**
* * *
* [**Hurd NG][30]**

So, you are interested in contributing to the GNU Hurd project? Welcome! Every single contribution is very much encouraged.

There are various ways to contribute; read up on contributing to...

1. [Improve GNU Hurd Running on GNU Mach][31]
    1. [Small hack entries][32]
    2. [Porting Packages][33]
        1. [Debian GNU/Hurd][34]
    3. [Open Issues][35]
    4. [Instant Development Environment][36]
2. [Design / Research: GNU Hurd on a Modern Microkernel][37]
3. [Documentation][38]
    1. [Technical Writer][39]
    2. [Web Pages][40]
4. [Final Words -- Difficulties][41]

If someone of you is lurking around here and would like to contribute, but feels she / he could do so better under formal mentoring: please [contact us][10], or just speak up at one of the [regular IRC meetings][42]!

We also have a list of [open issues][16] and one for more elaborate [project ideas][15] \- the latter originally written for the [Google Summer of Code][43], but not exclusively. Even just investigating open issues, without being able to fix them, can be useful, because a issue that has been tracked down often becomes obvious to address for people who know the stuff -- but these people typically don't have the time that is needed to track down the issues.

# Improve GNU Hurd Running on GNU Mach

The [_GNU Hurd][19] running on the [GNU Mach microkernel][24]_ is what is commonly meant when people are talking about GNU/Hurd systems.

This system has mostly been designed and implemented [in the '90s][44]. It works and is usable. For example, these web pages have been rendered on a GNU/Hurd system.

You can try it out for yourself: for getting access, installing [Debian GNU/Hurd][28] will probably be the easiest and most feature-complete solution. If you don't have spare hardware to use for doing so, you can also get a [shell account on a public Hurd machine][12]. Depending on the things you're going to work on (and on your internet connection), this may be an easy way of getting used to Hurd systems. Installing in a virtual machine is another possibility, see the page about [running a Hurd system][21] for the full story. In particular, running a Debian GNU/Hurd [QEMU image][13] may be a viable alternative.

Then you can either play around and eventually strive to do something useful or -- if you want -- [ask us][10] to assign something to you, depending on the skills you have and the resources you intend to invest.

Please spend some time with thinking about the items in this [questionnaire][45].

Before you can significantly contribute to the operating system itself, you'll need to take some time to learn about the system, for example: [microkernels for beginners][46], [Mach's concepts][47], [Hurd's concepts][48], the [_critique][49]_. Until you can understand and do the basic exercises listed there, you won't be able to significantly contribute to the Hurd.

You can also have a look at the [starting guide talk][50].

In terms of building and hacking on software, the easiest way to avoid having to understand the whole picture from the start is install the Debian distribution, and patch over the Debian source code. Installing from upstream source is much more complexe since you would need to know which piece fits where. Building and installing patched packages is much more simple.

For more reading resources, please see these web pages, for example, [Hurd documentation][20] and [Mach documentation][23] for links to a bunch of documents.

## Small hack entries

Here is a list of small hacks, which can serve as entries into the Hurd code for people who would like to dive into the code but just lack a "somewhere to begin with".

* Add `UTIME_NOW` and `UTIME_OMIT`. It is a matter of taking the BSD values, add the `#define`s to the proper header, and implement the support in `*_S_file_utimes` functions. Flávio Cruz has submitted a patch, now being polished. See also [Debian bug #762677][51].
* Some translators do not support [fsysopts][52], i.e. support for the file_get_fs_options and fsys_set_options RPCs.
* Extend `device_read`/`device_write` into supporting > 2TiB disk sizes.
* Make the Hurd [console][53]'s configuration use [xkb layout/variant instead of keymap][54].
* Add NX protection support to GNU Mach.
* Write a partfs translator, to which one gives a disk image, and which exposes the partitions of the disk image, using parted, and the parted-based storeio (`settrans -c foos1 /hurd/storeio -T typed part:1:file:/home/samy/tmp/foo`). This would be libnetfs-based.
* Write [virtio drivers for KVM][55].
* Move the [mount/umount][56] logic from `utils/{,u}mount.c` into [glibc][57].
* Fix [`/proc/self`][58]. Look at [`glibc]/hurd/lookup-retry.c` for how [`FS RETRY MAGICAL` lookups][59] work.
* Add a tool to trace system calls, by using gnumach's Syscall-Emulation, see <http://www.gnu.org/software/hurd/gnumach-doc/Syscall-Emulation.html>
* Improve our [FUSE library][60].
* Add a relatime or lazytime option to ext2fs.
* Fix our [symlink translator][61].
* Fix chmod on fifos: mkfifo foo ; sudo chmod g+w foo
* Strengthen httpfs: it should append '/' to URL automatically, it should not fallback index.html itself, etc. probably a lot more small easy issues.
* Fix `O_NOATIME`, see [https://buildd.debian.org/status/fetch.php?pkg=borgbackup&arch=hurd-i386&ver=1.0.2-1&stamp=1460838100][62]

## Porting Packages

Please [contact us][10] before spending a lot of time on the following porting tasks: some work may already have been done that you can base your work upon.

For guidelines, please have a look at the dedicated [porting page][63].

### Debian GNU/Hurd

Along with the official Debian "jessie" release (but not as an official Debian release), in April 2015 the [Debian GNU/Hurd][28] team released [Debian GNU/Hurd 2015][64]. There is a goal of getting Debian GNU/Hurd into shape for a technology preview for integration as a proper Debian release candidate.

The _to do_ list is on <http://wiki.debian.org/Debian_GNU/Hurd>.

The following missing packages/missing functionality block a lot of other packages, and are thus good candidates for porting, in order to increase archive coverage:

* umount functionality in busybox

Here is a [list of packages that need porting][65].

You can also just [install Debian GNU/Hurd][28] and find what doesn't work or suit you and try to improve that.

Or, you can pick one from the [list of failing packages][66].

## Open Issues

There is a list of [open issues][16]. This list includes everything from bug reports to open-ended research questions.

## Instant Development Environment

_This is a very brief guide to get your development environment set up. Pester ArneBab @ irc.freenode.net on IRC if something does not work ![:\)][67]_ ([open issue documentation][68])

* Install qemu-kvm via your distros packages.
* Download the [qemu image][69]: `wget http://people.debian.org/~sthibault/hurd-i386/debian-hurd.img.tar.gz`
* Unpack it: `tar xf debian-hurd.img.tar.gz`
* Run it: `qemu-kvm -m 512 -drive cache=writeback,file=debian-hurd.img` # Optionally use `\--curses` to keep your keyboard layout. If need be modprobe kvm_amd, kvm intel and kvm to get kvm support (which is much, much faster). See also: [kvm FAQ][70].
* login as root
* `apt-get update`
* `apt-get install -y git mercurial emacs vim`
* `apt-get build-dep -y hurd gnumach`
* `git clone git://git.sv.gnu.org/hurd/hurd.git`
* `git clone git://git.sv.gnu.org/hurd/gnumach.git`
* `git clone git://git.sv.gnu.org/hurd/incubator.git`
* Get more from the [repo list][71].
* Read the docs on these pages.
* Start hacking.
* For shutting down, use `reboot`, then press `c` in grub and issue halt (to avoid filesystem corruption). Adding `\--no-reboot` to the qemu line should help, too.

# Design / Research: GNU Hurd on a Modern Microkernel

Developers [have identified][49] a number of problem with the _Hurd on Mach_ system. Problems, that can not easily be fixed by bug-fixing the existing code base, but which require design changes -- deep going ones actually.

As such systems (as the desired one) are not in common use, but are -- if at all -- research projects, this new _Hurd on a modern microkernel_ project itself is more a research project than a _sit down and implement/code/hack_ project.

If you're interested in contributing in this area, knowing the _Hurd on Mach_ system (see [above][72]) nevertheless is a prerequisite. At least have a deep look at the documentation pointers. Also read through the [HurdNG][30] section.

Please send email to the [l4-hurd][73] mailing list for discussing this post-Mach system design.

# Documentation

## Technical Writer

Our hackers (programmers) typically do what their kind always does: they code. What they don't like too much is documenting their wonderful achievements. On the other hand, there are people (you?) who enjoy documenting technical matters, so don't hesitate to [contact us][10] if technical documentation shall be your contribution to GNU Hurd development.

A good start is probably to just start using the Hurd, and play with the translators. In the process you will probably find that some of the documentations are missing some details, are outdated, etc. That is were you can start contributing for instance.

As an advice: do not start yet another documentation from scratch. There are already a lot of tutorials in the wilds, and they are almost all completely outdated. Rather contribute to the existing official documentation: this wiki, the documentation in the Hurd source, the Debian Hurd port pages.

## Web Pages

Please read about [how to contribute to these web pages][74].

# Final Words -- Difficulties

Please note that doing substantial contributions to a project as big and as encompassing as the GNU Hurd is not a trivial task. For working on the GNU Hurd's inner guts and getting useful work done, you have to plan for a many-months learning experience which will need sufficient self-motivation. Working on an advanced operating system kernel isn't something you can do in a few free minutes -- even less so without any previous [kernel][75] hacking experience.

Likewise, the Linux kernel maintainers are stating the exactly same difficulties, which is well presented by Jonathan Corbet in his 2010 Linux Kernel Summit report for the opening sessions about [_welcoming of newcomers_][76].

But of course, none of this is meant to be dismissive, or to scare you away -- on the contrary: just [start using][21] the GNU Hurd, and either notice yourself what's not working as expected, or have a look at one of the [Open Issues][16], and we shall see if you'll evolve to be the next core Hurd hacker! You'll _just_ have to get excited about it!

Tags: [open issue documentation][68] [stable URL][77]

Links: [advantages][78] [community/gsoc][43] [community/weblogs/ArneBab/porting-simple-packages][79] [donate][11] [faq/help][80] [faq/how many developers][81] [faq/release][82] [hurd][19] [index][1] [mailing lists][83] ...  [news/2009-07-31][84] [news/2010-04-30][85] [news/2011-q1][86] [news/2011-q2][87] [news/2011-q2-ps][88] [news/2013-05-debian gnu hurd 2013][89] [open issues/contributing][90] [public hurd boxen][12] [rules/savannah group][91] [sidebar][92]

Copyright © 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.

License: 

[GFDL 1.2+][93]

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][94].

Last edited 2016-08-10 09:25:28 UTC

[1]: https://www.gnu.org/index.html
[2]: https://www.gnu.org/recent_changes.html
[3]: http://darnassus.sceen.net/cgi-bin/hurd-web?do=prefs
[4]: http://darnassus.sceen.net/cgi-bin/hurd-web?do=edit&page=contributing
[5]: http://darnassus.sceen.net/cgit/hurd-web.git/log/contributing.mdwn
[6]: http://darnassus.sceen.net/cgi-bin/hurd-web?do=getsource&page=contributing
[7]: https://www.gnu.org/contributing/discussion.html
[8]: https://www.gnu.org/logo/boxes-redrawn.png
[9]: https://www.gnu.org/community.html
[10]: https://www.gnu.org/contact_us.html
[11]: https://www.gnu.org/donate.html
[12]: https://www.gnu.org/public_hurd_boxen.html
[13]: https://www.gnu.org/hurd/running/qemu.html
[14]: https://www.gnu.org/getting_help.html
[15]: https://www.gnu.org/community/gsoc/project_ideas.html
[16]: https://www.gnu.org/open_issues.html
[17]: https://www.gnu.org/documentation.html
[18]: https://www.gnu.org/faq.html
[19]: https://www.gnu.org/hurd.html
[20]: https://www.gnu.org/hurd/documentation.html
[21]: https://www.gnu.org/hurd/running.html
[22]: https://www.gnu.org/microkernel/mach.html
[23]: https://www.gnu.org/microkernel/mach/documentation.html
[24]: https://www.gnu.org/microkernel/mach/gnumach.html
[25]: https://www.gnu.org/microkernel/mach/mig.html
[26]: https://www.gnu.org/microkernel/mach/mig/documentation.html
[27]: https://www.gnu.org/microkernel/mach/mig/gnu_mig.html
[28]: https://www.gnu.org/hurd/running/debian.html
[29]: https://www.gnu.org/hurd/running/gnu.html
[30]: https://www.gnu.org/hurd/ng.html
[31]: https://www.gnu.org#index1h1
[32]: https://www.gnu.org#index1h2
[33]: https://www.gnu.org#index2h2
[34]: https://www.gnu.org#index1h3
[35]: https://www.gnu.org#index3h2
[36]: https://www.gnu.org#index4h2
[37]: https://www.gnu.org#index2h1
[38]: https://www.gnu.org#index3h1
[39]: https://www.gnu.org#index5h2
[40]: https://www.gnu.org#index6h2
[41]: https://www.gnu.org#index4h1
[42]: https://www.gnu.org/irc.html#regular_meetings
[43]: https://www.gnu.org/community/gsoc.html
[44]: https://www.gnu.org/history.html
[45]: https://www.gnu.org/contributing/questionnaire.html
[46]: https://www.gnu.org/microkernel/for_beginners.html
[47]: https://www.gnu.org/microkernel/mach/concepts.html
[48]: https://www.gnu.org/hurd/concepts.html
[49]: https://www.gnu.org/hurd/critique.html
[50]: https://fosdem.org/2015/schedule/event/hurd/
[51]: http://bugs.debian.org/762677
[52]: https://www.gnu.org/hurd/fsysopts.html
[53]: https://www.gnu.org/hurd/console.html
[54]: https://www.gnu.org/hurd/console/discussion.html
[55]: https://www.gnu.org/open_issues/virtio.html#KVM
[56]: https://www.gnu.org/open_issues/glibc.html#mount
[57]: https://www.gnu.org/glibc.html
[58]: https://www.gnu.org/hurd/translator/procfs/jkoenig/discussion.html#self
[59]: https://www.gnu.org/hurd/interface/dir_lookup.html
[60]: https://www.gnu.org/hurd/libfuse.html
[61]: https://www.gnu.org/open_issues/symlink_translator.html
[62]: https://buildd.debian.org/status/fetch.php?pkg=borgbackup&arch=hurd-i386&ver=1.0.2-1&stamp=1460838100
[63]: https://www.gnu.org/hurd/porting.html
[64]: https://www.gnu.org/news/2015-04-29-debian_gnu_hurd_2015.html
[65]: https://www.gnu.org/hurd/running/debian/porting.html
[66]: http://people.debian.org/~sthibault/failed_packages.txt
[67]: https://www.gnu.org/smileys/smile.png
[68]: https://www.gnu.org/tag/open_issue_documentation.html
[69]: http://people.debian.org/~sthibault/hurd-i386/debian-hurd.img.tar.gz
[70]: http://www.linux-kvm.org/page/FAQ
[71]: http://git.savannah.gnu.org/cgit/hurd/
[72]: https://www.gnu.org/contributing.html#hurd_on_mach
[73]: https://www.gnu.org/mailing_lists/l4-hurd.html
[74]: https://www.gnu.org/contributing/web_pages.html
[75]: https://www.gnu.org/kernel.html
[76]: http://lwn.net/Articles/412639/
[77]: https://www.gnu.org/tag/stable_URL.html
[78]: https://www.gnu.org/advantages.html
[79]: https://www.gnu.org/community/weblogs/ArneBab/porting-simple-packages.html
[80]: https://www.gnu.org/faq/help.html
[81]: https://www.gnu.org/faq/how_many_developers.html
[82]: https://www.gnu.org/faq/release.html
[83]: https://www.gnu.org/mailing_lists.html
[84]: https://www.gnu.org/news/2009-07-31.html
[85]: https://www.gnu.org/news/2010-04-30.html
[86]: https://www.gnu.org/news/2011-q1.html
[87]: https://www.gnu.org/news/2011-q2.html
[88]: https://www.gnu.org/news/2011-q2-ps.html
[89]: https://www.gnu.org/news/2013-05-debian_gnu_hurd_2013.html
[90]: https://www.gnu.org/open_issues/contributing.html
[91]: https://www.gnu.org/rules/savannah_group.html
[92]: https://www.gnu.org/sidebar.html
[93]: https://www.gnu.org#contributing.license
[94]: https://www.gnu.org/fdl.html

