The best open source license to apply to your code depends on your objectives. Once you know your objectives, the license pretty much picks itself, if we follow some simple rules.
First, this picker assumes that there are only handful of reasonable choices: GPL, LGPL, MPL, Apache 2.0, BSD, MIT, public domain (CC Zero) and AGPL. The reason for the limited choices is that picking an unusual license will usually backfire, because it will limit adoption. If you think you want to pick an open source license but none of these is good enough, you may not really want an open source license, and should consult with an expert on how to achieve your code release goals. But at least, you should choose a different license only with caution. To be clear, this does not mean these are the best written licenses, viewed in a vacuum — just that they are usually the best choices.
- If you need to protect your patents, you should choose a license with patent terms, such as GPL3,LGPL3, MPL2 or Apache 2.0. There are differences of opinion over how to manage patents relating to open source software, so your patent lawyers may not agree with this rule.
- If you must be compatible with the Linux kernel, you can only choose GPL 2 or a compatible license, such as LGPL 2.1, BSD or MIT. GPL2+ or LGPL2.1+ will also work. MPL2 will also do in a pinch.
- If you expect people to adopt your software for use in commercial IoT, you can’t choose GPL3 (or its variants) because most developers will not adopt it, due to the Installation Information provisions.
- If your software will not typically be distributed, then choosing a copyleft license like GPL is not useful, because its copyleft provisions will not matter.
There are many combinations of answers that don’t work together (such as patent grants, IoT and SaaS), and when the picker encounters such a case, it produces an alert as to which path it is taking and which element it prioritizes.
When several options would meet your criteria, the picker will choose the most popular or permissive option, or a “version+” option, on the assumption that maximum compatibility and promoting adoption is an overarching goal.