ONF Member-Only Software License
Version 1.0
June 2020

This ONF Member-Only Software License (this "License") is entered into by and
between Open Networking Foundation ("ONF") and you and/or the entity on whose
behalf you are accessing the Works (as defined in Section 1 below) ("you").
This License forms a legally binding contract between you and ONF in relation
to your access to and use of the Works. You may not access or use the Works if
you do not accept this License.

By accessing or using the Works, you hereby agree to the terms of this License.
You may not use the Works and may not accept this License if you are a person
barred from receiving the Works under the laws of the United States or other
countries, including the country from which you access or use the Works. If you
are agreeing to be bound by this License on behalf of your employer or other
entity, you represent and warrant that you have full legal authority to bind
your employer or such entity to this License. If you do not have the requisite
authority, you may not accept this License or access or use the Works on behalf
of your employer or any other entity.  You and ONF acknowledge and agree as
follows:

1. DEFINITIONS.

"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and
configuration files.

"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object
code, generated documentation, and conversions to other media types.

"Works" shall mean the works of authorship, whether in Source or Object form,
made available under this License, as indicated by a copyright notice/header
file that is included in or attached to the Works.

2. BACKGROUND.

The purpose of this License is to provide ONF member companies in good standing
("Members") with early access to software projects currently in development by
ONF prior to their public release, to allow Members to review and test the
Works internally for the purpose of making further contributions to the
applicable project.  Members who are Partner-level Members at the time they
first access the Works are additionally permitted under this License to use the
Works internally for the purpose of building and developing products and
services for commercial purposes as defined in Section 4.  However, this
License does not permit any Member, regardless of Member level, to redistribute
all or any portion of the Works, except as part of a contribution back to the
applicable project, in accordance with Section 8 below, or in binary form as
provided for Partner-level Members in Section 4 below.  You understand and
agree that ONF has the sole right to sublicense and distribute a public version
of the final code base for the applicable project to third parties under the
2.0 version of the Apache License, or other permissive license terms selected
by ONF in its sole discretion.

The Purpose of this License is to incubate the development of new software
projects by providing a framework for ONF Members to access and contribute to
the projects while minimizing the potential for forking or misuse of the
projects.  Nothing in this Background paragraph, however, shall require ONF to
take any particular course of action regarding any Works covered by this
License.

3. LIMITED LICENSE TO ALL MEMBERS IN GOOD STANDING.

Subject to your complete and ongoing compliance with all the terms and
conditions set forth in this License, including without limitation all license
limitations and restrictions set forth herein, ONF grants you the following
limited, non-exclusive, non-transferable, non-sublicensable, revocable license
to use, and (where applicable) authorize your employees and contractors
performing work on your behalf (but only if such contractors are themselves
Members of ONF and accept the terms of this License) to use the Works
internally solely in connection with (a) reviewing, testing, modifying and
creating derivatives of the Works for the sole purpose of making contributions
by you to the code repository for the applicable project maintained by ONF; and
(b) building, developing and testing your own applications or components that
may interoperate with or incorporate the Works ("Applications") for the
purposes of internal evaluation only.

4. ADDITIONAL LICENSE TO PARTNER-LEVEL MEMBERS IN GOOD STANDING.

Each project subject to this License shall be declared by ONF to be in one of
two phases:  a) Incubation Phase, or b) Partner Commercialization Phase.  Each
project shall start in the Incubation Phase, and ONF, at its sole discretion,
shall determine when each project moves into the Partner Commercialization
Phase.   Each project shall be documented to be in one of these two phases in
the Project's README documentation and can be confirmed by contacting ONF.

Once any project moves into the Partner Commercialization Phase, if you are a
Partner-level ONF Member in good standing at the time you first access the
Works and for the entire period during which you access and use the Works, in
addition to the rights granted in Section 3, and subject to your complete and
ongoing compliance with all the terms and conditions set forth in this License,
including without limitation all license limitations and restrictions set forth
herein, ONF grants you the limited, non-exclusive, non-transferable,
non-sublicensable, revocable license to use, and (where applicable) authorize
your employees and contractors performing work on your behalf (but only if such
contractors are themselves Members of ONF and accept the terms of this License)
to use, test, modify and create derivatives of the Works internally for the
purpose of building, developing, testing, marketing, offering for sale and
selling commercial products and services to third parties.  Wherever possible,
you will take reasonable precautions to ensure Works remain accessible only to
ONF Members, and any commercial product or service requiring redistribution of
the Works, of modifications of the Works or of derivatives of the Works must be
made solely in binary machine code form where possible to further this aim.

