Intellectual Property
Software licenses that developers should know
A guide through the main licenses to choose
Once your MVP is ready to launch on the market, we need to choose a software license to protect our system.
The problem is the many licenses out there to know about, most are very similar to each other.
These main licenses include most needs of a software engineer.
Why licenses matters?
Software licenses establish what is possible to do when having access to your code or when using its services.
They are responsible to protect the intellectual property of the code’s owner. The World Intellectual Property Organization (WIPO) defines this property as:
Intellectual property (IP) refers to creations of the mind, such as inventions; literary and artistic works; designs; and symbols, names and images used in commerce.
IP is protected in law by, for example, patents, copyright and trademarks, which enable people to earn recognition or financial benefit from what they invent or create. By striking the right balance between the interests of innovators and the wider public interest, the IP system aims to foster an environment in which creativity and innovation can flourish. — WIPO
In other words, we can expect that software licenses are responsible to protect our earnings, limit the vendor’s liability and guarantee the authorship of the work. All by law.
5 types of licenses
Proprietary
Proprietary or commercial license types are the most restrictive type. We can’t copy, modify or distribute. It respects the owner’s rights and protects the software from unauthorized use.
Copyleft
By the type name, we see an opposite idea of the “copyright”. These licenses are known as reciprocal, despite the licensed code can be changed and distributed, it has to run under the same copyleft license.
As they are not commercial-friendly licenses. So if you’re a company or someone trying to make some extra bucks, you should ignore copyleft’s projects.
GNU Lesser General Public License (LGPL)
Also known as “weak copyleft”, we can link our systems to LGPL-licensed libraries with any license we want, even proprietary.
Linking with LGPL libraries will require minimum obligations, but if we modify its contents or incorporate its code, so the requirements will be as are the copyleft ones.
Permissive
This is the most popular open-source license type. They are recommended for those who want to preserve the attribution copyright, but depending on the license it can have others restrictions on it.
The BSD and MIT licenses are famous examples of permissive licenses.
Public domain
This is the community-friendly type. Anyone can use, change, and distribute without any restriction.
Public domain codes are rare and their definition change according to the jurisdiction.
Pay attention, because this permissive license does not force companies to follow the goods programming practices.
The main licenses
GNU GPLv3
Type: Copyleft
- Copyright and license notice preserved.
- The code must be open-source.
- Replicate the license for any copies and derivatives of the software.
- All libraries used must be in the same license.
GNU LGPLv3
Type: LGPL
Like GPL, but not extended for the libraries.
- Copyright and license notice preserved.
- The code must be open-source.
- Replicate the license for any copies and derivatives of the software.
MIT License
Type: Permissive
This is one of the most popular licenses.
- Copyright and license notice preserved.
Apache License 2.0
Type: Permissive
Interesting if you want patent protection.
- Copyright and license notice preserved.
- Patents must be respected.
The Unlicense
Type: Public domain
By default, any system that does not set a license is under the Unlicense. It's a public domain-like license. Anyone can use the code without limitations.
Other licenses less relevant
GNU AGPLv3
Type: Copyleft
- Copyright and license notice preserved.
- The license is extended to all copies and modifications.
- The license is extended to all libraries or links that use the code.
- All libraries the code uses need to be open source.
- If the software has an online service it must be open-source.
Mozilla Public License 2.0
Type: LGPL
- Copyright and license notice preserved.
- Files from the licensed project or derivatives must be open-source.
Boost Software License 1.0
Type: Permissive
- Copyright and license notice preserved for source code (not the binary files).
What means “Copyright and license notice preserved”?
We need to tell people who is the owner of that code. This means that you can’t delete comments like the following.
/*!
* Bootstrap v5.0.2 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
In the example, the owner of the code is the Bootstrap company and has a copyright from 2011 to 2021 under the MIT license.
You can add more lines to the notice showing your participation in the authorship, but everyone should know the original author.
What about Proprietary licenses?
For commercial purposes, it works another way. This kind of license is the most restrictive. Public licenses usually do not satisfy all guarantees that the consumer or the company need.
Commercial projects are in private repositories so that no one can copy them. Just in cases of code leaks, its recommended to add a copyright statement on the README file, like
# LICENSE
Copyright (c) <year> <copyright holders>. Allright reserved.
{project} can not be copied and/or distributed without the express permission of {name}.
And add a copyright header to your code files
/*******************************************************
* Copyright (C) 2018-2019 {name} <{email}>
* This file is part of {project}.
* {project} can not be copied and/or distributed without the express
* permission of {name}
*******************************************************/
Most companies define their rights on the end-user license agreement (EULA), where they can explain all specifications about the services provided and the limitations of the user.
How to attach a license to a project
Add a license to your repository root. Usually named LICENSE or, for markdown style, LICENSE.md.
GitHub already has this ready for you when creating a repository.
Still with doubts?
Thanks for reading this far, but maybe you still not feeling like you could choose a license on your own, there is a solution.
I selected online sites to help you with this decision. They will give you a public license to your needs or, at least, filter some options for further research.
- https://choosealicense.com/
- https://ufal.github.io/public-license-selector/
- https://creativecommons.org/choose/
- https://tldrlegal.com/licenses/browse
Be aware that some of these sites offer licenses not discussed in this article.
What happens if someone uses my copyrighted work without permission?
Even if you have licensed your code properly, answering this question is hard. The consequences will depend on regional law and the interpretation of the facts.
The first challenge is to prove the code used is yours. After, have you some lead on how the offender accessed your code?
If you have proof and it is clear what happened, search for legal support to understand how the law can support you.
This is probably not the answer that you are expecting, but the fact is that the law is outdated regarding technical matters.
Author’s opinion: Is worth it to add a LICENSE?
It depends. Keep in mind what is the objective of the project when choosing a license.
Intellectual property is important, but also private others to work with the best resources available, so for the community’s sake we should be as permissive as we can.
I usually use the MIT license for personal projects to recognize me as the original writer. And it's short and simple.
Another license that I like is the Unlicensed one. I don’t care how they will use my code. No one notifies the author when copying or modifying his code, even under a license.
The market is competitive and companies need profits to survive, so they should keep using licenses and patents to protect their earnings and authority.
Finally, only you know the needs and perspectives of your project. Be informed and think carefully.
If you want to read more of my thoughts and programming tips, then check out my articles and follow me for upcoming content.