The Underestimated Value of Open-Source05.10.2020 in open-source-softwarevon Max Strübing
Open-source software is everywhere and it's hard to imagine a world completely without. In this article, I will describe what Open Source is, why we should use it and how it can help us to be better engineers.
What is open source
Open-source software means that the source code of a software is publicly available. Everyone can read, copy or change the source code which makes the software more trustworthy and long-living than closed source software. Famous and big examples of open-source software projects are the , , or but there are also many many small open-source software projects out there.
If you can read code, you are actually able to understand and evaluate what is happening when you execute that software. Not only what the software pretends to do but rather what it really does.
This feature also allows everyone to scan the source code for security vulnerabilities or other weaknesses of any kind, which adds to the trustworthiness mentioned above.
Another main advantage is that you are able to request help from basically every user/contributor of that software which is mostly faster and provides more creative solutions than most commercial support.
Also, the software is not only dependent on the original author and can be maintained and extended by the community. There can be even different versions of the same software with different features. If the community thinks it would not be a good idea to add a specific feature, someone can copy the source code and release their own version of it.
You can learn a lot, and I mean really a lot!
Reading and understanding the source code of other programs may not be easy, especially if the software is relative complex, but you will learn a lot in the progress as you are confronted with ideas and solutions from many other people which spend sometimes hours, days or even longer with a specific problem and came up with a solution.
If you are also willing to contribute and not only to use the software you gain another few advantages.
You will be forced to think way more about your problem than with closed source. As the software will be used by many other people, it is not only your specific use case which is relevant. This forces you to gain a deeper understanding of the concrete problem and you are also forced to think of reasonable abstractions and edge cases as well as configurability.
Another important step, which is often not really recognized is that it is not only important to fix the problem or build that feature, it is also very important to write readable and maintainable code, otherwise no one will be able to touch it and as the software evolves it may be removed eventually because no one understands.
As everyone knows, good documentation is key, you actually need to write documentation, otherwise, no one will be able to use your cool new feature
and the community of that project will not be happy and may not even merge your cool new feature. This all may sound difficult, but I think you will learn key skills which are important or beneficial for your whole career as a software engineer.
It is especially beneficial for job applications because others can really see what you are doing rather than just talking about it or even worse, test your skills on a whiteboard.
Another major advantage is the joy you feel when others actually use the software you have written, especially if it will be used in ways you don't even consider.
What may be viewed as a disadvantage is the monetization of your product. As this is true at the first glance, there are also ways of making money with open-source software.
If your software is a service you could provide a hosted solution where users would have to pay money to use it, but if they really want and have the resources they could also host it themselves.
On the other hand, you are an expert in using, customizing and developing the software, so if others need support they could hire you to help them.
If your software grows and more and more people are contributing to it you will have no other choice than to set up some processes, like: "When is someone allowed to merge a PR?", "Who decides if something will be added or not?", "Who has the last word in case a conflict arises?", "What documentation is mandatory?", "Do we raise money?"(In case of a non-profit open-source project), "What kind of merchandising are producing?" and there are many many more, that are all questions that came to my mind in less than 5 minutes. To set up such rules and processes will feel cumbersome at the beginning, but you will not be able to grow your project without. There is no silver bullet, you will need to think of processes and rules on your own, what is applicable to your project, but sure you can grab inspiration from other open-source software projects.
Open-source software is very popular because of the trust this gives its users. Contributing to it also has a bunch of advantages for the contributing
individuals although it is way harder than working on individual and closed source software as you need to pay attention to more and greater details and you can even earn some money with it.