I am interested in starting to learn how to contribute to open source projects and Linux in general. I am a first year B.Sc. Computer Science student this year and we use c++ as our main programming language.

Where can I learn how a typical GPL application should be structured? By this I mean the layout of the source files, what should be included in all the files etc. to make it compliant with GPLv3 for instance?

How does one find out what projects need coders, and what exactly needs to be done? I would really like to get involved but have no clue as to how to get involved. If I could be the tea boy I would ;)

  • 1
    Fetching tea doesn't tea-ch you how to program. Find an open-source program and ask its owners these questions. There is no general, project-independent answer.
    – Matt Ball
    Apr 18, 2011 at 13:55
  • 2
    Every project always needs developers. Find a project you like, start reading the code and write a patch. Most projects will have bug trackers, just pick a bug and work on it.
    – halfdan
    Apr 18, 2011 at 13:56
  • Have you looked at sourceforge?
    – Sasquiha
    Apr 18, 2011 at 13:57
  • 4
    Sasquiha, sf is kinda dead. I'd say: Have you looked at Github?
    – halfdan
    Apr 18, 2011 at 13:57

7 Answers 7


Please understand that the FOSS world has many communities, many different standards of coding and varying philosophies. You seem to be correlating a program's license with coding standards and etiquette for participating, that isn't always the case.

Let's look at two of the biggest communities going right now, which would be the GNU Project and the Linux kernel. I'm not leaving out BSD, I'll get to that, I'm just addressing your questions in (mostly) the order that you asked them.

The GNU project, owned by the Free Software Foundation gives us a lot of stuff:

  • The GNU operating system (shell, core utilities, desktop / window manager, basic productivity tools, etc)
  • The GNU General public license, The Lesser GPL and the Affero GPL.

GNU has a very high set of coding standards (some say these standards are too complex), however GNU software is notorious for building and running on a variety of systems and architectures. To get a feel for how they do things, have a look at the GNU Hello, World! program. The fact that a "Hello, World!" implementation is actively maintained should tell you something.

The FSF doesn't just handle the needs of the GNU project, they are also advocates for what they feel are essential freedoms that every computer user should have. They are in the trenches of the patent wars, closely involved with the EFF and SFLC and frequently organize campaigns against technology products that they feel take essential freedoms away from computer users.

If you want to work on a GNU project, a great way to start is to go to their front page and look for some projects that need a new maintainer. Or, you could start off by fixing bugs and sending patches. Just realize that they are a very idealogical community, so take care to read about the things that they are passionate about. For instance, it is unwise to call a GNU program "Open Source" on a GNU mailing list, they much prefer the term "Free Software".

Linux is developed under the umbrella of the Linux Foundation. They give us:

  • A shiny new kernel every few months
  • Standards to help tie together all of the various operating systems that use the Kernel (such as the LSB)
  • Outreach programs to help get Linux developers behind the proprietary iron curtain for better hardware support in the kernel
  • Advocacy of open source and open standards

Unlike the FSF, The Linux Foundation is not quite what many would consider political. Yes, they are vocal regarding technical issues that face programmers these days (such as patents), but they are seldom if ever antagonistic.

Kernel development is described by kernel developers as a meritocracy. While some doubt that such a system could be real, one does need to thoroughly vet the technical decisions that they introduce in any patch. If you send in great code that follows their guidelines, your patch (or perhaps a revised version of it) will probably be accepted if it solves a real problem. A great place to start is kernel newbies. Pick up some janitorial work in whatever sub system interests you and develop a good relationship with its maintainer - then set your eyes on bigger fish if you want.

Kernel hackers prefer that you keep idealism and politics off the list, they generally see this as noise. From time to time, the FSF will propose changes to the GPL. When this happens, you might see a side bar discussion on what kernel hackers think of it.

Now, both projects use the GPL, however Linux never moved to GPL3. The FSF requires copyright assignment from all contributors, Linux does not. GPL3 was just too restrictive for kernel folk, so it was never adopted. Still, the point is - just because a project uses the GPL doesn't mean GNU standards apply.

