                      copyleft-next 0.3.1 ("this License")
                            Release date: 2016-04-29

1. License Grants; No Trademark License

   Subject to the terms of this License, I grant You:

   a) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
      copyright license, to reproduce, Distribute, prepare derivative works
      of, publicly perform and publicly display My Work.

   b) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
      patent license under Licensed Patents to make, have made, use, sell,
      offer for sale, and import Covered Works.

   This License does not grant any rights in My name, trademarks, service
   marks, or logos.

2. Distribution: General Conditions

   You may Distribute Covered Works, provided that You (i) inform
   recipients how they can obtain a copy of this License; (ii) satisfy the
   applicable conditions of sections 3 through 6; and (iii) preserve all
   Legal Notices contained in My Work (to the extent they remain
   pertinent). "Legal Notices" means copyright notices, license notices,
   license texts, and author attributions, but does not include logos,
   other graphical images, trademarks or trademark legends.

3. Conditions for Distributing Derived Works; Outbound GPL Compatibility

   If You Distribute a Derived Work, You must license the entire Derived
   Work as a whole under this License, with prominent notice of such
   licensing. This condition may not be avoided through such means as
   separate Distribution of portions of the Derived Work.

   If the Derived Work includes material licensed under the GPL, You may
   instead license the Derived Work under the GPL.

4. Condition Against Further Restrictions; Inbound License Compatibility

   When Distributing a Covered Work, You may not impose further
   restrictions on the exercise of rights in the Covered Work granted under
   this License. This condition is not excused merely because such
   restrictions result from Your compliance with conditions or obligations
   extrinsic to this License (such as a court order or an agreement with a
   third party).

   However, You may Distribute a Covered Work incorporating material
   governed by a license that is both OSI-Approved and FSF-Free as of the
   release date of this License, provided that compliance with such
   other license would not conflict with any conditions stated in other
   sections of this License.

5. Conditions for Distributing Object Code

   You may Distribute an Object Code form of a Covered Work, provided that
   you accompany the Object Code with a URL through which the Corresponding
   Source is made available, at no charge, by some standard or customary
   means of providing network access to source code.

   If you Distribute the Object Code in a physical product or tangible
   storage medium ("Product"), the Corresponding Source must be available
   through such URL for two years from the date of Your most recent
   Distribution of the Object Code in the Product. However, if the Product
   itself contains or is accompanied by the Corresponding Source (made
   available in a customarily accessible manner), You need not also comply
   with the first paragraph of this section.

   Each direct and indirect recipient of the Covered Work from You is an
   intended third-party beneficiary of this License solely as to this
   section 5, with the right to enforce its terms.

6. Symmetrical Licensing Condition for Upstream Contributions

   If You Distribute a work to Me specifically for inclusion in or
   modification of a Covered Work (a "Patch"), and no explicit licensing
   terms apply to the Patch, You license the Patch under this License, to
   the extent of Your copyright in the Patch. This condition does not
   negate the other conditions of this License, if applicable to the Patch.

7. Nullification of Copyleft/Proprietary Dual Licensing

   If I offer to license, for a fee, a Covered Work under terms other than
   a license that is OSI-Approved or FSF-Free as of the release date of this
   License or a numbered version of copyleft-next released by the
   Copyleft-Next Project, then the license I grant You under section 1 is no
   longer subject to the conditions in sections 3 through 5.

8. Copyleft Sunset

   The conditions in sections 3 through 5 no longer apply once fifteen
   years have elapsed from the date of My first Distribution of My Work
   under this License.

9. Pass-Through

   When You Distribute a Covered Work, the recipient automatically receives
   a license to My Work from Me, subject to the terms of this License.

10. Termination

    Your license grants under section 1 are automatically terminated if You

    a) fail to comply with the conditions of this License, unless You cure
       such noncompliance within thirty days after becoming aware of it, or

    b) initiate a patent infringement litigation claim (excluding
       declaratory judgment actions, counterclaims, and cross-claims)
       alleging that any part of My Work directly or indirectly infringes
       any patent.

    Termination of Your license grants extends to all copies of Covered
    Works You subsequently obtain. Termination does not terminate the
    rights of those who have received copies or rights from You subject to
    this License.

    To the extent permission to make copies of a Covered Work is necessary
    merely for running it, such permission is not terminable.

