How to Help the GNU Project

The GNU Volunteer Coordinators

This document can be freely translated and distributed. It's released under the GNU Free Documentation License (FDL).

Revision History
Revision 1.22003-04-26hgayosso via toby
Hugo sanded down some rough edges.
Revision 1.12003-01-20hgayosso via toby
GVC emeritus Hugo Gayosso made many good comments.
Revision 1.02003-01-11toby
A journey of a mile or two begins with a single step.

Table of Contents

Introduction
Background
Learn About GNU
Decide What To Do
Find Something To Work On
Get Involved
We're Here to Help

Introduction

On behalf of the GNU Project Volunteer Coordinators, thank you for your interest in helping GNU! The GNU Volunteer Coordinators' job is to help advance the cause of Free Software by helping GNU volunteers. We want you to find an interesting, challenging and fun way to contribute because then you'll be more likely to make a long-term commitment to GNU. Getting started can be difficult so we wrote this document to help you determine the best way for you to help GNU.

Background

The GNU Project (http://www.gnu.org/) writes, distributes, and promotes free software. The "free" in free software refers to liberty, not price: the freedom to use, modify, share, and improve the software. Free Software has many practical advantages over proprietary software but those are secondary benefits: GNU's rationale is ethical, not practical. Free Software is better than proprietary software for the same reasons that freedom is better than tyranny.

Richard Stallman launched the GNU Project in 1983 to develop a complete Unix-like operating system which is free software: the GNU system. (GNU is a recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) In the years since the project began it has built, maintained and distributed some of the most important programs in use today: the GNU Compiler Collection (known as GCC), the GNU Debugger (known as GDB), the GNU C library, and the EMACS editor, among others. Along the way the project's scope grew and now GNU is much more than just a computer operating system: you can use GNU software to make telephone calls, design electronic circuits, write music, play chess, and many other things. There is currently no GNU software that can make toast, but that will likely change someday.

The GNU Project is loosely organized, more like a republic than a monarchy. Richard Stallman is the project leader. Projects can choose to become GNU projects if they share the core GNU values, agree to follow the GNU standards, and fit into the GNU system. You can help GNU in many ways, but as a rule of thumb if you're helping the cause of Free Software then you're helping GNU.

Learn About GNU

As we discussed in the introduction, the GNU project's motivation is ethical rather than practical. We believe that Free Software benefits society by preserving the freedoms of those who use it. Many people aren't as concerned about these issues and worry more about what's expedient for them. Often those people get frustrated when we hold to our principles rather than compromising them. That's why it's important that you take the time to learn about our beliefs (see our philosophy page) and decide which of them you agree with. We're confident that once you learn about the solid ethical foundation that the GNU project rests on you'll want to help.

Decide What To Do

If you've learned about GNU and Free Software and would like to help us then the next question is: what would you like to do? You can help GNU in many ways; we need people to write documents such as books, reference guides and online info, we also need people to write software, do research, and many other tasks. Because of all of the different tasks at hand we are sure that you have skills that can help the GNU Project; you don't have to be an experienced software developer to help us. What skills and experience do you have? Do you have experience writing large and complex technical documents? Do you speak several human languages? Do you have a unique skill? Have you been a Unix hacker for 20 years or are you just learning? Obviously the answers to these questions will determine the sorts of jobs that you'll want to attempt to do. For example, if you've never written any documentation then you probably don't want to attempt to write a C++ STL tutorial or reference. If you have little mathematical expertise then you probably won't want to work on a statistical analysis package.

There are many ways to help GNU. As Fred Brooks pointed out, there's much more to building successful software products than simply writing a computer program. Products need testing, documentation, and translations. Even the projects that build the products can use help, for example maintaining web pages or triaging bug reports. Here are a few common skill areas that are helpful, and resources to find out more about them:

  • Write code.
  • Write Documentation. First, it's important that the GNU project be consistent. We can't have 40 different documentation formats floating around, therefore GNU documentation is written in a language called Texinfo. Second, writing good documentation is a time-consuming exercise so we ask that people consider whether they're able to commit at least a few hours per week before getting involved in a large project (such as writing a new manual). If you find yourself unable to make such a commitment then we'd still appreciate your help in areas such as proofreading, though.
  • Translate. There's a lot of translation to be done, and we'd appreciate your help. Please understand that it's more helpful to write new documentation than translate existing docs, but again we would appreciate any help that you can offer.

Once you've got an idea of what sort of task you'd like to do (at a high level at least) you should think about how much time you're ready to volunteer. Any amount is useful, but it's important that you don't allow yourself to "bite off more than you can chew". You need to be realistic about how much time you'll be able to spend so you don't overcommit yourself. That wouldn't good for you, the people in your life, or the project that you've committed to.

How can you help given the amount of time that you'd like to donate? There are many roles to play within a project; naturally some consume more time than others. In order of increasing commitment:

  • User. An easy and fun way to help GNU and Free Software is to use Free Software for all of your computer tasks. By doing so you're joining a community of people who are living their beliefs. Start by installing a GNU/Linux distribution such as Debian GNU/Linux which is available at no cost over the internet or for low cost on CDROM. Debian is maintained by volunteers worldwide and contains many GNU packages in ready-to-run binary form. It is not considered the easiest distribution to install but help is available on the net. If you feel that you need more support (and are willing to pay for it) there are many commercial GNU/Linux distributions available. Users can help in many important ways such as writing high-quality bug reports, making feature requests, and gathering functional requirements. Users provide important feedback to the maintainers.
  • Contributor. Many people want to help projects with code, documentation, packaging, etc but aren't ready to make the commitment (or don't have the experience) to be maintainers. Contributors make non-trivial commitments to the project but usually at a lower intensity than maintainers. Contributors can report bugs but will often fix the ones that they find, or at least investigate their causes.
  • Maintainer. Maintainers are the project leaders, they commit substantial time, energy, and emotion to their projects. Typically a maintainer will be the ultimate arbiter of any design or coding issues that arise within the project. It's a prestigious title, but requires effort to earn and a substantial investment to keep.

