New to Open Source? Know everything you need to!
Tags: beginners, opensource, git, github
Published: 2022-10-28 10:05:17

Save this article right now! It is a complete guidebook, it contains almost everything you need to know to start or boost your journey in Open Source. And I know not everything can be covered, therefore I have included a lot of resources to make your knowledge deeper and the concept clearer. 

**My First piece of Advice to you-**

> If you are hopping here and there for a long time, watching videos about open source, and how to start, stop that right now, and start doing it, **the best way to learn and get better is only by DOING IT YOURSELF!**
> 

Now No time waste, coming straight to the point.

## What is Open Source?

Let us not go deep into technical terms, you can gradually know all of that in future, but as of now, the very basic meaning of “Open Source” is something, whose source is open or available to everyone. Now that *something* can be a web app, desktop app, documentation, project, tool, resource, etc. And the **source** is the original code, or source code, documents, assets, and everything that is used to build it up. So, if they are available to the public, anybody can see the code and what’s going on behind the scenes, which is great for security, privacy, and righteousness. Because anybody can contribute, developers can make changes to it to solve any problem, add features, or just improve the code.

Non-code contributions are also a thing, and we shall not underestimate them, any contribution that helps an open-source project that does not involve writing code for example improving documentation is a non-code contribution. {[Read this Dev.to Blog Post to know more](https://dev.to/navendu/how-to-make-non-code-contributions-to-open-source-projects-35nj)}

![https://i.imgflip.com/27x7bv.jpg](https://i.imgflip.com/27x7bv.jpg)

Now here are a few examples of things which are open source, so that you can understand better -

- Linux (Used mostly in servers, basically, Linux powers the Internet you are using 😉)
- Mozilla Firefox (A great competitor in the browsers market of the big tech giants to prevent their monopoly)
- VLC media player (A widely used Media Player)
- GIMP (A raster graphics editor used for image manipulation and image editing, free-form drawing, transcoding between different image file formats, and more specialized tasks)
- Android (Need not tell much about it, it is an operating system for mobile devices)

The list will go on and you can find more by exploring a bit. The point is, these projects are open and anybody can **contribute** to them. This is not the case with closed-source projects, their source code is not public, you cannot contribute to them, you don’t know what’s going on behind the scenes, and they are owned by any company or organization.

Now you have got the basics, moving forward, you may ask…

## Why is Open Source Important?

This article will be focusing on the practical aspects, so here are the best resources I could find over the internet to save you time, you want to know about this topic -

**[Why Open Source? by Opensource.google](https://opensource.google/documentation/reference/why) & [What is Open Source, and why is it important? by IBM Developer](https://dev.to/ibmdeveloper/what-is-open-source-and-why-is-it-important-2d7g)**

Okay now, next question, for the ones who want their own benefit too (nothing bad in it, but there is something you need to be mindful of, continue reading to know that)

## Why Contribute to Open Source? What are the Benefits of it?

![https://miro.medium.com/max/790/1*U4g74coutDxAdZ6UMohJbg.jpeg](https://miro.medium.com/max/790/1*U4g74coutDxAdZ6UMohJbg.jpeg)

See my friend, the benefits are huge, it can give you a little satisfaction, or a good job! and I am not exaggerating it, it is a widely known fact in the tech community. I need not answer this question because you will feel the benefits yourself, but here are some of the benefits that I personally experienced →

- Contributing helps me understand the level of my knowledge and improves my skills a lot!
- I apply and use my skills in real-world projects
- It helps me make new connections and network with people
- I learn to collaborate on projects and teamwork
- It makes my portfolio/resume/CV a lot better and works as a verification that I have this skill and can apply it to the real world, which increases my chances to get a job or internship.
- It gives me happiness, that I have helped somebody with something, and contributed to a project.

You can read this [Twitter thread by Community Classroom](https://twitter.com/commclassroom/status/1585491720644476930?s=20&t=iPgBe1inpFO3b1CSrZ4bnA) to know a little more.

> ⚠️ **ALERT** ⚠️ If you are thinking of those benefits only, **please don’t start with open source**. You have to have good intentions, which means you should contribute not for the benefits, but for helping others, and not expect anything in return. I know this may sound a little weird, but you should first become a person *who contributes to other projects with the will to help them* with your skills and improve yourself, and not someone who does that just for getting something in return.
> 

Now, in real life, **this mindset will make you grow a lot more in your career** than the other one, which is doing it for the benefit. Yes! people will trust you more, you can be a part of tech communities, you can make your network larger, and you will get more offers because you are not a selfish person. I hope you get my point.

 

## How to Contribute?!

Okay Now I want to contribute to my favourite open-source software, umm let’s say Linux! 

Starting with the biggest ones is the only way to go, Right? I mean who would even look at smaller projects?

WRONG!

First of all, the chances of you having skills of the level that you can contribute to those large projects are really less, after all, you are here because most probably you want to start your open-source journey, you cannot handle so many things in the starting. 

And lastly, the point that smaller projects have no value is pretty illogical. Every big project today was once a really small one. Even if the future of any small project is not decided, contributing to it still helps a lot. In the beginning, you should start with the smaller ones to get the basics right and make mistakes early on, because those mistakes can become disastrous in the future when you are working on bigger projects.

As [Eddie](https://twitter.com/eddiejaoude) Says -

{% embed https://twitter.com/eddiejaoude/status/1548232201602342914?s=20&t=XRzWZZyTD1tJ8NB9H8FGtQ %}

### Where to Start?

GitHub is the best place to start, because it is a widely used platform all over the world, and natively supports Git Version Control System (VCS). You need to learn how to use Git to be able to work on projects.

### What are Git, Version Control System and GitHub?

**Note:** Git and GitHub are two different things. Git is a version control system while GitHub is a hosting service, there are other hosting services too like BitBucket, GitLab etc.

Now, What is GitHub? as Wikipedia says, 

*“GitHub is an Internet hosting service for software development and version control using Git.”*

So basically **GitHub** is a platform that allows you to host your Git projects on a remote server somewhere (or in other words, in the cloud).

There are some terminology and concepts you need to understand, which will help you to start your journey in open source. 

Starting with the jargon I used in the beginning, Git, VCS, what is all of this?

Let us understand this in very simple terms, now imagine a scenario you are building the next software that will change the world. When you start coding this project, you cannot make everything once, you cannot include all the features, or have a complete [bug](https://en.wikipedia.org/wiki/Software_bug)-free code. There will be a lot of bugs in the code, you will need to add various features or just make improvements to it with time. This means you need to **upgrade** your app to a newer **version.**

This is where the concept of **Version Control** comes, why it is needed? Because many times you will need to revert your changes to the previous version or make sure that the new feature you are adding isn’t having some bad effects on the other parts of the code. So you need to keep track of all the changes done to your project.

The worst thing any developer can do is to make a separate copy after every change 😂

![https://preview.redd.it/05b6u19pseoz.png?auto=webp&s=d2e0d2ca42a7b3c0c29d36101702a374b058f605](https://preview.redd.it/05b6u19pseoz.png?auto=webp&s=d2e0d2ca42a7b3c0c29d36101702a374b058f605)

*“Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later.”* 

You can read about Version Control in brief [here](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control).

I hope you have got a basic idea of what is Git & Version Control. If you want to learn Git in depth you can get [Pro Git by Scott & Ben](https://amzn.to/3DFgHeh), it is also available as a PDF online or I would highly recommend going through this [page](https://git-scm.com/book). If you want a quick start, you can watch this [video](https://www.youtube.com/watch?v=apGV9Kg7ics) by Kunal Kushwaha.

Now, as I told you that you can host your projects on GitHub, a repository contains all of your project's files and each file's revision history. You can discuss and manage your project's work within the repository. You can learn everything about them from [here](https://docs.github.com/en/repositories).

Now a repository is owned by a user or organization, and nobody else can make changes to them. Then how come other people contribute to it? Well, here comes the easy concept of **Forking a Repo**.

### What is Forking a Repo?


![Fork](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ut0zfq05fswt5bm6gd2.png)

When you open a repository, you can see the three buttons on the top right part. There exists the Fork Button. When you click on it, this thing appears -


![Fork is basically a copy of a repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojoc49lgy0yk6d5abrvh.png)

Is everything clear? 

So a **Fork is basically a copy of a repository which is kept in your account, and you can do anything with that copy because it is owned by you**.

So this is contributing? Just making a copy of other projects and playing with it on our own account? 

Umm No…

Then how can we contribute to the actual original project?

Well, here comes the concept of Pull Request, or PR. I know I have used this multiple times till now, and you may have gotten confused, sorry for that. 

### What is a Pull Request (PR)?

Till now you have learnt how to fork a repo but to actually contribute to the real project, you need to request the maintainers of that project to accept your changes, and you do that by making a Pull Request, you can remember it as “A request to pull your changes into their project”. Or as the [documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) of GitHub tells us, 

> *Pull requests let you tell others about changes you've pushed to a branch in a repository on GitHub. Once a pull request is opened, you can discuss and review the potential changes with collaborators and add follow-up commits before your changes are merged into the base branch.*
> 

Branches? Commits? What are all these now? 

If you haven’t already, I highly recommend exploring [Git-SCM Docs](https://git-scm.com/doc) as it will clear your concepts further. 

Or if you like my way of teaching, **please comment down below** to have a blog on the complete basics of Git & GitHub. I will do it for sure.

Wait, what is that **SCM**?

Well, SCM is **Source Code Management,** I have already explained to you what Source code is in the very beginning, and you must be knowing what *management* is, no need to explain it further.

Back to the topic, after you [create a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request), the maintainers will review it and tell if it needs any changes. Collaborators of the project can discuss what changes should be done and how. After all the discussion, the final changes are approved, and the moment every open source contributor waits for comes, your Pull Request Gets Merged!! 

![https://i.imgur.com/BPnQGGY.jpg](https://i.imgur.com/BPnQGGY.jpg)

Merging means that your proposed changes are added to the source code of the original project. Your concepts will get a lot clear when you understand the concept of [Branches](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell) and how Git Functions.

But that doesn’t end here, there is something waiting for you if you did some mistakes while working on the project. 

Merge Conflicts!

![https://media.makeameme.org/created/merge-conflicts-merge.jpg](https://media.makeameme.org/created/merge-conflicts-merge.jpg)

### What are Merge Conflicts?

As the [documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts) of Github says,

Often, merge conflicts happen **when people make different changes to the same line of the same file, or when one person edits a file and another person deletes the same file**. You must resolve all merge conflicts before you can merge a pull request on GitHub. 

Did you get it? 

See, if two people made changes to the project, and there were some common lines that were changed by both of them, how can the computer know which change to accept and which not?

This causes merge conflicts, and humans, need to resolve them to merge the changes.

I hope you have understood the basics. 

 

 Okay, Prakhar all of this was great but **how can I find the projects that I can work on with whatever skills I have?** I don’t think I am ready, I need to become a master before contributing.

No, you need not. As I said in the starting, you need to **do stuff to actually get better**. Just go to GitHub, you don’t have an account, make one, and find projects that you can contribute to.

### How to find Beginner Friendly Projects on GitHub?

Okay, now I am gonna give you 1 really good resource from where you can learn how to find projects, and tools which will help you in searching for them.

[**A guide to contributing to open source by Freecodecamp.org**](https://github.com/freeCodeCamp/how-to-contribute-to-open-source#welcome-newbie-open-source-contributors) → It is a GitHub Repo by Freecodecamp which includes everything you need to start your journey in Open Source. 

**This is all you need!** I repeat this is all you need! 

Go through this completely, it’s available in multiple languages also, explore all the links it has, read it readme thoroughly, and stop hopping here and there now.

If you demand a video resource of the same value, here it is →

**[Complete Guide to Open Source - How to Contribute by Eddie Jaoude on Freecodecamp YouTube Channel](https://youtu.be/yzeVMecydCE)**

Again, this is all you need 😇

I want to keep the number of resources minimum, therefore you may have noticed I am only linking to necessary documentation and not just random places. **To become a good developer, you need to learn the art of reading and learning from documentation, experimenting and exploring stuff and have a hands-on approach while learning.**

But wait, there’s one more thing.

Remember we talked about the mindset before starting to contribute? That mindset is really important *while* you are contributing because **you should add some value to the project** and not do anything random or useless just for showing on your profile that you contributed somewhere.

![https://pics.me.me/thumb_making-meaningful-contributions-to-open-source-software-reporting-bugs-on-42001183.png](https://pics.me.me/thumb_making-meaningful-contributions-to-open-source-software-reporting-bugs-on-42001183.png)

You can watch this [video by WebDevSimplified](https://youtu.be/tXEVL3fVbB0) and feel the anger and frustration that maintainers go through while cleaning up the spammy Pull Requests which don’t add any value to the project and were made by some people who had an intention not to contribute, but, get the swags and t-shirts. **It’s Crazy!** I guess you now get the point of why it’s super important to have the mindset of helping.

And yeah he is referring to [Hacktoberfest](https://hacktoberfest.com/), I have already written about it in my [First Contribution HacktoberFest Contribution Blog Post](https://blog.heyprakhar.xyz/sharing-my-little-journey-of-hacktoberfest-with-you), kindly read it if you are curious.

## Thank you for Reading

It was quite a long post, right?

But it’s worth reading till here, I have tried my best to not leave you dissatisfied.

At last, I would like to thank everybody who helped me in my journey. 

And **Thank You for reading my hard work**.

**Take Care ❤️**