Some of you may have cringed reading the title, as I can imagine we as developers don’t really like documentation do we? Forget the licensing, we don’t even care about the documentation related to the code we are working on.
Time and again, I have always stated - documentation is of utmost importance. Infact a document should be created before creating a piece of code for the product. POCs are exceptions. Anyway, this is a topic for sometime later.
Today I learnt about Software licensing - specifically “open source” software licensing and I would like to shed some light but not in detail. By the end of this post, I expect you to understand the importance of this so that it enables you to be a better “professional” developer. Free/Open source softwares can be classified in 2 ways - value based and rule based.
Depending on the intention of the software being created, softwares are categorised as below. They sound similar and without much knowledge we normally generalise it by calling it “free” or “open source”. But there are fundamental differences that you as a user/developer should be aware of.
- Free software - Softwares which are created keeping user rights in view as a matter of liberty. This need not necessarily mean free of charge and are covered by copyright laws.
- Open source software - This classification is done more on the technical grounds. The focus is on exposing the source code. Again, this doesn’t talk about the cost aspect and is covered by copyright laws.
- Freeware - This type of software may be created for marketing purposes and they are free of charge almost always. But that does not mean you have access to their source code as well as the creator may restrict the functionality of the software. They are also protected by copyright laws.
- Public-domain software - These types of softwares are created purely for the public and anybody can use it freely. They are not covered by copyright laws. (We will see what copyrights are in next paragraphs.)
Now that we are through this, we would carefully choose our words before calling anything free or open source.
Software licenses are also categorised based on certain rules aka legal classification. They are as below. These rules revolve around the creator and user of the software.
- Copyright - This type of license basically states that the creator of the software is in control. A user may access, use, modify the product/software as per the rules laid down by the creator. Creator also dictates the commercial restrictions.
- Copyleft - This license states that the user can do what they want but within certain rules. The source code is open, however, any new product created using this type of license should be attributed back to the creator and mandates this product to be open-source and use copyleft license as well.
- Permissive - This type of license lets the user access the source with few restrictions. Any new product built using software with this type of license need not be open source, neither is it bound to the same type of license. However, if permissive softwares are used in new products, then the work should also be attributed to the creator of permissive software.
- Creative Commons - This is very much similar to Permissive with an exception that the users have no restriction on what they want to do with the software.
Below are some licenses you may have heard of as they are used most often. Please note there are many more types of licenses other than the below.
- Apache 2.0 - Permissive. Copyright protection. Can be used in commercial applications and proprietary projects. Example software: Kubernetes
- BSD - Permissive. Copyright protection. Can be used in commercial applications and proprietary projects. Example software: Django
- GNU GPL (General Public License) - Copyleft. Copyright protection. Cannot be used in proprietary projects. Example software: Notepad++
Various types of software and their related clauses gives rise to complexity. This becomes a very important consideration in business while packaging a product. All the open source softwares being used has to be declared upfront to avoid any kind of conflicts.