Open source
First of all, we start with a definition of open source—it is a way of thinking about the development of software that encourages the sharing of ideas and code. All sections of a product—documentation, source code, and so on—should be made publicly available. Using this model, you can build a product that will be able to benefit from the continuous improvement boosts given by the community in terms of standards, security, and technology evolution.
Sometimes, people confuse open source with the concept of no cost, which means we can use the technology for free. Using a technology only on the basis of its cost (cheap versus expensive) can expose your project to very high risks, including the failure of the objectives set. This way of perceiving open source is extremely reductive and dangerous.
Open source is much more. It is a model, like a philosophy, that encourages open collaboration and the sharing of ideas. An idea becomes stronger and more useful if more people collaborate to identify the weaknesses in order to improve them and find the right solutions. The intent is to promote these ideas in order to create an ecosystem based on solid rules for building the architecture of the future and to make all ideas freely available.
In this way, a community is created that cannot only develop the ideas that have emerged, but also continues the work of improvement, evolution, and dissemination. We can therefore state that, as in all other sectors, even in information technology, unity is strength.
Once the standards on which the technologies are based have been identified, it is possible to move on to their realization. In this stage as well, open source represents the best approach.
All stacks of software can grow in a better way if implemented under the open source model. Imagine having a community spread around the world that could test, evaluate, update, and fix your code in many different scenarios; a team composed of people, of different cultures and different skills, linked by a common goal—to create and consolidate a development framework. What company has such a special team?
If we think about the most common tools and framework used in information technology, we could immediately have an idea of how much open source communities are involved in our work life:
- Software foundations:
- Eclipse Foundation: http://www.eclipse.org/
- Linux Foundation: https://www.linuxfoundation.org/
- Python Software Foundation: https://www.python.org/psf/
- OpenJDK: http://openjdk.java.net/
- Operating systems:
- Fedora: https://getfedora.org/
- Linux kernel: https://www.kernel.org/
- CentOS: https://www.centos.org/
- Containers:
- Docker: https://www.docker.com/
- Kubernetes: https://kubernetes.io/
- Middleware:
- Apache Software Foundation: http://apache.org/
- WildFly: http://www.wildfly.org/
- Jakarta EE: https://jakarta.ee/
- Operations:
- Ansible: https://www.ansible.com/community
- KVM: http://www.linux-kvm.org/page/Main_Page
- OpenShift: https://www.openshift.com/
- OpenStack: https://www.openstack.org/
- Storage:
- Ceph: https://ceph.com/
- Gluster: https://www.gluster.org/
This is only a fraction of the great number of open source communities involved in just a few critical areas. Do you still continue to think that open source means only free of cost?
One of the key points of the open source model is participation. Collaboration between people in the community is fundamental and solves one big question that companies often have—should they build a solution from scratch, or buy a solution that implements their requirements?
It's difficult to have all the skills needed to build an entire development framework. Buying a product from a vendor may solve the problem and reduce the effort of implementation, but leaves you unable to know the limit of your solution and the margins for improvement.
Using an open source-based solution gives you the opportunity to know exactly what you're using, letting you know whether your solution will be able to adapt to the future evolutions of information technology.
You should choose your open source community and project based on your needs.
Now you are ready to build your environment using open source products, frameworks, languages, and so on, and do the following:
- Share your knowledge through blogs, social networks, and all free channels that give you the opportunity to disseminate knowledge and encourage the exchange of ideas.
- Create your source code and donate it to the community, using one of the open source licenses and standards (https://opensource.org/licenses).
- Fork, star, watch, and create issues on open source repositories, such as GitHub, in order to promote good principles and ideas.
- Take part in the source life cycle of the open source project, and submit code that is able to solve issues that you may encounter during your experience.
- Help with documentation, in order to allow an increasingly clear and simple use of open source code.
- Help to test features; this could help the community to increase the strength of code, and gives an easy-to-understand example of usage of code.
In other words, you can become part of the community and make your contribution according to your skills, and the time you can dedicate.
From the application development perspective, open sourcing has provided a great contribution over the years. One of the most popular programming languages that has grown (thanks to the help of open source communities—this is one that will be the leading actor in our microservice journey) is Java.