11. Later License Versions

    The Copyleft-Next Project may release new versions of copyleft-next,
    designated by a distinguishing version number ("Later Versions").
    Unless I explicitly remove the option of Distributing Covered Works
    under Later Versions, You may Distribute Covered Works under any Later
    Version.

** 12. No Warranty                                                       **
**                                                                       **
**     My Work is provided "as-is", without warranty. You bear the risk  **
**     of using it. To the extent permitted by applicable law, each      **
**     Distributor of My Work excludes the implied warranties of title,  **
**     merchantability, fitness for a particular purpose and             **
**     non-infringement.                                                 **

** 13. Limitation of Liability                                           **
**                                                                       **
**     To the extent permitted by applicable law, in no event will any   **
**     Distributor of My Work be liable to You for any damages           **
**     whatsoever, whether direct, indirect, special, incidental, or     **
**     consequential damages, whether arising under contract, tort       **
**     (including negligence), or otherwise, even where the Distributor  **
**     knew or should have known about the possibility of such damages.  **

14. Severability

    The invalidity or unenforceability of any provision of this License
    does not affect the validity or enforceability of the remainder of
    this License. Such provision is to be reformed to the minimum extent
    necessary to make it valid and enforceable.

15. Definitions

    "Copyleft-Next Project" means the project that maintains the source
    code repository at <https://github.com/copyleft-next/copyleft-next.git/>
    as of the release date of this License.

    "Corresponding Source" of a Covered Work in Object Code form means (i)
    the Source Code form of the Covered Work; (ii) all scripts,
    instructions and similar information that are reasonably necessary for
    a skilled developer to generate such Object Code from the Source Code
    provided under (i); and (iii) a list clearly identifying all Separate
    Works (other than those provided in compliance with (ii)) that were
    specifically used in building and (if applicable) installing the
    Covered Work (for example, a specified proprietary compiler including
    its version number). Corresponding Source must be machine-readable.

    "Covered Work" means My Work or a Derived Work.

    "Derived Work" means a work of authorship that copies from, modifies,
    adapts, is based on, is a derivative work of, transforms, translates or
    contains all or part of My Work, such that copyright permission is
    required. The following are not Derived Works: (i) Mere Aggregation;
    (ii) a mere reproduction of My Work; and (iii) if My Work fails to
    explicitly state an expectation otherwise, a work that merely makes
    reference to My Work.

    "Distribute" means to distribute, transfer or make a copy available to
    someone else, such that copyright permission is required.

    "Distributor" means Me and anyone else who Distributes a Covered Work.

    "FSF-Free" means classified as 'free' by the Free Software Foundation.

    "GPL" means a version of the GNU General Public License or the GNU
    Affero General Public License.

    "I"/"Me"/"My" refers to the individual or legal entity that places My
    Work under this License. "You"/"Your" refers to the individual or legal
    entity exercising rights in My Work under this License. A legal entity
    includes each entity that controls, is controlled by, or is under
    common control with such legal entity. "Control" means (a) the power to
    direct the actions of such legal entity, whether by contract or
    otherwise, or (b) ownership of more than fifty percent of the
    outstanding shares or beneficial ownership of such legal entity.

    "Licensed Patents" means all patent claims licensable royalty-free by
    Me, now or in the future, that are necessarily infringed by making,
    using, or selling My Work, and excludes claims that would be infringed
    only as a consequence of further modification of My Work.

    "Mere Aggregation" means an aggregation of a Covered Work with a
    Separate Work.

    "My Work" means the particular work of authorship I license to You
    under this License.

    "Object Code" means any form of a work that is not Source Code.

    "OSI-Approved" means approved as 'Open Source' by the Open Source
    Initiative.

    "Separate Work" means a work that is separate from and independent of a
    particular Covered Work and is not by its nature an extension or
    enhancement of the Covered Work, and/or a runtime library, standard
    library or similar component that is used to generate an Object Code
    form of a Covered Work.

    "Source Code" means the preferred form of a work for making
    modifications to it.
