Ask Stack: How can I find a good open source project to join?

You want to participate in an open-source project to hone your skills and to …

This Q&A is part of a biweekly series of posts highlighting common questions encountered by technophiles and answered by users at Stack Exchange, a free, community-powered network of 80+ Q&A sites.

Lord Torgamusasks: I want to join an open source project for the same reasons as anyone else: I want to help create something useful and become a better coder.

My problem is, I don't know how to find a project where I'll fit in.

How can I find a beginner-friendly project? What attributes should I be searching for? What are warning signs that a project might not be the right fit? Are there any tools out there to help match me with an open source project?

Top Answer: Already wet? Dive in (33 Votes)

Evan Plaice replies: Find a project that you already use; clone the repository; and start seeing if you can fix some bugs and/or add some unit tests. It seems intimidating to look at someone else's codebase with fresh eyes but it's an extremely valuable skill to learn. Submit some patches. You can expect your code to be closely scrutinized at first. Don't worry about it, it's a normal part of the process to gain the trust of the project admin(s).

After establishing a base of merit with the projects admin(s), start seeking more responsibilities such as, proposing new features, or asking to be assigned to implementing feature requests.

If you can't find an already existing project on one of the main open source repository networks (github, sourceforge, google code) think of an app that you'd really like to use that doesn't exist yet and start your own.

Be prepared to be humbled and expect work to be rejected in favor of further revisions. The myth that anybody can add code to an open source project is completely false. There's always a gatekeeper between you and push access. The better your code, the less it will be scrutinized in the long run as you gain the trust of the project admin(s).

If it's your project, you'll be that gatekeeper.

Alternative Answer: Explore, See Where You're Needed (8 Votes)

kdubinets replies: If you have an open-source project that you already use, know, care about and you think it needs improvement, then it should be your first candidate to code.

But for many, there is no obvious first open-source project. If this describes you, then explore. Look for projects that seem interesting and loiter in project mailing lists, forums, even bug tracking systems.

Ask yourself: Do you enjoy hanging around there? Does it feel like the project has an energetic community or is it slowly dying? Do core people there seem to encourage and mentor newcomers or will you be left out on your own?

Dip your toe into a number of projects before you dive in and discover you've joined the wrong team. Such an experience can potentially discourage you from joining an open-source project in the future.

Start small. High profile or complex projects can be discouraging. Consider asking in a project mailing list how you can be most helpful, whether it's testing, documentation maintenance or bug report verification.

And most important: If you get burned in one place, move on. Don't give up.

Tim Post replies: Start using Open Source software to do things. That may seem trivial to you, even perhaps over-simplified. Yet, it is really hard to describe the satisfaction of using something, finding a bug, grabbing the source and fixing it. Or, perhaps changing it so it works the way you want it to work.

But don't just hack for the sake of getting involved. 95% of my patches to the Linux kernel will never see the light of day, I know for sure that nobody would want them but me, and I'd probably be forced to undergo psychiatric evaluation if any other competent kernel hacker ever saw them. But I still enjoy my implementation of 'piglatin_printk()' which started as an April 1 gag several years ago :)

While, yes, getting your code and your thought process in front of many other competent people is priceless, so is learning how to communicate and collaborate. A solo project is a great way to learn what not to do. Hint: there's more to it than just using version control software, mailing lists and a bug tracker.

To get started, I suggest digging around Ohloh to find software that you might be interested in using. Download it, build it, play with it. Then go grab something else. Eventually you'll come to want to improve something, or realize that you have the urge to implement something completely different than what you found.

The other thing that helps is working for an open friendly company. My company uses Xen extensively, so they have no problem with me finding interesting bugs and fixing them, since we'd need to do that anyway. They also don't mind employees participating in things like RFC's and draft specifications, since we'll ultimately be using the result.

Alternative Answer: Code 52 (2 Votes)

Marcus Swope replies: Check out Code 52 -- a new undertaking that aims to "introduce developers to open-source projects and help them learn the ropes."

It does so by pushing out a new open source project every week.

Currently, they're working on a project called Enhance, a WPF scanning application.

9 Reader Comments

Or just go to http://www.blender.org, we can always use more developers and like emacs it has just about anything you could want to work on from a text editor to simulation tools, to painting and texturing tools, to video editing, to image compositing, and even some tools for modeling and animating

More seriously I'd recommend checking out the projects listed in 'google summer of code' (GSoC). http://www.google-melange.com/gsoc/acce ... e/gsoc2012 It is a 180 open source projects most of which have a proven track record of mentoring new developers into the organization, and will have lists of ideas for you to work on. If you are a student you can apply for GSoC and and even get paid to work on the project over the summer (deadline is coming soon for student applications though - Aprli 6th i think?).

Thanks for the article. My current job doesn't involve programming and I don't want to get super rusty. I use OSS a lot and do want to contribute to the effort. But as was stated I find it intimidating when looking for a place to start.

Programming is not the only way to contribute to open source projects. For Python, some people help classify issues on the tracker; others help improve the documents. Both are continuous projects. Still others help with various annual conferences or user groups. All these activities take skills that many programmers are not so strong in.

