I've recently been getting more interested in open source projects and I'm not sure what the best way to get involved and start contributing is. Are there any requirements for contributing, or can anyone help? How can you find stuff that needs to be done? Any advice on how to get started would be greatly appreciated!
I'm currently working on an open source project. Here is what I've learned.<p>1. There are two kinds of OSS projects. Libraries/utilities aimed at programmers and full applications (whoever simple they may be) aimed at a specific industry/need. What you choose will depend on your personal preference and needs. In my case, I chose to do an application because it is something that is needed and not currently available (for free, and in PHP (the language I'm using)). I also use it as a personal tool ( I used it to build it ).<p>2. Talk to people before deciding. I love asking people about their jobs in order to find new needs. My current project was born that way.<p>3. Pick something simple for your first project. You want to pick something doable. A simple open source project that ships is better than a complex one that stagnates in your file system.<p>4. Treat it as if you were doing a paid project. Use deadlines, make compromises, and for the love of code, stick to them. I learned this the hard way. Decide and code. Rinse and repeat. Learn to live with your choices.<p>5. Document it at the same time you build it. This ended up being easier/faster for me.<p>6. Don't forget to promote it by emailing people with a link to the project and putting a link right here on HN.<p>Good luck!
I don't know about the best way but the easiest way is to start a project yourself. It must be a real world project that can be used by others. Once you are satisfied with it, attach an appropriate free license and upload it to your github repository. Then it's important to use it, maintain it and even talk about it. Start simple. I started with yet another node.js template engine, for example. It's also important to respond to any response from the community.<p>Also, not to be pedantic but you probably mean "free software". "Open source" software is not necessarily open to be edited and republished as free software is.
I would say that one of the most important things, is to have an account on GitHub. If you do not have one already, sign up at <a href="https://github.com/" rel="nofollow">https://github.com/</a>. Start to follow some people and watch a few repositories for any projects you find interesting.<p>Use the search functions to discover projects.<p>Browse through issues, look how other people post issues. In general, being active on GitHub is a good way to get into open source projects.<p>Another place you could get started is to connect to the Freenode IRC network and join some open source projects channels there.
Depending on what your knowledge is, what languages you enjoy or what is of interest for you you should just get in contact with people.<p>Most of them are happy you want to contribute and will help you.<p>Some resources: IRC-Channels, Google Groups, Github.<p>I started working on documentation for a project because I wasn't really ready to work on the core (both because I didn't knew the project that well and because the whole git fork-pull request workflow was new to me). I learned a lot about contributing and now contribute to a few small projects.
There were a few recent articles on this on HN, you might find some great projects if you do a search. You could also start your own tiny project, a lot of people post code for common problems that other people can reuse in their own projects. For example, I'm thinking of using this in our project: <a href="https://github.com/arashpayan/appirater/" rel="nofollow">https://github.com/arashpayan/appirater/</a><p>Its just the sort of thing I love the open source community for and makes my day.
Pick something you enjoy using, like a game. Pick something with a clear process (of taking patches from new people) that you can see working. Pick a project where there's a clear todo list.<p>e.g. When I learn Lua i'll contribute to Corsixth [1] because I enjoy playing it, I've seen the core people work with new helpers and the wiki includes a todo with whos working on what.<p>[1]<a href="https://code.google.com/p/corsix-th" rel="nofollow">https://code.google.com/p/corsix-th</a>
Pick a project that you like and is relatively small. Download the source code and run it locally. Then make changes to it and see how it goes. Don't forget to read the documentation and be active on the forums. You don't have to post anything to the forum. Just read them.
Pick something you use and improve it. If you aren't sure about jumping into the code base, start by improving documentation, doing issue queue triage, whatever.<p>The project's ML, issue queue, and IRC channel(s) are great places to lurk and learn the lay of the land.