mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
111 lines
3.6 KiB
Markdown
111 lines
3.6 KiB
Markdown
![]() |
# License Guidelines
|
||
|
|
||
|
We only accept formulae that use a [Debian Free Software Guidelines license](https://wiki.debian.org/DFSGLicenses) or are released into the public domain following [DFSG Guidelines on Public Domain software](https://wiki.debian.org/DFSGLicenses#Public_Domain).
|
||
|
|
||
|
## Specifying a License
|
||
|
|
||
|
All licenses are identified by their license identifier from the [SPDX License List](https://spdx.org/licenses/).
|
||
|
|
||
|
Specify a license by passing it to the `license` method:
|
||
|
|
||
|
```ruby
|
||
|
license "MIT"
|
||
|
```
|
||
|
|
||
|
The public domain can be indicated using a symbol:
|
||
|
|
||
|
```ruby
|
||
|
license :public_domain
|
||
|
```
|
||
|
|
||
|
## Complex SPDX License Expressions
|
||
|
|
||
|
Some formulae have multiple licenses that need to be combined in different ways. In these cases, a more complex license expression can be used. These expressions are based on the [SPDX License Expression Guidelines](https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/).
|
||
|
|
||
|
Add a `+` to indicate that the user can choose a later version of the same license:
|
||
|
|
||
|
```ruby
|
||
|
license "EPL-1.0+"
|
||
|
```
|
||
|
|
||
|
GNU licenses (`GPL`, `LGPL`, `AGPL` and `GFDL`) require either the `-only` or the `-or-later` suffix to indicate whether a later version of the license is allowed:
|
||
|
|
||
|
```ruby
|
||
|
license "LGPL-2.1-only"
|
||
|
```
|
||
|
|
||
|
```ruby
|
||
|
license "GPL-1.0-or-later"
|
||
|
```
|
||
|
|
||
|
Use `:any_of` to indicate that the user can choose which license applies:
|
||
|
|
||
|
```ruby
|
||
|
license any_of: ["MIT", "0BSD"]
|
||
|
```
|
||
|
|
||
|
Use `:all_of` to indicate that the user must comply with multiple licenses:
|
||
|
|
||
|
```ruby
|
||
|
license all_of: ["MIT", "0BSD"]
|
||
|
```
|
||
|
|
||
|
Use `:with` to indicate a license exception:
|
||
|
|
||
|
```ruby
|
||
|
license "MIT" => { with: "LLVM-exception" }
|
||
|
```
|
||
|
|
||
|
These expressions can be nested as needed:
|
||
|
|
||
|
```ruby
|
||
|
license any_of: [
|
||
|
"MIT",
|
||
|
:public_domain,
|
||
|
all_of: ["0BSD", "Zlib", "Artistic-1.0+"],
|
||
|
"Apache-2.0" => { with: "LLVM-exception" },
|
||
|
]
|
||
|
```
|
||
|
|
||
|
## Specifying Forbidden Licenses
|
||
|
|
||
|
The `HOMEBREW_FORBIDDEN_LICENSES` environment variable can be set to forbid installation of formulae that require or have dependencies that require certain licenses.
|
||
|
|
||
|
The `HOMEBREW_FORBIDDEN_LICENSES` should be set to a space separated list of licenses. Use `public_domain` to forbid installation of formulae with a `:public_domain` license.
|
||
|
|
||
|
For example, the following forbids installation of `MIT`, `Artistic-1.0` and `:public_domain` licenses:
|
||
|
|
||
|
```bash
|
||
|
export HOMEBREW_FORBIDDEN_LICENSES="MIT Artistic-1.0 public_domain"
|
||
|
```
|
||
|
|
||
|
In this example Homebrew would refuse to install any formula that specifies the `MIT` license. Homebrew would also forbid installation of any formula that declares a dependency on a formula that specifies `MIT`, even if the original formula has an allowed license.
|
||
|
|
||
|
Homebrew interprets complex license expressions and determines whether the licenses allow installation. To continue the above example, Homebrew would not allow installation of a formula with the following license declarations:
|
||
|
|
||
|
```ruby
|
||
|
license any_of: ["MIT", "Artistic-1.0"]
|
||
|
```
|
||
|
|
||
|
```ruby
|
||
|
license all_of: ["MIT", "0BSD"]
|
||
|
```
|
||
|
|
||
|
Homebrew _would_ allow formulae with the following declaration to be installed:
|
||
|
|
||
|
```ruby
|
||
|
license any_of: ["MIT", "0BSD"]
|
||
|
```
|
||
|
|
||
|
`HOMEBREW_FORBIDDEN_LICENSES` can also forbid future versions of specific licenses. For example, to forbid `Artistic-1.0`, `Artistic-2.0` and any future Artistic licenses, use:
|
||
|
|
||
|
```bash
|
||
|
export HOMEBREW_FORBIDDEN_LICENSES="Artistic-1.0+"
|
||
|
```
|
||
|
|
||
|
For GNU licenses (such as `GPL`, `LGPL`, `AGPL` and `GFDL`), use `-only` or `-or-later`. For example, the following would forbid `GPL-2.0`, `LGPL-2.1` and `LGPL-3.0` formulae from being installed, but would allow `GPL-3.0`
|
||
|
|
||
|
```bash
|
||
|
export HOMEBREW_FORBIDDEN_LICENSES="GPL-2.0-only LGPL-2.1-or-later"
|
||
|
```
|