What is open source software?

Open source software is software with source code that anyone can inspect, modify, and enhance.

“Source code” is the part of software that most computer users don’t ever see; it’s the code computer programmers can manipulate to change how a piece of software—a “program” or “application”—works. Programmers who have access to a computer program’s source code can improve that program by adding features to it or fixing parts that don’t always work correctly.

Why contribute to open source projects?

There are a number of reasons to contribute to OSS (open-source software).

There are a lot of enthusiasts who simply believe that code should be open. They’re idealists who want to make the world a better place, and it drives them to contribute code. The desire to share can be a powerful motivator.

For beginners might start by fixing minor things, such as a bug in a library, sending a pull request, or even writing a piece of documentation. However, beginner developers can also learn to write so-called “clean code” code that is readable and maintainable – while contributing to open source projects. When developers realize that their code is exposed to the world, it makes them focus on making that code easy to understand and support. Programmers stick to generally accepted rules within a team, which include norms for indents, descriptions of methods and classes, variable names, and following the don’t-repeat-yourself rule. In a nutshell, when contributing to free projects you’re obliged to conform to the norms of a project.

One of the biggest benefit of contributing to Open Source project is you get the chance to be part of an active open source community where you can meet like-minded people and supporters. Moreover, if you’re a freelancer and actively contribute to open source projects, you increase your chances of being noticed by potential employers.

——— The must takeover steps before start ———

Since I'm Go Developer I will reference more info about Go stuff in each step

Explore and join the community

You can easily join an open source project by subscribing to the mailing list for that project. You can find mailing lists on official websites or on GitHub pages. After being accepted to the list, you can communicate with team members and get support if necessary. Thanks to the vibrant communities present in nearly every OSS project, you are likely to get quick replies to your questions.

Code Version Control

Mastering Git - one of the most popular version control tools (also known as revision control tools). Because developers constantly make changes to their code, they need a system that can manage those changes in a central repository. In this way, everyone involved in the development process can download a given piece of software, make changes, and submit updates.

Code Language Skills

You must master the concepts of the given language you are learning & coding in.

Go - Code Language Skills

You can learn more tips for learning Go in my Post

Tools & Helpers

You need to explore the tools, helpers and et cetera which helps the developers to make less common code, style and structure mistakes

Go - Tools & Helpers

All of referenced tools & helpers are used across the all OSS Projects written in Go.

  • Staticcheck - staticcheck is advanced go-linter
  • Go Linter - Golint is a linter for Go source code.
  • Err Check - Errcheck is a program for checking for unchecked errors in Go programs.
  • Go Sec - Inspects source code for security problems by scanning the Go AST.
  • Various pkgs for writing and executing unit/integration tests (suite,testify,httpexpect,gomock…)

Structure of Projects

It’s open software so it’s open-minded - that means you need to expect to explore very diffrent and unique structure of projects.

  • So first step is to explore the structure of the project.
  • ask the community for any questions you have.
  • Running the project local is very important step before you start to change/add anything.
  • General Go app structure - GenGo Structure
  • Explore the external libraries that are used in the project.
  • Explore the issues of the project and try to help some issue to be resolved.