Software Licensing
==================

Software Licenses used by ONF
-----------------------------

Most of ONF's software is licensed under the `Apache License, Version 2.0
<https://www.apache.org/licenses/LICENSE-2.0>`_ (commonly referred to as
Apache-2 or APL2).

REUSE License Tool
""""""""""""""""""

ONF uses the `REUSE <https://reuse.software>`_ toolkit to verify that licenses
are correctly applied to files within a code repository, as an automated step
in the CI process.

REUSE replies on the `Software Package Data Exchange (SPDX) license headers
<https://spdx.dev>`_ headers to be applied  to every source code file in the
system.  These are put in a comment at the start of a file, similar to::

  # SPDX-FileCopyrightText: 2022 Open Networking Foundation <info@opennetworking.org>
  # SPDX-License-Identifier: Apache-2.0

License Compatibility
"""""""""""""""""""""

Software licensing is a complex task, and attention needs to be paid to how
code is incorporated in ONF projects, or how binaries generated from that code
are used.

If you would like to use external code in an ONF project that uses a license
that is not mentioned as being acceptable in the lists below, please make an
inquiry with the project development team before including that code.

Code Level Linking
''''''''''''''''''

Apache 2.0 licensed software can incorporate or link directly against code
written using the following licenses. A few examples:

* BSD with 2, 3 clauses
* MIT
* Most "Public Domain" licenses

See also the `ASF 3rd Party License Policy
<https://www.apache.org/legal/resolved.html>`_ for additional details.

Runtime Usage
'''''''''''''

Code with these kinds of licenses can be used at runtime, but can't be directly
linked to:

* GPL and most other "Strong Copyleft" licenses

An example of this would be running an OS like Linux that is GPLv2 licensed as
a part of an ONF project, it's used but not modified or linked against.

Licenses to avoid
'''''''''''''''''

The following licenses have various issues related to additional requirements
placed on it's use that are problematic, or favor one party over others.

* AGPL: This makes requirements on releasing modifications to services
  delivered over a network.

* BSL: this is a timed license, which is proprietary for a period of time,
  then automatically relicensed as GPL2

* SSPL (MongoDB, Elasticsearch, etc.): makes requirements upon business process
  and deployment code.

Dual Licensing
""""""""""""""

It may be advantageous to dual-license code - code that serves as an example or
templates that a user would copy and modify.  This also could include any code
that is within documentation.

In cases such as this, it may be advantageous to place examples in the public
domain, or with a less strict license such as MIT or BSD 2-Clause.

Contributor License Agreement
-----------------------------

Contributing software to and ONF project requires agreeing to the `Contributor
Licensing Agreement <https://wiki.opennetworking.org/x/BgCUI>`_, which gives
ONF a copyright and patent grant to for all code contributions, and the right
to sublicense the code in the future.
