Open-source software (OSS) has become immensely popular and widely accepted by development teams worldwide. To choose the right open-source library, you need to know the factors that will determine which OSS best fits your business and technical needs.
In this blog, I will share with you some of our learning from building the open-source platform Amplication.
We will review the major considerations we recommend while choosing and using open-source for your project or organization.
1) License Compliance
One of the common misconceptions regarding open-source software is that you can freely use or modify it without needing a license. Unfortunately, this is not at all true. Various types of licenses exist for OSS, and knowing the kind of license your OSS requires is critical since many details given in that license will impact your decision to use that particular OSS.
One such detail is the terms and conditions of a license, which describes the usage of the software. Your contribution to the ongoing development of the OSS and your incorporation of the software into other packages.
There are two main types of licenses for an OSS:
Permissive
This gives the greatest freedom in terms of software use, modification, and redistribution; you can even redistribute it with your application as proprietary software. Some of the most popular licenses of this type are:
Apache License
From the Apache Software Foundation (ASF), this license allows you the flexibility to freely modify, use, and even distribute any OSS licensed under the Apache license, while adhering to its terms and conditions.
MIT License
This is one of the most permissive licenses from the famous university of the same name. It gives you the freedom to do anything you want with the software—as long as you add a copy of the original MIT license and copyright notice.
Berkeley Source Distribution (BSD) License
The BSD License is another permissive license that lets you use the OSS freely in any application, modify it, and even distribute your application's code in either source or binary format as long as you retain a disclaimer, copy of the copyright notice, and list of conditions.
Copyleft
This imposes more significant restrictions in terms of how you can redistribute the code; users must make their entire source code public, along with all the rights of modification and distribution. Some of the most popular licenses of this type are:
GNU General Public License (GPL)
The GPL license was one of the first OSS licenses. It forces applications using an OSS with GPL to distribute their entire source code under the same license.
Lesser General Public License (LGPL)
This license applies the same terms as GPL with two main variations. Firstly, it triggers GPL for projects that are distributed or made available over a network. Secondly, you are not required to distribute the entirety of a larger licensed work if some smaller projects are accessed from it.
Eclipse Public License (EPL)
Any application developed using an OSS with EPL can be sub-licensed and combined as long as they follow the condition that any non-EPL elements reside independently as separate modules.
So, the need to keep a keen eye on the type of license an OSS has is of utmost importance, as it may also impact your project's terms and conditions.
2) Open-Source Project Maintainers
As good as the OSS may be, the sustenance of the software depends on its maintainers, as they’re the ones that make the fast and crucial changes. When an OSS is in its initial years and does not have huge community support, the maintainers play a key role in its success. What is the level of activity that happens in the OSS? How many bugs are there? How many developers are working on it? These questions are critical in selecting the right OSS for your needs.
Often, many large organizations, like IBM or Red Hat, and other local organizations back an OSS and extend commercial support to it. This can greatly impact an OSS being adopted since these large organizations do their full due diligence before extending their support to an OSS, thus increasing its reliability and credibility. It also means that you can expect better support. Alternatively, if a project is maintained by individual developers, then their reputation in the open-source community is a big factor to consider. The more well-known the developers behind an open-source project, the higher the chance it achieves wider adoption, trust, and support by a larger and more engaged community. It will also boost its chances of receiving commercial support.
3) Community & Contributors
One of the greatest strengths of OSS is the large number of active and talented community supporters who play an integral part in keeping the project moving forward. The community, those using the product, is the engine behind making the OSS successful and influencing its progress heavily. Most of the testing of an OSS is done by the community, which helps OSS developers get quality feedback. The community also answers OSS-related queries for reported bugs or feature requests. The larger and stronger the community, the better your chances of receiving assistance in case of any trouble.
You also need to know how open an OSS is to contributions. If it’s challenging to contribute, it will potentially decrease the number of users who can be an active part of the community and, therefore, limit OSS adoption.
4) Support
It’s always important to check out the support available for an OSS before you decide to use it for your project or organization. The open-source community is responsible for after-development support and consists of developers who provide free services and expertise for technical support and bug fixes. Users can make queries regarding, for example, installation, bugs, requests for additional features, customization of any existing features, and understanding any part of the code; these queries will then be addressed by the public groups and forums of the open-source community.
5) Software Maintenance
As mentioned in the above sections, however great the usefulness of an OSS may be, its support and maintenance are equally and more important in deciding its success and sustenance. Every software is bound to have bugs and require code changes as the technology evolves and changes. So it would be best to choose an adequately maintained OSS, as this will ensure you don’t get stuck in a phase where a critical bug in the selected OSS impacts your application.
A good project site should be able to provide answers to questions like:
- When was the last commit made?
- How often are new releases?
- How often does code review take place?
- How many pull requests are there?
- How many project forks have been made?
- How many open issues are there?
- How many previous issues have been recorded?
All these questions will help you better understand the maintenance of the OSS so you can decide if this is the right library for you.
6) Tech Stack
It would help if you did not overlook the tech stack when selecting an OSS for your project or organization. There could be a few open-source software that serves your requirements, but does your team have the skill set to handle its code and use it in your application?
Ideally, you want the OSS to be on the same tech stack as that of your project, but if you can’t find an OSS that is, it should at least be compatible with your current tech stack. If you have to refactor a lot of your code for a particular OSS, then it’s not really a good choice.
Additionally, choosing an OSS might require you to train your team on a particular skill set, which will require some cost—negating the entire reason for using open-source software in the first place. So pick an OSS that fits well with your current tech stack and can be managed with your team’s current skill set. There may be some cases where the OSS uses some modern tech stack and training your team on it will benefit other projects or future projects. In this case, it can be better to train your team on the OSS’ tech stack and adapt to it.
7) Documentation
Most of the popular and well-reputed open-source technologies will have good documentation, which solves many initial problems you will face when using it in your application.
There are generally two kinds of documentation: one for the general users (users looking to use the OSS in their projects with almost no changes) and one for developers (who intend to contribute to the project). The documentation for general users usually describes how to use the system, installation, dependencies, some example code snippets, best practices to follow, etc.
The documentation for developers describes how to add or change the code; this is critical and should be as detailed as possible, including steps to debug, FAQs for common and past issues, version information with changes in that version, etc. All this information will come in very handy if you intend to change the code in the future.
So always look for an OSS with decent end-user and great developer documentation.
Selecting an Optimal Open-Source Software - the Bottom Line
While open-source software is a great way to save some costs in development, it also provides much more flexibility, which can help development teams innovate in enterprises, startups, and small companies.
At the same time, it is imperative to avoid getting carried away with these aspects and consider other factors discussed in this article before choosing an OSS. Selecting the wrong OSS may not cause problems at first but can give you major headaches in the future, including legal issues due to licenses, fixing bugs, etc. When deciding which OSS is best, always carefully consider your requirements and how a particular OSS will fit those requirements.
How Amplication can help
We've built Amplication as open-source software that relies on other well-established open-source technologies, each selected after careful consideration. Our evaluation was made based on the points above, and we’ll be glad to share our complete thinking process—but that will have to wait for another post.
Meanwhile, Amplication maintainers and contributors are only a click away on our Discord server, if you have any questions or need a piece of advice.
Also, you’re always welcome to check the project’s progress in our GitHub repo.