Despite the lyric “Money makes the world go around” from the musical Cabaret, there are a whole host of things available for free and software is no exception. There is a good chance that you already have several free programs at your disposal, the obvious one being the web browser you are using to read this article! Free also extends to the bits you cannot see, the individual components that make up an application.
Breaking Down Complexity
All software is comprised of components. These are the building blocks of computer systems and applications, some of which you interact with. You can consider software in a similar way to a car, a collection of components the wheels, engine, seats etc. Just like a car, some of the larger components, such as the engine, are themselves made of smaller components.
From this analogy it should be evident that components help to break down a complex system into smaller, simpler sub-systems which can be crafted together to meet a desired goal - enabling you to drive from place to place or, in our case, to create applications.
A rich and diverse ecosystem exists in the world of software development where each software component exists to solve a particular problem.
Examples of software components include on-screen controls such as buttons, the boxes you type into or the spell checker you use. There are many other components that you cannot see, but are vital for things such as accessing the data stored in databases or to help with user security.
The Benefit of Re-Use
To help understand software development, there are two well-known sayings to consider:
“Many hands make light work”
“Do not reinvent the wheel”
The first suggests that the more hands you have available, developers in this case, the faster and easier it is to create an application. This is true, but not in the sense that a software project needs a huge team from the get go to develop everything from scratch. That would lead to a high degree of complexity, take a lot of time and be expensive for a relatively simple software development project. Instead the “many hands” idea must be considered along with the second saying, which distils to a single concept: re-use.
By re-using components that have already been developed, you harness the power of a big team with many of the complex problems solved even before you start your project!
Re-use is great for developers, as it allows them to focus more on the end business goal without the need to build and test the intricate details of every single system component. It is great for clients too, as their software can be delivered faster and cheaper.
Open Source Software
In a similar fashion to software, some of these software components cost money to use and depending on the problem they solve, they can be expensive due to their particular specialist and complex nature. However, there are also components that can be used freely and openly, although their exact usage depends on the licence terms. Most of the free components, or libraries, are open source.
“Open source software is software with source code that anyone can inspect, modify, and enhance.” - opensource.com
Developers are generally open and sharing by nature. This is evident in the boom and consistent popularity of the open source community. Even some of the biggest names in tech have open sourced their code after realising the benefits of doing so. In fact, Microsoft have made their software development framework .NET open source and are now one of the top contributors to open source projects.
By far the largest open source community is GitHub which has 40 million users and at least 28 million public repositories as of January 2020, according to Wikipedia . This community not only provides usable and useful components, but helps to drive innovation as new ideas can build on existing ones and developers across the globe can collaborate. Despite being free, open source software has become an enabler for innovation and no doubt for economic growth too.
Pros and Cons of Open Source
Advantages of open source code include:
- As an open source community, developers from across the world can contribute on projects they are interested in.
- Entire projects as well as specific contributions will be reviewed. Improvements can be suggested and good projects will gain traction and usage.
- By reading through the code, developers can see how it functions and discover any flaws. Code transparency is particularly beneficial for security-related code.
- Through studying the codebase, it is a great way for developers to learn and hone their craft.
- The economics speak for themselves. Good, well supported components save development time and money.
Open source does have some drawbacks, including:
- Many projects are developed and maintained by just a single developer or two. If the development team move on to other things and don’t have the time to maintain the project it then becomes old and unsupported. If the project has some value other developers will step in and continue the project or build from it. Commercially available components mitigate this risk as they use some of their revenue to maintain the products they sell.
- When using several open source libraries it is difficult to keep track of the security of each library. Fortunately, there are tools which keep a close eye on versions of open source libraries and their security vulnerabilities. Developers can then move to a safe version of an alternative to ensure the end product can be kept as safe as possible.
- Before using open source projects there is a risk that a library may need to be switched out for a different one, especially for the two reasons above. Developers who use open source projects as part of their work need to be mindful of this risk.
Supporting Open Source
At Innovensa, we use several open source components directly in the software we create and to support the development, testing and delivery process. As a rule, we only use open source components if they are popular, well maintained, have an active community and we know of alternatives, just in case we need to change them. We also use version checking tools so that any libraries with emerging security vulnerabilities can be properly mitigated.
We see the benefits of the open source community and the positive impact it has had on software development and look to support the community where we can. One such case of this is by sponsoring an open source library that we use on a regular basis, called Fluent Assertions.
Without getting too technical, this library helps us test our client’s code. It allows us to clearly show the conditions that must be met by parts of the code being tested. We value this project because it is feature rich and saves a lot of time, it has made our automated tests more readable, and it is widely used and adopted by developers. The purpose of sponsoring the project is to show our appreciation and to ensure the project can be funded for continued development.
Open software components are enablers for developers to build great products. These mustn’t be taken for granted though as a lot of effort is required to develop, test and maintain them.
At Innovensa we aim to be active members in the open source community, through sharing code, identifying bugs, contributing to forums and to promote and sponsor open source projects. We are pleased to have sponsored Fluent Assertions as it helps us ensure the code we write does what our clients need it to do.
In our view, money doesn’t make the world go around, at least not on its own, collaboration and teamwork do.