Partners-level Members gaining additional insights as a result of accessing and
using the Works for commercial products and services are expected to provide
feedback to and to make contributions to the project for the benefit of both
the project and the general membership.

You may verify your company's Partner-level membership status on the ONF
website at: https://www.opennetworking.org/member-listing/.

4.1 GRACE PERIOD FOR NON-PARTNER-LEVEL MEMBERS

If you are not a Partner-level Member and you wish to benefit from the rights
granted to ONF Partners in Section 4, you have a 90-day grace period from the
day you first access the Works to upgrade to a Partner-Level ONF Membership.
Should you upgrade within this grace period, you will be recognized as if you
had been a Partner on the day you first accessed the Works for the purpose of
interpreting your rights under Section 4.

5. RESTRICTIONS.

By accessing or using the Works, you represent, warrant, and covenant that you
and/or the entity on whose behalf you are accessing the Works is a Member in
good standing of ONF.

You acknowledge that, except for the limited rights expressly set forth above,
the foregoing licenses do not include any right to, and you agree not to (i)
redistribute, sell, lease, license, modify or otherwise create any derivative
works of any portion of the Works, or (ii) distribute, deploy, or otherwise
utilize the Works or Applications for any public, production, commercial, or
other similar purpose other than internal use for evaluation and development of
contributions to the code repository for the applicable project maintained by
ONF and non-public, experimental Applications.

Except as expressly provided herein, you may not (w) reproduce, distribute,
publicly display, or publicly perform any part of the Works, (x) decompile,
reverse engineer, or otherwise access or attempt to access source code not made
available to you in source code form, (y) make or attempt to make any
modification to, or otherwise create any derivative works of, the Works; or (z)
remove, obscure, interfere with or circumvent any feature of the Works,
including without limitation any copyright or other intellectual property
notices, security, or access control mechanism. You agree that you will not use
the Works to do anything illegal, including facilitating, promoting, or
otherwise encouraging any illegal activities.

You represent and warrant that the Works will not be shipped, transferred or
exported into any country or used in any manner prohibited by the United States
Export Administration Act or any other export laws, restrictions or regulations
(collectively the "Export Laws"). In addition, if the Works are identified as
an export controlled item under the Export Laws, you represent and warrant that
you are not a citizen, or otherwise located within, an embargoed nation
(including without limitation Crimea, Cuba, Iran, North Korea, Sudan, or Syria)
and that you are not otherwise prohibited under the Export Laws from receiving
the Works.

ANY USE IN VIOLATION OF THE FOREGOING LIMITATIONS AND RESTRICTIONS IS STRICTLY
PROHIBITED, AND UNLICENSED.

6. RESERVATION OF RIGHTS.

The Works are owned by ONF and/or its licensors, and are licensed, not sold, to
you. The Works are protected by copyright, trade dress, patent, and trademark
laws of the United States and other jurisdictions, international conventions,
and all other relevant intellectual property and proprietary rights, and
applicable laws (collectively, the "Intellectual Property Rights"). You agree
that ONF or its subsidiaries or affiliated companies and/or its licensors own
all legal right, title and interest in and to the Works, including any and all
Intellectual Property Rights. ONF reserves all rights not expressly granted in
this License. You do not acquire any right, title or interest to the Works,
whether by implication, estoppel, or otherwise, except for the limited rights
set forth in this License.

You agree that the form and nature of the Works that ONF provides may change
without prior notice to you and that future versions of the Works may be
incompatible with applications developed using previous versions of the Works.
You agree that ONF may stop (permanently or temporarily) providing the Works
(or any features within the Works) to you or to users generally at ONF's sole
discretion, without prior notice to you. Nothing in this License gives you a
right to use any of ONF's trade names, trademarks, service marks, logos, domain
names, or other distinctive brand features.

7. PURPOSE AND USE.

You agree that you will not engage in any activity with the Works, including
the development or distribution of an Application that interferes with,
disrupts, damages, or accesses in an unauthorized manner the servers, networks,
or other properties or services of any third party. You agree that you are
solely responsible for (and that ONF has no responsibility to you or to any
third party for) any data, content, or resources that you create, transmit or
display. You agree that you are solely responsible for (and that ONF has no
responsibility to you or to any third party for) any breach of your obligations
under this License, any applicable third party contract or terms of service, or
any applicable law or regulation, and for the consequences (including any loss
or damage which ONF or any third party may suffer) of any such breach.

8. FEEDBACK; CONTRIBUTIONS.

