Before we get into how to get involved with open source projects, it's important to understand what open source is and why you should care. From the open source initiative:
Open source software is software that can be freely used, changed, and shared (in modified or unmodified form) by anyone. Open source software is made by many people, and distributed under licenses that comply with the Open Source Definition.
So what does that mean exactly? The most important part of that description is the idea that open source software can be
freely used, changed, and shared. Open source software promotes code reuse between many developers and is accessible to everyone. If you've ever used projects like Twitter Bootstrap then you know how useful this can be.
This first step in contributing to open source is to find a project that you're interested in. There are plenty of ways to find a project you can be passionate about. If your highly skilled and confident, you might want to consider starting a project yourself. However, if you aren't a coding guru, then you should consider contributing to someone else's project.
So where do you find a project that people are working on? The best way to get started is to join an online communitie. I like to visit some subreddits like /r/programming and /r/webdev (you can search for more here). However, you don't have to go on reddit. There are plenty of other websites you can join:
- Hacker News: social news site that caters to programmers and entrepreneurs
- Github: Github hosts open source
gitrepositories for free. A lot of open source projects host their code here. If your not sure what
gitis, then don't worry, I'll talk about that later. You can look at the top/trending repositories here to see new, cool projects. From their website:
GitHub is the best place to share code with friends, co-workers, classmates, and complete strangers. Over four million people use GitHub to build amazing things together.
- Bitbucket: Extremely similar to github, lets you host
mercurialrepositories (again, I'll clear up what these are later on in the article).
- SourceForge: Extremely similar to the above two websites. It's a tad older, but that doesn't mean there aren't any good projects on here.
- GameDev.net: One of the best places to learn about game development. They have a lot of articles and you could look on the forums (the Indie Projects forum has some good startup projects).
- DZone: Has a lot of links for developers. Usually more article related, but sometimes you see links to cool new projects.
The first step is to get involved in whatever community interests you. If your interested in game development, then GameDev.net and /r/gamedev are great places to join. I'm interested in web development, so I look at /r/webdev and a few blogs for new trends, tools, and projects.
An important thing to note: Is the project active? If you try to contribute to a repository that isn't being maintained, no one will care to accept your pull requests. I wouldn't recommend trying to revive a project unless you are both passionate and skilled. A quick way I check for activity on Github is to look at the chart of a repo (example: Bootstrap Pulse Chart).
You probably won't see many potential projects when you first start out. However, the key is to be open to various opportunities. A potential open source project could be anything, from an extension or a plugin to a full blown web app. Once you find a project, you can move on to the next part!
So you've found a project that interests you and now you want to contribute. The next thing to do is to setup the code to run on your machine. Most projects will have a readme or some kind of getting started guide. Once you feel comfortable with the files, you can start contributing in some of the following ways:
- Submit issues or bug reports: You don't have to write code to do this, you can simply submit an issue. An issue could be anything from a bug to a feature request. Open source projects are community driven and by submitting an issue you are helping to develop the project.
- Write Documentation: I can't begin to tell you how many projects have very little documentation. Writing some wiki pages to help document the API or nasty gotchas can really help other newcomers.
- Submit pull requests: You can write code and have it merged into the project.
If your not sure what a pull request is, then we need to discuss a tool that will make your life much easier: version control. Version control is used to manage different versions or revisions of your code. The reason version control systems are so useful is that they allow you to merge your changes into someone else's code in an easy and sane manner. Some kind of revision control is a necessity when you need to code collaboratively.
If you've been reading diligently, you'll remember I mentioned
git. This is a source control management system (SCM for short). There are a lot of different SCMs, like
perforce. However, the SCM you will probably encounter the most is git because a lot of git projects are hosted on Github. I suggest you learn and get comfortable using whatever version control system your project uses. The full Pro Git book is available for free on the git website here. Most version control systems have command line interfaces, but you can always use a gui if you aren't comfortable with the command line (I like using SourceTree for git).
Remember, any form of contribution is important. Not everyone has loads of time to write documentation, submit issues, or write code. Even a small contribution helps grow a project and its community.