Licenses

From David's Wiki
\( \newcommand{\P}[]{\unicode{xB6}} \newcommand{\AA}[]{\unicode{x212B}} \newcommand{\empty}[]{\emptyset} \newcommand{\O}[]{\emptyset} \newcommand{\Alpha}[]{Α} \newcommand{\Beta}[]{Β} \newcommand{\Epsilon}[]{Ε} \newcommand{\Iota}[]{Ι} \newcommand{\Kappa}[]{Κ} \newcommand{\Rho}[]{Ρ} \newcommand{\Tau}[]{Τ} \newcommand{\Zeta}[]{Ζ} \newcommand{\Mu}[]{\unicode{x039C}} \newcommand{\Chi}[]{Χ} \newcommand{\Eta}[]{\unicode{x0397}} \newcommand{\Nu}[]{\unicode{x039D}} \newcommand{\Omicron}[]{\unicode{x039F}} \DeclareMathOperator{\sgn}{sgn} \def\oiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x222F}\,}{\unicode{x222F}}{\unicode{x222F}}{\unicode{x222F}}}\,}\nolimits} \def\oiiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x2230}\,}{\unicode{x2230}}{\unicode{x2230}}{\unicode{x2230}}}\,}\nolimits} \)

See https://choosealicense.com/ for help choosing a license for your project.
They have a high-level comparison between licenses at https://choosealicense.com/licenses/.

In general, you should use one of the MIT, Apache, or BSD licenses.
Larger projects, such as tensorflow, tend to go Apache since it has some patent clauses.

If you choose a variant of GPL, it heavily decreases the likelihood of others, especially companies, using your code since GPL forces derivatives of the work to be opensource. This is typically known as a copyleft license.

If you are writing closed-source software, only use other software which are MIT, Apache, or BSD licensed.

MIT License

MIT License

Permissions
  • Private and commercial use
  • Permits redistribution with or without modifications
  • Permits copy, modify, merge, publish, distribute, sublicense, sell
Conditions
  • Requires license and copyright notice
MIT License

Copyright <YEAR> <COPYRIGHT HOLDER>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

BSD Licenses

See Wikipedia: BSD licenses

The BSD Licenses are the 0, 2, 3, and 4 clause licenses. Each licenses contains some of the following clauses (in order).

  • Redistribution of source must contain the license
  • Redistribution of binary must reproduce this license
  • Names of contributors may not be used for promotion
  • Advertising must display attribution: developed by ...

Apache License

Permits
  • Commercial use
  • Distribution with or without modification
  • Patent use
  • Private use
Conditions
  • License and copyright notice
  • State changes

General Public License (GPL)

This is referred to as a copy-left license.
All derivatives and extensions of this program must use the same license.

GPLv2

Basically any derivatives of the program must be open-source to whoever can obtain the binaries.
E.g. if you sell a device running your custom linux kernel, you must open-source your custom linux kernel.

GPLv3

GPLv3

You cannot link your proprietary program to any GPL v3 program.

Linus does not like GPLv3 due to blocking Tivolization, restricting hardware from running modified versions of GPL software.
See Tivoization

LGPL

Same as GPL but you can dynamically link to it from proprietary software.
However, you must provide source for the version of the library you are using.

AGPL

APL 3.0

The GNU Affero General Public License is basically GPL but where interaction over the network counts as distribution.
So if people can interact with your AGPL program over the internet, then you must open-source it.

Creative Commons Licenses

Resources