If you provide ONF with any comments, bug reports, feedback, enhancements, or
modifications proposed or suggested by you for the Works ("Feedback"), such
Feedback will be submitted as a Contribution to the applicable project
maintained by ONF under the terms and conditions of a Contributor License
Agreement between you and ONF, is provided on a non-confidential basis
(notwithstanding any notice to the contrary you may include in any accompanying
communication), and ONF shall have the right to use such Feedback at its
discretion, including, but not limited to the incorporation of such Feedback
into the Works and any final code base that may be derived from the Works.

9. TERMINATION OF THIS LICENSE.

This License will continue to apply until terminated by either you or ONF as
set out below. If you want to terminate this License, you may do so by ceasing
your use of the Works. If you cease being a Member in good standing of ONF,
this License will terminate automatically and without further notice to you.
ONF may at any time terminate this License: (a) if you have breached any
provision of this License; or (b) at ONF's convenience.  When this License
comes to an end, except as otherwise set forth in this paragraph 9, all of the
legal rights, obligations and liabilities that you and ONF have benefited from,
been subject to (or which have accrued over time while this License has been in
force) or which are expressed to continue indefinitely, shall be unaffected by
this cessation, and paragraphs 1, 2 and 5 through 14 shall continue to apply to
such rights, obligations and liabilities indefinitely.  In addition, unless
this License is terminated by ONF as a result of your breach of any provision
of this License, Partner-level Members entitled to the benefits of Section 4 of
this License shall also retain all rights granted by Section 4 so as long as
you remain a Partner-level Member in good standing.

10. DISCLAIMER OF WARRANTIES.

YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE WORKS IS AT YOUR SOLE
RISK AND THAT THE WORKS ARE PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT
WARRANTY OF ANY KIND FROM ONF. YOUR USE OF THE WORKS IS AT YOUR OWN DISCRETION
AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM
OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. ONF FURTHER
EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ONF
EXPRESSLY DISCLAIMS ANY WARRANTIES OF ANY KIND WITH RESPECT TO THE ACCURACY OR
FUNCTIONALITY OF THE WORKS, AND WITH RESPECT TO THE ACCURACY, VALIDITY, OR
COMPLETENESS OF ANY INFORMATION OR FEATURES AVAILABLE THROUGH THE WORKS, OR THE
QUALITY OR CONSISTENCY OF THE WORKS OR RESULTS OBTAINED THROUGH THEIR USE.

11. LIMITATION OF LIABILITY.

YOU EXPRESSLY UNDERSTAND AND AGREE THAT ONF, ITS SUBSIDIARIES AND AFFILIATES,
AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES
THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT ONF OR
ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE
POSSIBILITY OF ANY SUCH LOSSES. IN NO EVENT WILL ONF'S AGGREGATE LIABILITY FOR
DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE WORKS EXCEED THE GREATER
OF AMOUNTS PAID BY YOU FOR THE WORKS, IF ANY.

12. INDEMNIFICATION.

To the maximum extent permitted by law, you agree to defend, indemnify and hold
harmless ONF, its affiliates and their respective directors, officers,
employees and agents from and against any and all claims, actions, suits or
proceedings, as well as any and all losses, liabilities, damages, costs and
expenses (including reasonable attorneys' fees) arising out of or accruing from
(a) your use of the Works, (b) any Application or (for Partner-level Members)
commercial product or service you develop using the Works that infringes any
copyright, trademark, trade secret, trade dress, patent or other intellectual
property right of any person, and (c) any non-compliance by you with this
License or any applicable law or regulation.

13. CHANGES TO THIS LICENSE.

ONF may make changes to this License as it distributes new versions of the
Works. When these changes are made, ONF will make a new version of this License
available on the ONF website.

14. MISCELLANEOUS TERMS.

This License constitutes the entire legal agreement between you and ONF with
regard to your access and use of the Works, and governs your access and use of
the Works and completely supersedes any prior agreements between you and ONF in
relation to the Works, except for any Contributor License Agreement you may
have executed with ONF. You agree that if ONF does not exercise or enforce any
legal right or remedy which is contained in this License (or which ONF has the
benefit of under any applicable law), this will not be taken to be a formal
waiver of ONF's rights and that those rights or remedies will still be
available to ONF. If any court of law, having the jurisdiction to decide on
this matter, rules that any provision of this License is invalid, then that
provision will be removed from this License without affecting the rest of this
License. The remaining provisions of this License will continue to be valid and
enforceable so long as this License, as so modified, does not substantially
impair the respective expectations or reciprocal obligations of the parties.
The rights granted in this License may not be assigned or transferred by you
without the prior written approval of ONF. You shall not be permitted to
delegate your responsibilities or obligations under this License without the
prior written approval of ONF.