Understanding the various OSI approved licenses and their intrinsic compatibility issues is something that everyone working seriously with Free/Open software be doing. The GNU project maintains a pretty comprehensive GPL compatibility list that highlights quirks in certain licenses that might also render them incompatible with others. The key thing to remember here is that when mixing code, even with 100% compatible licenses, the most restrictive license must prevail.

This leads us to the vibrant BSD communities, who focus on giving us well written and reliable software while attaching the least amount of restrictions. If you have ever enjoyed the security of OpenSSH - you have OpenBSD to thank.

There have been rifts between the BSD and GNU communities, because BSD code was used and improved in a GPL project, but those improvements could not be reciprocated because it would mean the BSD camp having to inherit the additional license restrictions.

Any Linux/GNU distribution is a combination of software from all camps. Just try to offer improvements back to them under the license that they prefer.

In short, proprietary companies tend to say "Sharing is evil!", BSD folks tend to say "Sharing is NOT evil!" while GNU folks tend to say "NOT sharing is evil!". It's important to realize the distinction.

Finding a place to start is as easy as finding an interesting problem to solve, within a community that best suits your personality and goals. Remember that a choice in licenses isn't always idealistic, it is also very much strategic. Take care to not make assumptions based solely on the license that any particular project is using.


IMO, These are the must read and these articles will give you good insight about open-source software.

Catethdral and the bazaar

How to become a Hacker


  • +1 Nice articles, I'm looking for the pdf versions now... thanks
    – Anthony
    Aug 12, 2012 at 5:30
  • 1
    Would you mind explaining what each of these resources does and what they're good for? "Link-only answers" are not quite welcome at Stack Exchange
    – gnat
    Apr 16, 2013 at 6:28

Found in the autotools tutorial slides:


Practices that packages of the GNU project should follow:

  • program behavior -how to report errors,
    • standard command line options,
    • etc.
  • coding style
  • configuration
  • Makefile conventions
  • etc.

I guess you will find more information there. At least the description from the slides seems to indicate the information is there.


How to find a project you are interested in?

Ask yourself:

  • Is there a particular software that you just love so much?
  • Is there a software that you would like to have but does not exist?
  • Is there a software that is almost what you want but just almost?

How to find a suitable project that needs you?

Based on your answers above, get on Google and find the homepage of a similar project that is interesting to you. Some factors to look for:

  • When was the last commit?
  • How many active committers are there?
  • Which VCS do they use and how can you submit branches?

How you evaluate these factors is entire up to you. Personally I prefer small-ish projects where my work will be noticeable, but not too small where the developers might not be interested in accepting new faces.

How to get involved?

Do NOT send an introductory mail saying "hey I'm here I want to work on X". Just pick something you can improve. It can be anything, but preferably very small and clearly an improvement. Send a patch or merge request, along with a brief and humble introduction. Keep doing small things, gradually bigger and bigger.

Especially in the beginning, adopt the coding style used by the others. If you disagree with it you can contest it later after you become a core contributor.


Be patient. Don't get your hopes high early. It takes time to get to know the members, and it is impossible to know in advance if your personalities are compatible or not. For sure there are plenty of projects out there that are well suited for you, you don't have to fall for the 1st or the 2nd.


pick one, sign up, fix some bugs.

It's not rocket surgery.


I had the same question couple of years back and to be honest still I don't have a clear cut answer. One thing I have come to realize is you keep reading about some of programs that you use and click on the link that says "Get Involved" or "how to contribute". Sign up to their mailing list and then see if there are any mentors in the project. Look into their bugs list and send patches to those who are responsible for the bug. In my opinion its a long process. If you are a student then another avenue to explore is "Google summer of code".

Apart from github and sourceforge, another website where you can find info that you are asking for is: Ohloh.net.


About the Layout of an Open Source i think @LiKao gave you a good hint.

About how to start contributing, Freshmeat, Source Forge , Savannah, GitHub and Bitbucket are good places to find open source projects you may be interested (interest is the main point to contribute).

Also Google Summer of Code is an interesting source of open source projects that define some stuff for the students to help them. Usually each project there has a page explaining possible tasks for the students making their application. Any of this tasks could be a good starting point.

Not the answer you're looking for? Browse other questions tagged or ask your own question.