NF 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.

