---
title: License Considerations
layout: website-normal
---

The Apache Software Foundation, quite rightly, place a high standard on code provenance and license compliance. The
Apache license is flexible and compatible with many other types of license, meaning there is generally little problem
with incorporating other open source works into Brooklyn (with GPL being the notable exception). However diligence is
required to ensure that the project is legally sound, and third parties are rightfully credited where appropriate.

This page is an interpretation of the [Apache Legal Previously Asked Questions](http://www.apache.org/legal/resolved.html)
page as it specifically applies to the Brooklyn project, such as how we organise our code and the releases that we make.
However this page is not authoritative; if there is any conflict between this page and the Previously Asked Questions or
other Apache Legal authority, they will take precedence over this page.

If you have any doubt, please ask on the Brooklyn mailing list, and/or the Apache Legal mailing list.


What code licenses can we bundle?
---------------------------------

Apache Legal maintains the ["Category A" list](http://www.apache.org/legal/resolved.html#category-a), which is a list
of licenses that are compatible with the Apache License; that is, code under these licenses can be imported into
Brooklyn without violating Brooklyn's Apache License nor the code's original license (subject to correctly modifying
the `LICENSE` and/or `NOTICE` files; see below).

Apache Legal also maintain the ["Category X" list](http://www.apache.org/legal/resolved.html#category-x). Code licensed
under a Category X license **cannot** be imported into Brooklyn without violating either Brooklyn's Apache license or
the code's original license.

There is also a ["Category B" list](http://www.apache.org/legal/resolved.html#category-b), which are licenses that are
compatible with the Apache license only under certain circumstances. In practice, this means that we can declare a
dependency on a library licensed under a Category B license, and bundle the binary build of the library in our binary
builds, but we cannot import its source code into the Brooklyn codebase.

If the code you are seeking to import does not appear on any of these lists, check to see if the license content is the
same as a known license. For example, many projects actually use a BSD license but do not label it as "The BSD License".
If you are still not certain about the license, please ask on the Brooklyn mailing list, and/or the Apache Legal mailing
list.


About LICENSE and NOTICE files
------------------------------

Apache Legal requires that *each* artifact that the project releases contains a `LICENSE` and `NOTICE` file that is
*accurate for the contents of that artifact*. This means that, potentially, **every artifact that Brooklyn releases may
contain a different `LICENSE` and `NOTICE` file**. In practice, it's not quite that complicated and there is a lot of
automation to simplify places where there is complexity.

Furthermore, *accurate* `LICENSE` and `NOTICE` files means that it correctly attributes the contents of the artifact,
and it does not contain anything unnecessary. This provision is what prevents us creating a mega LICENSE file and using
it in every single artifact we release, because in many cases it will contain information that is not relevant to an
artifact.

What is a correct `LICENSE` and `NOTICE` file?

* A correct `LICENSE` file is one that contains the text of the licence of any part of the code. The Apache Software
  License V2 will naturally be the first part of this file, as it's the license which we use for all the original code
  in Brooklyn. If some *Category A* licensed third-party code is bundled with this artifact, then the `LICENSE` file
  should identify what the third-party code is, and include a copy of its license. For example, if jquery is bundled
  with a web app, the `LICENSE` file would include a note jquery.js, its copyright and its license (MIT), and include a
  full copy of the MIT license.
* A correct `NOTICE` file contains notices required by bundled third-party code above where what is in `LICENSE` is
  not sufficient. Although [What Are Required Third-party Notices?](http://www.apache.org/legal/resolved.html#required-third-party-notices)
  suggests it is rarely necessary to modify this, we have found that most common licenses, including MIT, BSD, and
  Apache require attribution. This could be done by including every variant of every license where only the copyright
  clause is changed, but the resulting mega file (particularly for our binary dist) becomes hard to use: a reader would
  need to inspect manually the license to tell whether it is -- in most cases -- the stock MIT / BSD license etc.
  For this reason we put all attributions in NOTICE where a standard LICENSE is used.


Applying LICENSE and NOTICE files to Brooklyn
---------------------------------------------

When the Brooklyn project makes a release, we produce and release the following types of artifacts:

1. One source release artifact
2. One binary release artifact
3. A large number of Maven release artifacts

Therefore, our source release, our binary release, and every one of our Maven release artifacts, must **each** have
their own, individually-tailored, `LICENSE` and `NOTICE` files.

To some extent, this is automated, using scripts in `brooklyn-dist/dist/licensing`;
but this must be manually run, and wherever source code is included or a project has insufficient information in its POM,
you'll need to add project-specific metadata, as per the `README.md` in that project's folder.

### Maven artifacts

Each Maven module will generally produce a JAR file from code under `src/main`, and a JAR file from code under
`src/test`. (There are some exceptions which may produce different artifacts.)

If the contents of the module are purely Apache Brooklyn original code, and the outputs are JAR files, then *no action
is required*. The default build process will incorporate a general-purpose `LICENSE` and `NOTICE` file into all built
JAR files. `LICENSE` will contain just a copy of the Apache Software License v2, and `NOTICE` will contain just the
module's own notice fragment.

However you will need to take action if either of these conditions are true:

* the module produces an artifact that is **not** a JAR file - for example, the jsgui project produces a WAR file;
* the module bundles third-party code that requires a change to `LICENSE` and/or `NOTICE`.

In this case you will need to disable the automatic insertion of `LICENSE` and `NOTICE` and insert your own versions
instead.

For an example of a JAR file with customized `LICENSE`/`NOTICE` files, refer to the `brooklyn-core/server-cli` project.
For an example of a WAR file with customized `LICENSE`/`NOTICE` files, refer to the `brooklyn-ui` project.

In both these cases the scripts in `brooklyn-dist/dist/licensing` will generate them.

### The source release

In practice, the source release contains nothing that isn't in the individual produced Maven artifacts (the obvious
difference about it being source instead of binary isn't relevant). Therefore, the source release `LICENSE` and `NOTICE`
can be considered to be the union of every Maven artifact's `LICENSE` and `NOTICE`. The amalgamated files are kept in
the root of the repository. Again our scripts do this for us.

### The binary release

This is the trickiest one to get right. The binary release includes everything that is in the source and Maven releases,
**plus every Java dependency of the project**. This means that the binary release is pulling in many additional items,
each of which have their own license, and which will therefore impact on `LICENSE` and `NOTICE`.

Therefore you must inspect every file that is present in the binary distribution, ascertain its license status, and
ensure that `LICENSE` and `NOTICE` are correct. Thankfully, again, our scripts do this.