I can't believe this. There are so many things to do. I always have to restrain myself from picking up yet another project. Here is my current "I will do it when I will have less than 3 projects ongoing" list:- Archi enterprise repository- the super simple and powerful web application server (REST, xsm, model driven, EAL7)- open source/open hw house heating control- bicycle black box- firewall rule generation from architecture model- formally verifying the Linux kernel with frama-c - sax parser for c-like alternative syntax

The best way is to just use open source. When you encounter a bug/missing feature, just fix it.

I believe this can be a problem only for someone very new to programming (I am so bad programmer that nowadays I do it in java, but still can find too much interesting things to do). In this case - as PyWrite have pointed out - there are a lot of things which one can do besides programming, which helps in actually learning it. Writing documentation, doing code review, etc.

A great opportunity to learn is code review. More and more projects have some gerrit sites. One I use is opensc. Reviewing someone else's code is much easier than actually writing it. For example gerrit shows whitespace problems, and they count as a reason to say no in opensc. The next step is to fix those patches which are easy to fix (e.g. a patch is okay, just one or two spaces should be deleted. It can be done by anyone). If you do it and persist, you won't even notice and you become a good programmer.

I'd underscore two things:* Open Source projects do need not only programmers. What most projects need the most is documentation and marketing. Just have a look at soo many projects that hardly have a functional description of the project that can be understood by anybody but insiders.* Most Open Source projects need programmers that are users. I think it is pointless to want to contribute to just anything. It's like wanting to kiss any girl. If you are not interested in what he project does, you won't have the motivation to stay around. If you are using it, you will simply find issues with the project. Go to the extra length to make unit tests to demonstrate any issue you have (bug, performance, ...) and submit that code. Likely such issues are much faster resolved than many other's. Build on that and write unit tests and demonstrations for issues submitted by others. Once you got into the habit of writing unit tests, you can try to improve on the issue as well.

One word of caution, projects with little activity are likely resource starved. Ohloh.net (full disclosure, I work for Black Duck Software, the company behind Ohloh) is a great resource to find out what the activity level of a project is and how many people have committing rights. Also learn the mechanisms that the project uses to communicate and get a feel to if the culture is something you like and can be part of.

Well, that's good to know. Thanks buddy. Just like taking a shot of 'eye opener' (coffee) that gets my heart rates shot up a few degrees. I could use some extra cash working on non-U.S. based marketing and I could also do documentation writings on two foreign writings that I'm good with. The two are similar, the problem is, one doesn't talk to the other one. It's like chicken talking to the duck, they make lots of noise and that's it. So in order for these two writings to communicate to one and other it must be written the whole nine yard thing all over again in its separate character sets. Actually I could do four foreign writings but considered two of those four are not as popular as the other two. There are fewer people understand those writings thats why. For that reason those two don't count.

Okay, so much BS on my part. I have been thinking about working on Ubuntu for a while, it just that don't know where to go.

tl;dr Is this an April Fools joke because my jabbering is featured on one of my favorite news sites.

Cool. I read this site all the time and was pleasantly surprised to see one of my StackExchange answers featured. If you follow the link, there's some more comprehensive info about the topic included.

If you're curious about the project I worked on it's called SharpPcap/Packet.Net and can be found on SourceForge. It's basically a C#/Mono Pcap (Packet Capture Framework) wrapper.

SharpPcap:The core of the framework acts as a Pcap/AirPcap wrapper that's used to expose the lower level details of the framework. You can filter packets using all of the standard Pcap filters and either further parse the live data in code or generate offline capture files for postprocessing.

Packet.Net:Originally, it was packet parser code included in SharpPcap but a lot of people using SharpPcap only need to capture raw networking data and/or custom protocol captures. To cut down on bloat in the core library Packet.Net was created to contain all of the code responsible for parsing standard network protocols.

The project was originally created by a developer named Tamir Gal to scratch an itch but was later adopted by Chris Morgan who is currently the sole developer and responsible for growing the project into a fully fledged framework.

Honestly, I haven't touched the project in a while because work has me occupied but I do what I can to promote it on StackExchange and other sites. There are never more than a handful of open bugs, the API is stable, and the library has been downloaded almost 65K times. Chris keeps the project afloat, expects high quality code, and good reasoning behind significant changes to the code base.

If you code in C# and are interested in lower level networking (ie transport layer and below), check it out.

Hopefully, if I get some free time soon I'll be able to take another stab at a working DNS parser implementation and maybe one day, I'll create a TCP session layer library built on top of SharpPcap/Packet.Net that I have always dreamed of.

I'm not inclined to internet attention whoring (I don't have a blog, I think my twitter acct has 1 post, and I've never said the word 'subscribe' to an audience in my life) but, if the author of this article or anybody else is interested in contacting me for a follow-up my email is my name at GMail (please, no spam).

Either way, I'm happy that something I wrote has been found useful and I got to break the 5th wall on April Fools. Double win.