Open Source? What's that?!!
Tags: opensource, codenewbie, beginners, sideprojects
Published: 2019-07-15 01:21:43

I've been wanting to get into open source for a while now, even before I enrolled in my coding bootcamp. I want to contribute to certain software I use by help improving it or learn to create my own plugins, extensions, etc. for that software.

Now, enters open source. What is it? How does it work? Why use open source or why contribute? How do I contribute? How do I start? When should I start? Where can I find open source? All these questions come up to me because it just feels there is so much to open source I need to know about first.  

First, **What is Open Source?** It is a type of software where the source code is distributed under license to allow people to study, alter, and redistribute the software to anyone for any purpose. GNU, or General Public License, is the free software license in order to allow the freedom and access for users with modifying the software. 


What are some popular open-source software that you probably didn't know you were already using or have seen before?

- Mozilla Firefox (Internet Browser)
- Audacity (Audio Editing)
- GIMP (Image Editing)
- LibreOffice (Practically like Microsoft Office, Pages)
- VLC Media Player (Video Media Player)
- Notepad++ (Code Editor)
- Blender (3D Rendering & Animation)
- Ubuntu (Operating System)

If there is "Open-Source" software, then there has got to be a "Closed-Source." This is also called "Proprietary" software (it's also called "closed source" software). The main developers of the proprietary software can freely rework the software. For consumers to use proprietary software, they have to agree and sign to licensing terms and conditions, from those agreements. 

##How does it work?
One of the first steps of working with open source is being able to navigate through Github. Here are some sources for a [Github Guide](https://guides.github.com/activities/hello-world/) & [Github Walkthrough](https://rogerdudler.github.io/git-guide/). 

Choose a programming language. The popular ones on Github are JavaScript, Python, Java, Ruby, and PHP. There are others but these seem to be the more common ones.

Choose a project you are interested in. This could be software that you already use or that you are curious to work with.

Choosing a big project compared to a small one. The popular open-source software would probably be overwhelming for a beginner because of how much code there is to study and catch up on understanding just to be on the same page with developers are contribute regularly to the project. There are issue labels stating "first-timers-only," "beginner," "easy,"  and other similar wording. This is a good link of [Github projects for newcomers](https://github.com/MunGell/awesome-for-beginners) to check out.

So, some things to keep in mind, **choosing a language**, **choosing a project you are interested in**, and **considering the project size**.


##Even Non-Programmers can contribute
Using the software itself and bug testing the products. This can be viable for giving user experience feedback to the developers to see what they can improve on. Working on documentation, like formatting, clarification with the language, adding images, short clips, or guides. Working with translations to be accessible for people around the world, which would mean translating the documentation, user interface, or the website itself. Applying some of your skills to offer into the program. If you are skilled in visual art, you could help with the UI design with providing some assets. If you enjoy writing, you could check for grammar mistakes in READMEs and communicate with the developers on how they were wanting to articulate certain passages in the documentation. 

##Why People use Open-source Software
There are people who prefer to use open source software compared to proprietary software. They are in control of the software they are using when things are not happening the way they one. So they can just look through the source code themselves and adjust parts they don't like. Others use it help themselves improve in their programming skills, since source code is easily accessible. They can share their work, receive critique and comments. Some people prefer this because of the security. They consider open source more secure than proprietary because the users can share the bugs they find and since any developer can jump on the project, they can help spot errors as well. With proprietary software, we have to rely on the developers for that project in order to fix issues brought up. With open source, you or other people can verify and test the issues yourself because of the access to the code.


##Why contribute?
"But why should I contribute when I should worry about building my own stuff? It is basically free labor!" There is nothing wrong with wanting to always build your projects. 

Sure you will probably make $0 of your time and effort put into an open source project, but the contribution to the project gives a trade off of a learning experience. Since you are having to read through other people's codes for the projects, you have to step out of your comfort zone of your coding style, and look into another style. It is like being a martial artist. If you were a black belt in Tae Kwon Do and now having to switch to a new unfamiliar style to you, like Krav Maga, you won't be able to utilize your moves into Krav Maga with your Tae Kwon Do background since you'll have to approach your moves in another way. It may take longer since it's brand new, but you have the martial arts experience so you can transfer your application of mindset to another style.

I just get that feeling of wanting to help out with the software that I currently use myself. For instance, I am a musician and I use Musescore, an open-source music notation software, and I've been seeing it grow and develop throughout the years. I feel like there is more that it can be done to improve it because Sibelius and Finale, two proprietary software, are the main two competitors of notation software in the music industry, and with their prices, it can be pricey for consumers, so they would choose Musescore for that reason. 

Ever since getting into coding, I've been wanting to get into Musescore's community and development because I want to try to create plugins or add-on features for the software. Although I am still overwhelmed of having to catch up in going through the whole source code. 

On the Last Note, I want to share this article that contains **Top 10 Open Source Myths Busted**: [Myth Link](https://resources.whitesourcesoftware.com/blog-whitesource/top-10-open-source-myths-busted)

##Resources

[Opensource.com](https://opensource.com/resources/what-open-source)

[Open-Source Software](https://en.wikipedia.org/wiki/Open-source_software)

[GNU General Public License](https://en.wikipedia.org/wiki/GNU_General_Public_License)

[CodeNewbie: Getting started on open source when you don't know where to start Richard Schneeman](https://www.codenewbie.org/podcast/getting-started-on-open-source-when-you-don-t-know-where-to-start)

[How to contribute to open source projects](https://rubygarage.org/blog/how-contribute-to-open-source-projects)

[Bitbucket](https://bitbucket.org/product/)