Find Something To Work On

Now that you've thought about how much time you'd like to contribute, and which roles might be right for you, it's time to find something to do! It's best to work on something that you use yourself, something that makes your life easier. If you followed our advice above and are using a GNU system then you've probably found a few things that you'd like to improve, a couple of features that you'd like to have, or even a bug or two. Great, jump in! Download the source code, fire up your favorite editor (we trust that it's EMACS) and start learning how the program is put together. When you feel ready, subscribe to the developer's mailing list for that project and ask how you can help. The project developers will probably have a list of tasks to work on. If you've thought of something yourself it's a good idea to check with the developers before spending too much time on it; someone else might already be working on the same thing and you don't want to waste your effort.

If no project jumps out at you then you'll probably want to search for a project that needs help. Here are some places to look:

Ask the GVC for help by sending email to gvc@gnu.org.

Get Involved

Once you've found a project, how do you get involved? The best approach is to familiarize yourself with the project's work to date and then approach the project development team and offer your help. Download the software, build it and spend some time learning how it works and how the source code is structured. If you have questions you can ask the developers (preferably via the developers mailing lists) but please be respectful of their time.

Many projects communicate using mailing lists, so you'll want to find the project's developer mailing list and subscribe to it. Different projects have different cultures so it's prudent to "lurk" on the list for a few days to learn the developers' style before diving in. When you're ready, send a message offering your help. If you have an idea to improve the program you might want to check with the developers to see if anyone else is working on something similar - if so you'll want to coordinate your efforts so you don't waste time. If you don't have a specific idea but want to help the project, say so and someone will suggest something to work on.

We're Here to Help

We hope that this document has given you the information that you need to find a good way to help GNU. Remember, though, that the GNU Volunteer Coordinators are here to help you, so if you get stuck please send us an email at