Open Source software. You hear about Open Source on the news, blogs, universities, friends, everywhere. In our brave new world, Open Source software is all around us. But what is it? where does it come from? How do I start?

Introduction

But what is Open Source, you may ask? To really understand it, we need to take a step back and look at where software, and software projects come from. A large proportion of the software in the world is Closed Source. It is private, intellectual property of organizations or individuals. An example of Closed Source software is Microsoft Word. An executive at Microsoft decided that office tools are the next big thing in software. They pitched the idea to other executives, and after dozens of meetings, they found a budget, hired and moved around some developers, designers, project managers, product managers, and all sorts of other fancy titled, salaried, Microsoft employees. Then, they started building, setting goals, meeting goals, making plans to move it to QA, a release date, how the product features matched marketing goals, and so on. The code for Microsoft Word is proprietary to Microsoft — it is owned by Microsoft, if someone steals their code and uses it in their project, Microsoft can sue for Intellectual property violations. The software is Closed off to the world. If tomorrow, you wake up and make a social network for dogs, put it on the Apple App Store, and sell $1.99 per download, and keep all the code to yourself — that too is a Closed Source Project. Open Source projects don’t belong to the people that wrote them — they are owned in spirit by a community. A single person, or team, decide that their is some kind of software, feature, tool or improvement they can offer the world. Linus Torvald, the creator of Linux, looked at the landscape of operating systems and decided that there was a need for an Open Source, powerful operating system that anyone could deploy and use at home for free. He started writing, developed a community, and anyone can go and use, or contribute to Linux! Linux however, is just one of thousands and thousands of Open Source projects out in the world, improving the lives of developers and consumers. Some Open Source projects are very small — they might be an addition to a button, alert, or color scheme on a specific device developed by one person in an afternoon. Some Open Source projects are massive, they span decades, hundreds if not thousands of people, and are used day-to-day by millions of people, like the Eclipse IDE. Open Source is very important because it stops corporations from having monopolies on software — Open Source provides an alternative to paid software.

How do I contribute?

Cue you. Adventurous, curious, eager to get your foot in the Open Source door! You may be a student, fresh out of Intro to Comp Sci, or a seasoned veteran in between scrums at your five-thousand-employee social networking site. Open Source contribution is for everyone, it is never too early or late to start. One of the most important sites for Open Source contribution, as well as a fantastic resource for exploring projects, is Github.

The Github Octocat! Meow!

To start exploring on Github, check out Github Explore — theres everything from Javascript Timesheet Libraries to Icon Fonts and the Linux Kernel. So much software! So Little Time! Find a project that is right for you. Perhaps you find the platform interesting, or the language, or maybe you want to learn something new.

Once you have your project, a good place to start is to clone it and explore it a bit. Open your Terminal and navigate to where you will keep your Open Source Software

Let’s say we want to contribute to AFNetworking — a very popular library by a developer I very much look up to, Matt Thompson of NSHipster fame. So, let’s fork it into our Github account, and then clone the project. If you don’t have a Github Account, theres never been a better time to join. Navigate over to https://github.com/join and get setup. It’s free for Open Source.

Once your account is setup, let’s start forking and cloning! Find the ‘Fork’ Button, it should be on the top navigation bar of the Github page of AFNetworking.

The original repository!

If you forked correctly, it should look something like this — notice how it is under your name now!

Your fork of the repository!

Now are are ready to clone. Find the Github url of your repo,

Look for a little box like this to the left side of your repo page.

and follow the commands below:

If you did it right, an ls command should show something like this in your terminal:

Now you are ready to go! You have a local copy of the project on your computer. Explore the project, use it here and there, maybe make a sample app. Its a good idea to get at least somewhat familiar with a project before contributing — bonus points if you find a bug, or a clever way to use the project!

Once you are familiar with the project, a great place to start helping is the Issues tab on Github. Navigate to the original project page and see if there are any issues. If there are any issues, find one you think you can fix — and try to solve it in your code! But what do you do if there are no issues? or the issues are too complex? That is quiet alright! Find some bugs, figure out how to solve them. Once you find a bug, and solve it in your local project, start by pushing it up to your Github Repository Fork. Really, any contribution, bug fix, issue fix or modification will more or less follow the next steps.

Once you push a commit or two up — it will tell you how many commits you are ahead of the master branch of the repository you forked from.

Once you are content, and you deem your work worthy to see the light of the world, it is time to submit a request to add it to the original project! Navigate to the project, and make your way to ‘Pull Request’

Click the ‘New Pull Request’ Button, and select ‘Compare Across Forks’. Under the Head Fork, select your fork and branch — it should list a diff or two between your current head and theirs

If you are content with this change, click the ‘Create Pull Request’ button, and fill in some details about your fix:

Once you are content with the details, title, and are properly following the guidelines of the repository (if there are any), hit ‘Create Pull Request’ and you will be taken to a page with the status your request, and any relevant commentary.

If your pull request is accepted — CONGRATULATIONS! You have just contributed to Open Source software. You made the world just that much little bit better. It is as simple as that!

Like every great journey, it begins with a step. Start small, don’t be afraid to fail (For every request I’ve had accepted, I’ve had many fail, get revised, or just plain old pointed out as being useless).

Open source is a fantastic way to give back to the software community, as well as a great way to keep your development skills sharp. There’s no feeling quiet like working hard on a bug affecting many people, getting it right, submitting a request and getting it merged into master! The next time people update their code against the repository, they will have your work on their computer.