Repository: AcademySoftwareFoundation/rez (language: python)

Issue:
Rez License Change: LGPLv3 to Apache2.0
We want to change rez license from LGPLv3 to Apache2.0. To do this requires permission from all code contributors.

## Why have you emailed me?

You are a contributor to the rez project and we require your permission to change its license.

## How do the licenses differ?

LGPLv3 is a copyleft licence, whereas Apache2.0 is a permissive license. A good short explanation of these licenses can be seen here: https://www.cnx-software.com/2011/10/10/open-source-licenses-overview-gpl-lgpl-apache-bsd/. In short, there are less limitations on how you can use rez if it is licensed with Apache2.0.

## Why Apache2.0?

Apache2.0 is the preferred license of the Academy Software Foundation (https://www.aswf.io/about/).

## Why do we want to do this?

LGPL creates a legal gray area for some studios, who may be hesitant to use the project for that reason. Under LGPL, a larger work using rez would need to provide the full rez sourcecode in its distribution, and would itself need to be LGPL-licensed, unless "dynamically" linked to rez (which in python could be interpreted as not being contained directly in the distribution).

## What do I need to do?

Either add a comment to this ticket, or reply to an email sent to you, using the following text:

```
I, <your full name here>, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
```

Thank you kindly
A




Discussion / hints:
I, Stephen Mackenzie, am a current or former contributor to the rez
project, and I give my permission to change its software license from
LGPLv3 to Apache2.0.


On Tue, Aug 24, 2021 at 8:13 AM allan johns ***@***.***>
wrote:

> We want to change rez license from LGPLv3 to Apache2.0. To do this
> requires permission from all code contributors.
> Why have you emailed me?
>
> You are a contributor to the rez project and we require your permission to
> change its license.
> How do the licenses differ?
>
> LGPLv3 is a copyleft licence, whereas Apache2.0 is a permissive license. A
> good short explanation of these licenses can be seen here:
> https://www.cnx-software.com/2011/10/10/open-source-licenses-overview-gpl-lgpl-apache-bsd/.
> In short, there are less limitations on how you can use rez if it is
> licensed with Apache2.0.
> Why Apache2.0?
>
> Apache2.0 is the preferred license of the Academy Software Foundation (
> https://www.aswf.io/about/).
> Why do we want to do this?
>
> LGPL creates a legal gray area for some studios, who may be hesitant to
> use the project for that reason. Under LGPL, a larger work using rez would
> need to provide the full rez sourcecode in its distribution, and would
> itself need to be LGPL-licensed, unless "dynamically" linked to rez (which
> in python could be interpreted as not being contained directly in the
> distribution).
> What do I need to do?
>
> Either add a comment to this ticket, or reply to an email sent to you,
> using the following text:
>
> I, <your full name here>, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
>
> Thank you kindly
> A
>
> —
> You are receiving this because you are subscribed to this thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/nerdvegas/rez/issues/1119>, or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/ABPOE3RHT2FOLJ6NACFA5TTT6OEFNANCNFSM5CWWHLZA>
> .
> Triage notifications on the go with GitHub Mobile for iOS
> <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
> or Android
> <https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email>
> .
>

I, Lai Ta-Wei, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Jean-Christophe Morin, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Thorsten Kaufmann, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Thomas Mansencal, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Morné Chamberlain, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Sebastian Kral, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Zach Lewis, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Long Hao, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Brendan Abel, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Sylvain Maziere, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Joseph Yu, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Mark Streatfield, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Renaud Lessard Larouche, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Fredrik Brännbacka, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Blazej Floch, am a current or former contributor to the rez
project, and I give my permission to change its software license from
LGPLv3 to Apache2.0.
I, Benjamin Sergeant, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Piotr Barejko, am a current or former contributor to the rez
project, and I give my permission to change its software license from
LGPLv3 to Apache2.0.
I, Ben Dickson, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Sehwi Park, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
Current stats:

* accepted: 20
* contacted and not heard from yet: 26
* contact details unknown: 7
* rejected: 0

I, Marcus Ottosson, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0. 

Good move! ❤️

> which in python could be interpreted as not being contained directly in the distribution

Can you elaborate on this? I've seen similar notions in the Blender community. Does it mean that this comment..

```py
import rez
```

..is now dynamically linking Rez and is required to be LPGL'd as well? Or does it only apply if I put in a text file and upload it to GitHub?
I, Daniel Asztalos, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Andy Nicholas, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Sebastian Elsner, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Mylene Pepe, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Adrian Krupa, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I don't believe so, I took it to mean that you're fine as long as the LGPL
code isn't actually embedded into your project - I would say that just
listing a requirement in your package, and importing said requirement, can
reasonably be considered "dynamic linking" and thus your own code does not
get pulled into the LGPL umbrella.

Here's a thread explaining from python POV (and which is my interpretation
also):
https://stackoverflow.com/questions/8580223/using-python-module-on-lgpl-license-in-commercial-product

Thx
A



On Tue, Sep 21, 2021 at 4:00 PM Marcus Ottosson ***@***.***>
wrote:

> I, Marcus Ottosson, am a current or former contributor to the rez project,
> and I give my permission to change its software license from LGPLv3 to
> Apache2.0.
>
> Good move! ❤️
>
> which in python could be interpreted as not being contained directly in
> the distribution
>
> Can you elaborate on this? I've seen similar notions in the Blender
> community. Does it mean that this comment..
>
> import rez
>
> ..is now dynamically linking Rez and is required to be LPGL'd as well? Or
> does it only apply if I put in a text file and upload it to GitHub?
>
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/nerdvegas/rez/issues/1119#issuecomment-923654112>, or
> unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AAMOUSSBEGTZ4ZAFEGNHC7TUDANQRANCNFSM5CWWHLZA>
> .
> Triage notifications on the go with GitHub Mobile for iOS
> <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
> or Android
> <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
>
>

I, Robert Fletcher, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Federico Naum, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Gregory Starck, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Paul Molodowitch am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Jasper van Nieuwenhuizen, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Fabio Piparo, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Christopher Martin, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

I, Chad Dombrova, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Douglas Lassance, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, lambdaclan (Ira), am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Josh Kelly, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I have no interest in hindering this conversion, thus:

I, Michael Morehouse, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

However, that said:

> LGPL creates a legal gray area for some studios, who may be hesitant to use the project for that reason. Under LGPL, a larger work using rez would need to provide the full rez sourcecode in its distribution, and would itself need to be LGPL-licensed, unless "dynamically" linked to rez (which in python could be interpreted as not being contained directly in the distribution).

If we take that interpretation as gospel then Rez must remain under LGPL, since it vendors a copy of an LGPLv2.1 licensed library. 

I don’t subscribe to that interpretation; the vendored AMPQ library is not modified, it’s license accompany’s it, and a Rez user is not hindered from using a modified version of AMPQ, so IMHO (though with the usual IANAL caveat) all of the rights the LGPL exists to protect have been maintained. The vast majority of Rez is clearly not “based” on AMPQ, so at worst only the “minimal corresponding source” would need to be made available to downstream users of code incorporating Rez.

So no argument against the change, I’m just not certain a particularly copyleft-averse lawyer-type would be completely mollified with that vendored code in place.
We've recently gotten rid of py-amqp specifically for this reason, see
https://github.com/nerdvegas/rez/releases/tag/2.96.0

And thanks for the email! You just saved me a bunch of work.
A


On Sat, Nov 6, 2021 at 10:33 AM Michael Morehouse ***@***.***>
wrote:

> I have no interest in hindering this conversion, thus:
>
> I, Michael Morehouse, am a current or former contributor to the rez
> project, and I give my permission to change its software license from
> LGPLv3 to Apache2.0.
>
> However, that said:
>
> LGPL creates a legal gray area for some studios, who may be hesitant to
> use the project for that reason. Under LGPL, a larger work using rez would
> need to provide the full rez sourcecode in its distribution, and would
> itself need to be LGPL-licensed, unless "dynamically" linked to rez (which
> in python could be interpreted as not being contained directly in the
> distribution).
>
> If we take that interpretation as gospel then Rez must remain under LGPL,
> since it vendors a copy of an LGPLv2.1 licensed library.
>
> I don’t subscribe to that interpretation; the vendored AMPQ library is not
> modified, it’s license accompany’s it, and a Rez user is not hindered from
> using a modified version of AMPQ, so IMHO (though with the usual IANAL
> caveat) all of the rights the LGPL exists to protect have been maintained.
> The vast majority of Rez is clearly not “based” on AMPQ, so at worst only
> the “minimal corresponding source” would need to be made available to
> downstream users of code incorporating Rez.
>
> So no argument against the change, I’m just not certain a particularly
> copyleft-averse lawyer-type would be completely mollified with that
> vendored code in place.
>
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/nerdvegas/rez/issues/1119#issuecomment-962278693>, or
> unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AAMOUSUGJRE7FVCG5CDQQSLUKRSTHANCNFSM5CWWHLZA>
> .
> Triage notifications on the go with GitHub Mobile for iOS
> <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
> or Android
> <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
>
>

> We've recently gotten rid of py-amqp specifically for this reason, see https://github.com/nerdvegas/rez/releases/tag/2.96.0

I saw the move to Pika, but vendor/amqp still seems to be there.
Ah so it is. I recall now I was planning on leaving removal of anything
until a last step before the actual licence change, in case we needed to
revert for whatever reason. So yes this will definitely be gone when the
licence change happens.

thx
A


On Sat, Nov 6, 2021 at 11:26 AM Michael Morehouse ***@***.***>
wrote:

> We've recently gotten rid of py-amqp specifically for this reason, see
> https://github.com/nerdvegas/rez/releases/tag/2.96.0
>
> I saw the move to Pika, but vendor/amqp still seems to be there.
>
> —
> You are receiving this because you authored the thread.
> Reply to this email directly, view it on GitHub
> <https://github.com/nerdvegas/rez/issues/1119#issuecomment-962291518>, or
> unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AAMOUSWGNIFGXXYR7VDPFSDUKRY3BANCNFSM5CWWHLZA>
> .
> Triage notifications on the go with GitHub Mobile for iOS
> <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
> or Android
> <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
>
>

I, Will Pittman, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.
I, Manuel Köster, am a current or former contributor to the rez project, and I give my permission to change its software license from LGPLv3 to Apache2.0.

Fix patch:
diff --git a/COPYING.LESSER b/COPYING.LESSER
deleted file mode 100644
index 341c30bda..000000000
--- a/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..af4f25184
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,178 @@
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        https://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "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.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 000000000..4a0d52874
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,13 @@
+Copyright Contributors to the Rez project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/example_extensions/hello_cmd/__init__.py b/example_extensions/hello_cmd/__init__.py
index e69de29bb..582e11b0a 100644
--- a/example_extensions/hello_cmd/__init__.py
+++ b/example_extensions/hello_cmd/__init__.py
@@ -0,0 +1,13 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/example_extensions/hello_cmd/lib.py b/example_extensions/hello_cmd/lib.py
index b4f2224c4..b68d8590a 100644
--- a/example_extensions/hello_cmd/lib.py
+++ b/example_extensions/hello_cmd/lib.py
@@ -1,3 +1,17 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 def get_message_from_world():
     from rez.config import config
diff --git a/example_extensions/hello_cmd/rezplugins/__init__.py b/example_extensions/hello_cmd/rezplugins/__init__.py
index e69de29bb..582e11b0a 100644
--- a/example_extensions/hello_cmd/rezplugins/__init__.py
+++ b/example_extensions/hello_cmd/rezplugins/__init__.py
@@ -0,0 +1,13 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/example_extensions/hello_cmd/rezplugins/command/__init__.py b/example_extensions/hello_cmd/rezplugins/command/__init__.py
index e69de29bb..582e11b0a 100644
--- a/example_extensions/hello_cmd/rezplugins/command/__init__.py
+++ b/example_extensions/hello_cmd/rezplugins/command/__init__.py
@@ -0,0 +1,13 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/example_extensions/hello_cmd/rezplugins/command/rezconfig.py b/example_extensions/hello_cmd/rezplugins/command/rezconfig.py
index 3f3e82a6a..369a941a9 100644
--- a/example_extensions/hello_cmd/rezplugins/command/rezconfig.py
+++ b/example_extensions/hello_cmd/rezplugins/command/rezconfig.py
@@ -1,3 +1,17 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 world = {
     "message": "welcome to this world."
diff --git a/example_extensions/hello_cmd/rezplugins/command/world.py b/example_extensions/hello_cmd/rezplugins/command/world.py
index d481c8da6..4cbd15121 100644
--- a/example_extensions/hello_cmd/rezplugins/command/world.py
+++ b/example_extensions/hello_cmd/rezplugins/command/world.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Demoing Rez's command type plugin
 """
diff --git a/example_extensions/hello_cmd/setup.py b/example_extensions/hello_cmd/setup.py
index 827638f41..9738826ef 100644
--- a/example_extensions/hello_cmd/setup.py
+++ b/example_extensions/hello_cmd/setup.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function, with_statement
 from setuptools import setup
 
diff --git a/install.py b/install.py
index 9041383e5..73aa1f1fb 100644
--- a/install.py
+++ b/install.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 This script uses venv/virtualenv to create a standalone, production-ready Rez
 installation in the specified directory.
diff --git a/release-rez.py b/release-rez.py
index 12efb12ae..b72c411de 100644
--- a/release-rez.py
+++ b/release-rez.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Release a new version of rez.
 
diff --git a/setup.py b/setup.py
index 546c1c823..9fdde9876 100644
--- a/setup.py
+++ b/setup.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function, with_statement
 
 import fnmatch
diff --git a/src/build_utils/add_license.py b/src/build_utils/add_license.py
deleted file mode 100644
index 92a6e7ff2..000000000
--- a/src/build_utils/add_license.py
+++ /dev/null
@@ -1,117 +0,0 @@
-"""
-Adds LGPL and Copyright notice to the end of each .py file. You need to run
-this script from the src/ subdirectory of the rez source.
-"""
-from __future__ import print_function
-
-import os
-import os.path
-from datetime import datetime
-
-
-notice = \
-"""
-Copyright 2013-{year} {authors}.
-
-This library is free software: you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation, either
-version 3 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library.  If not, see <http://www.gnu.org/licenses/>.
-"""
-
-year = datetime.now().year
-
-
-skip_dirs = [
-    "vendor",
-    "build_utils",
-    "backport"
-]
-
-
-def extract_copyright_authors(txt):
-    lines = txt.split('\n')
-    for line in lines:
-        if line.startswith("# Copyright"):
-            if str(year) in line:
-                part = line.split(str(year))[-1]
-            elif str(year - 1) in line:
-                part = line.split(str(year - 1))[-1]
-            else:
-                return []
-
-            parts = part.strip().rstrip('.').split(',')
-            authors = []
-
-            for part in parts:
-                auth = part.strip()
-                if auth != "Allan Johns":
-                    authors.append(auth)
-
-            return authors
-
-    return []
-
-
-if __name__ == "__main__":
-    filepaths = []
-
-    notice_lines = notice.strip().split('\n')
-    notice_lines = [("# %s" % x).rstrip() for x in notice_lines]
-    copyright_line = notice_lines[0]
-    notice_lines = notice_lines[1:]
-
-    # find py files
-    for root, dirs, names in os.walk('.'):
-        for name in names:
-            if name.endswith(".py"):
-                filepath = os.path.join(root, name)
-                print("found: %s" % filepath)
-                filepaths.append(filepath)
-
-        for dirname in skip_dirs:
-            if dirname in dirs:
-                dirs.remove(dirname)
-
-    # append notice to each py file
-    for filepath in filepaths:
-        with open(filepath) as f:
-            txt = f.read()
-
-        lines = txt.split('\n')
-
-        while lines and not lines[-1].strip():
-            lines.pop()
-
-        while lines and lines[-1].startswith('#'):
-            lines.pop()
-
-        while lines and not lines[-1].strip():
-            lines.pop()
-
-        lines.append('')
-        lines.append('')
-
-        authors = extract_copyright_authors(txt)
-        authors = ["Allan Johns"] + authors
-
-        copyright_line_ = copyright_line.format(
-            year=year, authors=", ".join(authors))
-
-        lines.append(copyright_line_)
-        lines.extend(notice_lines)
-        lines.append('')
-
-        new_txt = '\n'.join(lines)
-
-        print("Writing updated %s..." % filepath)
-        with open(filepath, 'w') as f:
-            f.write(new_txt)
diff --git a/src/build_utils/license/apply b/src/build_utils/license/apply
new file mode 100755
index 000000000..6d5d1edbd
--- /dev/null
+++ b/src/build_utils/license/apply
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+if [ ! -f "LICENSE" ]; then
+    echo "must run from root of rez project" 1>&2
+    exit 1
+fi
+
+# remove copyright
+find ./src/rez/data -name '*.py' > .lic.tmp
+find ./src/rez/backport -name '*.py' >> .lic.tmp
+cat .lic.tmp | xargs -i ./src/build_utils/license/change_copyright -so {}
+
+# add copyright
+find ./src/rez/bind -name '*.py' > .lic.tmp
+find ./src/rez/cli -name '*.py' >> .lic.tmp
+find ./src/rez/tests -name '*.py' >> .lic.tmp
+find ./src/rez/utils -name '*.py' >> .lic.tmp
+find ./src/rez/vendor/version -name '*.py' >> .lic.tmp
+find ./src/rez/bind -name '*.py' >> .lic.tmp
+find ./src/rezgui -name '*.py' >> .lic.tmp
+find ./src/rezplugins -name '*.py' >> .lic.tmp
+find ./src/support -name '*.py' >> .lic.tmp
+find ./src/rez -maxdepth 1 -name '*.py' >> .lic.tmp
+find ./ -maxdepth 1 -name '*.py' >> .lic.tmp
+find ./example_extensions -name '*.py' >> .lic.tmp
+find ./src/rezplugins/build_system/cmake_files -name '*.cmake' >> .lic.tmp
+cat .lic.tmp | xargs -i ./src/build_utils/license/change_copyright -o {}
+
+rm -f .lic.tmp
diff --git a/src/build_utils/license/change_copyright b/src/build_utils/license/change_copyright
new file mode 100755
index 000000000..306304ab3
--- /dev/null
+++ b/src/build_utils/license/change_copyright
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+#
+# dumb script to update copyright notice in a py sourcefile
+#
+from __future__ import print_function
+import argparse
+import sys
+
+
+new_copyright = \
+"""
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""
+
+lines = []
+NO_COPYRIGHT = "NO_COPYRIGHT"
+OTHER_COPYRIGHT = "OTHER_COPYRIGHT"
+
+
+def find_existing_copyright():
+    i_start = None
+
+    for i, line in enumerate(lines):
+        if line.startswith('#') and "Copyright" in line:
+            if "Allan" in line or "Rez" in line:
+                i_start = i
+                break
+            else:
+                return OTHER_COPYRIGHT
+
+    if i_start is None:
+        return NO_COPYRIGHT
+
+    i_end = i_start
+
+    while True:
+        if (i_end + 1) >= len(lines):
+            break
+
+        if lines[i_end + 1].startswith('#'):
+            i_end += 1
+        else:
+            break
+
+    return (i_start, i_end)
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser()
+    parser.add_argument("FILE")
+    parser.add_argument("-s", "--strip-copyright", action="store_true")
+    parser.add_argument("-o", "--overwrite-file", action="store_true")
+    opts = parser.parse_args()
+
+    with open(opts.FILE) as f:
+        txt = f.read()
+    lines = txt.rstrip().split('\n')
+
+    result = find_existing_copyright()
+
+    if result == OTHER_COPYRIGHT:
+        print("Other copyright, skipping %s" % opts.FILE, file=sys.stderr)
+        sys.exit(1)
+
+    # strip existing copyright
+    if result != NO_COPYRIGHT:
+        i_start, i_end = result
+        lines = lines[:i_start] + lines[i_end + 1:]
+
+    # add new copyright at top of file
+    if not opts.strip_copyright:
+
+        # strip empty leading lines
+        while lines and not lines[0]:
+            lines = lines[1:]
+
+        copyright_lines = new_copyright.strip().split('\n')
+        lines = copyright_lines + ['', ''] + lines
+
+    # strip empty leading lines
+    while lines and not lines[0]:
+        lines = lines[1:]
+
+    # strip trailing empty lines
+    while lines and not lines[-1]:
+        lines = lines[:-1]
+
+    # output
+    new_txt = '\n'.join(lines) + '\n'
+
+    if not opts.overwrite_file:
+        print(new_txt)
+    else:
+        with open(opts.FILE, 'w') as f:
+            f.write(new_txt)
+
+        print("Replaced %s" % opts.FILE, file=sys.stderr)
diff --git a/src/build_utils/license/contributors_signoff.pdf b/src/build_utils/license/contributors_signoff.pdf
new file mode 100644
index 000000000..5151471b4
Binary files /dev/null and b/src/build_utils/license/contributors_signoff.pdf differ
diff --git a/src/rez/__init__.py b/src/rez/__init__.py
index 5754ace3f..b81a848de 100644
--- a/src/rez/__init__.py
+++ b/src/rez/__init__.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.utils._version import _rez_version
@@ -55,19 +70,3 @@ def callback(sig, frame):
 
     if callback:
         signal.signal(signal.SIGUSR1, callback)  # Register handler
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/backport/__init__.py b/src/rez/backport/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/backport/__init__.py
+++ b/src/rez/backport/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/bind/PyQt.py b/src/rez/bind/PyQt.py
index 4ed9ab194..6005b9d58 100644
--- a/src/rez/bind/PyQt.py
+++ b/src/rez/bind/PyQt.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds the python PyQt module as a rez package.
 """
diff --git a/src/rez/bind/PySide.py b/src/rez/bind/PySide.py
index 1dbe2ec4b..e2e90eb58 100644
--- a/src/rez/bind/PySide.py
+++ b/src/rez/bind/PySide.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds the python PySide module as a rez package.
 """
diff --git a/src/rez/bind/__init__.py b/src/rez/bind/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rez/bind/__init__.py
+++ b/src/rez/bind/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rez/bind/_pymodule.py b/src/rez/bind/_pymodule.py
index edddb69f0..971ecf463 100644
--- a/src/rez/bind/_pymodule.py
+++ b/src/rez/bind/_pymodule.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds a python module to rez.
 
diff --git a/src/rez/bind/_utils.py b/src/rez/bind/_utils.py
index 48324ff00..756b7a7e5 100644
--- a/src/rez/bind/_utils.py
+++ b/src/rez/bind/_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utility functions for bind modules.
 """
@@ -138,19 +153,3 @@ def _run_command(args):
 
     stdout, stderr = p.communicate()
     return stdout, stderr, p.returncode
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/arch.py b/src/rez/bind/arch.py
index a9d8f0822..7960383ee 100644
--- a/src/rez/bind/arch.py
+++ b/src/rez/bind/arch.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Creates the system architecture package.
 """
@@ -16,19 +31,3 @@ def bind(path, version_range=None, opts=None, parser=None):
         pkg.version = version
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/cmake.py b/src/rez/bind/cmake.py
index 5e352c57c..c97f2e5dd 100644
--- a/src/rez/bind/cmake.py
+++ b/src/rez/bind/cmake.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds a cmake executable as a rez package.
 """
@@ -37,19 +52,3 @@ def make_root(variant, root):
         pkg.variants = [system.variant]
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/gcc.py b/src/rez/bind/gcc.py
index 98ba32520..4c07de58c 100644
--- a/src/rez/bind/gcc.py
+++ b/src/rez/bind/gcc.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import absolute_import
 from rez.bind._utils import find_exe, extract_version, make_dirs, log
 from rez.package_maker import make_package
@@ -52,18 +67,3 @@ def make_root(variant, root):
         pkg.variants = [system.variant]
 
     return pkg.installed_variants
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/hello_world.py b/src/rez/bind/hello_world.py
index 3237e7d4e..9699537f9 100644
--- a/src/rez/bind/hello_world.py
+++ b/src/rez/bind/hello_world.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Creates the 'hello_world' testing package.
 
@@ -56,18 +71,3 @@ def make_root(variant, root):
         pkg.commands = commands
 
     return pkg.installed_variants
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/os.py b/src/rez/bind/os.py
index 53b390f87..b74f05a2e 100644
--- a/src/rez/bind/os.py
+++ b/src/rez/bind/os.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Creates the operating system package.
 """
@@ -20,19 +35,3 @@ def bind(path, version_range=None, opts=None, parser=None):
         ]
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/pip.py b/src/rez/bind/pip.py
index e4c4298ec..b4444ed28 100644
--- a/src/rez/bind/pip.py
+++ b/src/rez/bind/pip.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds the python pip module as a rez package.
 """
diff --git a/src/rez/bind/platform.py b/src/rez/bind/platform.py
index 298d9c7be..0032e630c 100644
--- a/src/rez/bind/platform.py
+++ b/src/rez/bind/platform.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Creates the system platform package.
 """
@@ -16,19 +31,3 @@ def bind(path, version_range=None, opts=None, parser=None):
         pkg.version = version
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/python.py b/src/rez/bind/python.py
index b6bc776b8..793a9266a 100644
--- a/src/rez/bind/python.py
+++ b/src/rez/bind/python.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds a python executable as a rez package.
 """
@@ -86,19 +101,3 @@ def make_root(variant, root):
             pkg.post_commands = post_commands
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/rez.py b/src/rez/bind/rez.py
index 329c85b7c..6b3e311b7 100644
--- a/src/rez/bind/rez.py
+++ b/src/rez/bind/rez.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds rez itself as a rez package.
 """
@@ -35,19 +50,3 @@ def make_root(variant, root):
         pkg.variants = [system.variant]
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/rezgui.py b/src/rez/bind/rezgui.py
index 090db37b9..8ee43c4a2 100644
--- a/src/rez/bind/rezgui.py
+++ b/src/rez/bind/rezgui.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds rez-gui as a rez package.
 """
@@ -64,19 +79,3 @@ def make_root(variant, root):
             pkg.requires.append(gui_lib)
 
     return pkg.installed_variants
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bind/setuptools.py b/src/rez/bind/setuptools.py
index 98f94392b..9eadce690 100644
--- a/src/rez/bind/setuptools.py
+++ b/src/rez/bind/setuptools.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds the python setuptools module as a rez package.
 """
diff --git a/src/rez/bind/sip.py b/src/rez/bind/sip.py
index 9ddb33a75..7a1327090 100644
--- a/src/rez/bind/sip.py
+++ b/src/rez/bind/sip.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Binds the python PyQt module as a rez package.
 """
diff --git a/src/rez/build_process.py b/src/rez/build_process.py
index 780201dd7..5d5e4a4ee 100644
--- a/src/rez/build_process.py
+++ b/src/rez/build_process.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.packages import iter_packages
@@ -439,19 +454,3 @@ def _n_of_m(self, variant):
         num_variants = max(self.package.num_variants, 1)
         index = (variant.index or 0) + 1
         return "%d/%d" % (index, num_variants)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/build_process_.py b/src/rez/build_process_.py
index f787f5ba0..42959bee2 100644
--- a/src/rez/build_process_.py
+++ b/src/rez/build_process_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import warnings
 from rez.build_process import *  # noqa
 
diff --git a/src/rez/build_system.py b/src/rez/build_system.py
index 3386805f1..ded032b33 100644
--- a/src/rez/build_system.py
+++ b/src/rez/build_system.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os.path
 
 from rez.build_process import BuildType
@@ -318,19 +333,3 @@ def add_standard_build_actions(cls, executor, context, variant, build_type,
 
         for var, value in env_vars.items():
             executor.env[var] = value
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/bundle_context.py b/src/rez/bundle_context.py
index f41529f0c..80f211382 100644
--- a/src/rez/bundle_context.py
+++ b/src/rez/bundle_context.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 import os.path
 import stat
diff --git a/src/rez/cli/__init__.py b/src/rez/cli/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rez/cli/__init__.py
+++ b/src/rez/cli/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rez/cli/_complete_util.py b/src/rez/cli/_complete_util.py
index b70eb0d2d..da13e8e4e 100644
--- a/src/rez/cli/_complete_util.py
+++ b/src/rez/cli/_complete_util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 import os.path
 from fnmatch import fnmatch
@@ -143,19 +158,3 @@ def __call__(self, prefix, **kwargs):
                 return completer(prefix, **kwargs)
 
         return []
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/_entry_points.py b/src/rez/cli/_entry_points.py
index 2ca75e3d4..6964c4b5a 100644
--- a/src/rez/cli/_entry_points.py
+++ b/src/rez/cli/_entry_points.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Entry points.
 """
diff --git a/src/rez/cli/_main.py b/src/rez/cli/_main.py
index 3e7f6bc64..135e1ef10 100644
--- a/src/rez/cli/_main.py
+++ b/src/rez/cli/_main.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 The main command-line entry point.
 """
@@ -196,19 +211,3 @@ def run_cmd():
 
 if __name__ == '__main__':
     run()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/_util.py b/src/rez/cli/_util.py
index d9e02daec..4996aee39 100644
--- a/src/rez/cli/_util.py
+++ b/src/rez/cli/_util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import os
@@ -237,19 +252,3 @@ def sigterm_handler(signum, frame):
 
 signal.signal(signal.SIGINT, sigint_handler)
 signal.signal(signal.SIGTERM, sigterm_handler)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/benchmark.py b/src/rez/cli/benchmark.py
index c426ffdf7..6f3f33cee 100644
--- a/src/rez/cli/benchmark.py
+++ b/src/rez/cli/benchmark.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Run a benchmarking suite for runtime resolves.
 '''
diff --git a/src/rez/cli/bind.py b/src/rez/cli/bind.py
index 952c9ec34..c149efc02 100644
--- a/src/rez/cli/bind.py
+++ b/src/rez/cli/bind.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Create a Rez package for existing software.
 '''
@@ -103,19 +118,3 @@ def command(opts, parser, extra_arg_groups=None):
                      version_range=version_range,
                      no_deps=opts.no_deps,
                      bind_args=opts.BIND_ARGS)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/build.py b/src/rez/cli/build.py
index 6e3d8eeb2..74b178d7d 100644
--- a/src/rez/cli/build.py
+++ b/src/rez/cli/build.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Build a package from source.
 '''
@@ -167,19 +182,3 @@ def command(opts, parser, extra_arg_groups=None):
                 print("the failed resolve context did not generate a graph.",
                       file=sys.stderr)
         sys.exit(1)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/bundle.py b/src/rez/cli/bundle.py
index cba87afc7..1a310776a 100644
--- a/src/rez/cli/bundle.py
+++ b/src/rez/cli/bundle.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Bundle a context and its packages into a relocatable dir.
 '''
diff --git a/src/rez/cli/complete.py b/src/rez/cli/complete.py
index cf8f4e541..2d6bd5639 100644
--- a/src/rez/cli/complete.py
+++ b/src/rez/cli/complete.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Prints package completion strings.
 """
@@ -99,19 +114,3 @@ def _pop_arg(l, p):
     words = completer.completions
     words = [w.decode() if hasattr(w, 'decode') else w for w in words]
     print(' '.join(words))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/config.py b/src/rez/cli/config.py
index 54a01e773..08dc2d383 100644
--- a/src/rez/cli/config.py
+++ b/src/rez/cli/config.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Print current rez settings.
 '''
@@ -61,19 +76,3 @@ def command(opts, parser, extra_arg_groups=None):
         print(txt.strip())
     else:
         print(data)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/context.py b/src/rez/cli/context.py
index c2c2d29ef..1a3ce3d31 100644
--- a/src/rez/cli/context.py
+++ b/src/rez/cli/context.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Print information about the current rez context, or a given context file.
 '''
@@ -191,19 +206,3 @@ def _graph():
                                  parent_environ=parent_env,
                                  style=OutputStyle[opts.style])
         print(code)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/cp.py b/src/rez/cli/cp.py
index 05c323bbf..e4d1374d0 100644
--- a/src/rez/cli/cp.py
+++ b/src/rez/cli/cp.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Copy a package from one repository to another.
 '''
@@ -213,19 +228,3 @@ def command(opts, parser, extra_arg_groups=None):
             print("%d variants %s skipped (target exists):" % (len(skipped), verb))
             for src_variant, dest_variant in skipped:
                 print("  %s !-> %s" % (src_variant.uri, dest_variant.uri))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/depends.py b/src/rez/cli/depends.py
index 19d25fd34..4d394e19b 100644
--- a/src/rez/cli/depends.py
+++ b/src/rez/cli/depends.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Perform a reverse package dependency lookup.
 """
@@ -78,19 +93,3 @@ def command(opts, parser, extra_arg_groups=None):
         else:
             toks = ["#%d:" % i] + pkgs
         print(' '.join(toks))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/diff.py b/src/rez/cli/diff.py
index 622df521e..2dbf306e4 100644
--- a/src/rez/cli/diff.py
+++ b/src/rez/cli/diff.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Compare the source code of two packages.
 """
@@ -29,19 +44,3 @@ def command(opts, parser, extra_arg_groups=None):
         pkg2 = None
 
     diff_packages(pkg1, pkg2)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/env.py b/src/rez/cli/env.py
index 0606cb9a8..cd9152833 100644
--- a/src/rez/cli/env.py
+++ b/src/rez/cli/env.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Open a rez-configured shell, possibly interactive.
 '''
@@ -257,19 +272,3 @@ def command(opts, parser, extra_arg_groups=None):
         block=True)
 
     sys.exit(returncode)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/forward.py b/src/rez/cli/forward.py
index 8e434c8d1..0743a9625 100644
--- a/src/rez/cli/forward.py
+++ b/src/rez/cli/forward.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """See util.create_forwarding_script()."""
 import argparse
 from rez.vendor.six import six
@@ -71,19 +86,3 @@ def command(opts, parser, extra_arg_groups=None):
         kwargs["_cli_args"] = cli_args
 
     target_func(*nargs, **kwargs)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/gui.py b/src/rez/cli/gui.py
index 5076e1ca1..2181036fd 100644
--- a/src/rez/cli/gui.py
+++ b/src/rez/cli/gui.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Run the Rez GUI application.
 """
@@ -19,19 +34,3 @@ def setup_parser(parser, completions=False):
 def command(opts, parser=None, extra_arg_groups=None):
     from rezgui.app import run
     run(opts, parser)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/help.py b/src/rez/cli/help.py
index 035d08283..0540a167d 100644
--- a/src/rez/cli/help.py
+++ b/src/rez/cli/help.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utility for displaying help for the given package.
 """
@@ -58,19 +73,3 @@ def command(opts, parser=None, extra_arg_groups=None):
         except IndexError:
             print("No such help section.", file=sys.stderr)
             sys.exit(2)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/interpret.py b/src/rez/cli/interpret.py
index 3069daa61..14c3c582c 100644
--- a/src/rez/cli/interpret.py
+++ b/src/rez/cli/interpret.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Execute some Rex code and print the interpreted result.
 '''
@@ -74,19 +89,3 @@ def command(opts, parser, extra_arg_groups=None):
             print(pformat(o))
     else:
         print(o)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/memcache.py b/src/rez/cli/memcache.py
index b8ea80976..9f16a1036 100644
--- a/src/rez/cli/memcache.py
+++ b/src/rez/cli/memcache.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Manage and query memcache server(s).
 """
@@ -164,19 +179,3 @@ def _fail():
 
         rows.append(row)
     print('\n'.join(columnise(rows)))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/mv.py b/src/rez/cli/mv.py
index 91263ed51..0e15c4278 100644
--- a/src/rez/cli/mv.py
+++ b/src/rez/cli/mv.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Move a package from one repository to another.
 '''
diff --git a/src/rez/cli/pip.py b/src/rez/cli/pip.py
index de5ffafef..25648c382 100644
--- a/src/rez/cli/pip.py
+++ b/src/rez/cli/pip.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Install a pip-compatible python package, and its dependencies, as rez packages.
 """
@@ -67,18 +82,3 @@ def command(opts, parser, extra_arg_groups=None):
         release=opts.release,
         prefix=opts.prefix,
         extra_args=opts.extra)
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/pkg-cache.py b/src/rez/cli/pkg-cache.py
index d21c60840..06164e4a2 100644
--- a/src/rez/cli/pkg-cache.py
+++ b/src/rez/cli/pkg-cache.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Manipulate a package cache.
 '''
@@ -191,19 +206,3 @@ def _sort(entry):
 
         pr = colorize.Printer()
         print_colored_columns(pr, rows)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/pkg-ignore.py b/src/rez/cli/pkg-ignore.py
index 4a2c2b524..e92a71da3 100644
--- a/src/rez/cli/pkg-ignore.py
+++ b/src/rez/cli/pkg-ignore.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Disable a package so it is hidden from resolves.
 '''
diff --git a/src/rez/cli/plugins.py b/src/rez/cli/plugins.py
index 155c64cf5..6d5d8955b 100644
--- a/src/rez/cli/plugins.py
+++ b/src/rez/cli/plugins.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Get a list of a package's plugins.
 """
@@ -37,19 +52,3 @@ def command(opts, parser, extra_arg_groups=None):
         print('\n'.join(pkgs_list))
     else:
         print("package '%s' has no plugins." % opts.PKG, file=sys.stderr)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/python.py b/src/rez/cli/python.py
index 51f420017..89b727c2c 100644
--- a/src/rez/cli/python.py
+++ b/src/rez/cli/python.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Start a python interpreter or execute a python script within Rez's own execution context.
 
@@ -33,19 +48,3 @@ def command(opts, parser, extra_arg_groups=None):
 
     with Popen(cmd) as p:
         sys.exit(p.wait())
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/release.py b/src/rez/cli/release.py
index 92436edc8..3fdd311c4 100644
--- a/src/rez/cli/release.py
+++ b/src/rez/cli/release.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Build a package from source and deploy it.
 '''
@@ -145,19 +160,3 @@ def command(opts, parser, extra_arg_groups=None):
             os.remove(filepath)
         except:
             pass
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/rm.py b/src/rez/cli/rm.py
index b0fe9e10f..9e90322ce 100644
--- a/src/rez/cli/rm.py
+++ b/src/rez/cli/rm.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Remove package(s) from a repository.
 '''
diff --git a/src/rez/cli/search.py b/src/rez/cli/search.py
index 9e7bf661a..e0cc7e6cf 100644
--- a/src/rez/cli/search.py
+++ b/src/rez/cli/search.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Search for packages
 """
@@ -119,19 +134,3 @@ def command(opts, parser, extra_arg_groups=None):
     )
 
     formatter.print_search_results(search_results)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/status.py b/src/rez/cli/status.py
index a7f96bdb2..d08fc2628 100644
--- a/src/rez/cli/status.py
+++ b/src/rez/cli/status.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Report current status of the environment, or a tool or package etc.
 '''
@@ -28,19 +43,3 @@ def command(opts, parser, extra_arg_groups=None):
         b = status.print_info(opts.OBJECT)
 
     sys.exit(0 if b else 1)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/suite.py b/src/rez/cli/suite.py
index 40238f9fc..3153b9c58 100644
--- a/src/rez/cli/suite.py
+++ b/src/rez/cli/suite.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Manage a suite or print information about an existing suite.
 '''
@@ -194,19 +209,3 @@ def _option(name):
     if do_save:
         _pr("saving suite to %r..." % opts.DIR)
         suite.save(opts.DIR)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/view.py b/src/rez/cli/view.py
index fbfe1c8b0..e0cdbbfa1 100644
--- a/src/rez/cli/view.py
+++ b/src/rez/cli/view.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 View the contents of a package.
 """
@@ -71,19 +86,3 @@ def command(opts, parser, extra_arg_groups=None):
     else:
         format_ = FileFormat.yaml
     package.print_info(format_=format_, include_release=opts.all)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/yaml2py.py b/src/rez/cli/yaml2py.py
index f1b0d1c03..0c93483c9 100644
--- a/src/rez/cli/yaml2py.py
+++ b/src/rez/cli/yaml2py.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Print a package.yaml file in package.py format.
 """
@@ -34,19 +49,3 @@ def command(opts, parser, extra_arg_groups=None):
         sys.exit(1)
 
     package.print_info(format_=FileFormat.py)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/command.py b/src/rez/command.py
index aad26a9ff..a5d6ff598 100644
--- a/src/rez/command.py
+++ b/src/rez/command.py
@@ -1,3 +1,17 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 from rez.config import config
 
diff --git a/src/rez/config.py b/src/rez/config.py
index d59aeb3b5..5768a7a93 100644
--- a/src/rez/config.py
+++ b/src/rez/config.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import absolute_import
 from rez import __version__
 from rez.utils.data_utils import AttrDictWrapper, RO_AttrDictWrapper, \
@@ -970,19 +985,3 @@ def get_module_root_config():
 
 # singleton
 config = Config._create_main_config()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/developer_package.py b/src/rez/developer_package.py
index 9e1ad1e58..28b66fd0c 100644
--- a/src/rez/developer_package.py
+++ b/src/rez/developer_package.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.config import config
 from rez.packages import Package, create_package
 from rez.serialise import load_from_file, FileFormat, set_objects
diff --git a/src/rez/exceptions.py b/src/rez/exceptions.py
index 05734a4da..0b14fd18d 100644
--- a/src/rez/exceptions.py
+++ b/src/rez/exceptions.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Exceptions.
 """
@@ -222,19 +237,3 @@ def convert_errors(from_, to, msg=None):
         if msg:
             info = "%s: %s" % (msg, info)
         raise to(info)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_bind.py b/src/rez/package_bind.py
index 2c126f8fa..18d0aad32 100644
--- a/src/rez/package_bind.py
+++ b/src/rez/package_bind.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.exceptions import RezBindError, _NeverError
diff --git a/src/rez/package_cache.py b/src/rez/package_cache.py
index f6747ea2d..48681cec3 100644
--- a/src/rez/package_cache.py
+++ b/src/rez/package_cache.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 import os.path
 import errno
diff --git a/src/rez/package_copy.py b/src/rez/package_copy.py
index a832724ff..ab4d77f1a 100644
--- a/src/rez/package_copy.py
+++ b/src/rez/package_copy.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from functools import partial
 import os.path
 import shutil
@@ -425,19 +440,3 @@ def _copy_package_include_modules(src_package, dest_pkg_repo, overrides=None):
     with ctxt:
         safe_makedirs(dest_include_modules_path)
         additive_copytree(src_include_modules_path, dest_include_modules_path)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_filter.py b/src/rez/package_filter.py
index 0077db816..daed92696 100644
--- a/src/rez/package_filter.py
+++ b/src/rez/package_filter.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.packages import iter_packages
 from rez.exceptions import ConfigurationError
 from rez.config import config
@@ -545,19 +560,3 @@ def __str__(self):
             parts.append(self._family)
         parts.append(str(self.timestamp))
         return "%s(%s)" % (label, ':'.join(parts))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_help.py b/src/rez/package_help.py
index 4d9f05620..ed7b9793d 100644
--- a/src/rez/package_help.py
+++ b/src/rez/package_help.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.packages import iter_packages
@@ -125,19 +140,3 @@ def _open_url(cls, url):
             if not config.quiet:
                 print("opening URL in browser: %s" % url)
             webbrowser.open_new(url)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_maker.py b/src/rez/package_maker.py
index 9d6c154d2..0f7898d0f 100644
--- a/src/rez/package_maker.py
+++ b/src/rez/package_maker.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils._version import _rez_version
 from rez.utils.schema import Required, extensible_schema_dict
 from rez.utils.filesystem import retain_cwd
@@ -233,19 +248,3 @@ def make_package(name, path, make_base=None, make_root=None, skip_existing=True,
                 make_root(variant_, root)
 
             maker.installed_variants.append(variant_)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_maker__.py b/src/rez/package_maker__.py
index 129c355f3..1046877c2 100644
--- a/src/rez/package_maker__.py
+++ b/src/rez/package_maker__.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import warnings
 from rez.package_maker import *  # noqa
 
diff --git a/src/rez/package_move.py b/src/rez/package_move.py
index 20d336023..2e8143836 100644
--- a/src/rez/package_move.py
+++ b/src/rez/package_move.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.exceptions import PackageMoveError
 from rez.package_copy import copy_package
 from rez.package_repository import package_repository_manager
diff --git a/src/rez/package_order.py b/src/rez/package_order.py
index dffac0841..248314297 100644
--- a/src/rez/package_order.py
+++ b/src/rez/package_order.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from inspect import isclass
 from hashlib import sha1
 
@@ -486,19 +501,3 @@ def register_orderer(cls):
 _orderers = {}
 for o in list(globals().values()):
     register_orderer(o)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_py_utils.py b/src/rez/package_py_utils.py
index 3594a4a0b..0b6384fd0 100644
--- a/src/rez/package_py_utils.py
+++ b/src/rez/package_py_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 This sourcefile is intended to be imported in package.py files, in functions
 including:
diff --git a/src/rez/package_remove.py b/src/rez/package_remove.py
index 3f3ac9769..8975d9524 100644
--- a/src/rez/package_remove.py
+++ b/src/rez/package_remove.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.package_repository import package_repository_manager
 from rez.vendor.version.version import Version
 from rez.utils.logging_ import print_info
diff --git a/src/rez/package_repository.py b/src/rez/package_repository.py
index 7642d909e..45e2d3877 100644
--- a/src/rez/package_repository.py
+++ b/src/rez/package_repository.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.resources import ResourcePool, ResourceHandle
 from rez.utils.data_utils import cached_property
 from rez.plugin_managers import plugin_manager
@@ -630,19 +645,3 @@ def _get_repository(self, path, **repo_args):
 
 # singleton
 package_repository_manager = PackageRepositoryManager()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_resources.py b/src/rez/package_resources.py
index ec24112d1..6059f270d 100644
--- a/src/rez/package_resources.py
+++ b/src/rez/package_resources.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.resources import Resource
 from rez.utils.schema import Required, schema_keys, extensible_schema_dict
 from rez.utils.logging_ import print_warning
@@ -522,19 +537,3 @@ def wrapped(self):  # forward Package attributes onto ourself
     def _load(self):
         # doesn't have its own data, forwards on from parent instead
         return None
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_resources_.py b/src/rez/package_resources_.py
index ccbf5e91d..bfb22cb68 100644
--- a/src/rez/package_resources_.py
+++ b/src/rez/package_resources_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import warnings
 from rez.package_resources import *  # noqa
 
diff --git a/src/rez/package_search.py b/src/rez/package_search.py
index c073a2261..25a34f7a8 100644
--- a/src/rez/package_search.py
+++ b/src/rez/package_search.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Default algorithms for searching for packages based on some criteria. Package
 repository plugins may implement these algorithms instead, because they may be
@@ -425,19 +440,3 @@ def _format_search_result(self, resource_search_result):
             formatted_lines.append(line)
 
         return formatted_lines
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/package_serialise.py b/src/rez/package_serialise.py
index 9fa61a7a9..97c3fe6b0 100644
--- a/src/rez/package_serialise.py
+++ b/src/rez/package_serialise.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.serialise import FileFormat
@@ -222,19 +237,3 @@ def _dump_package_data_py(items, buf):
 
 dump_functions = {FileFormat.py: _dump_package_data_py,
                   FileFormat.yaml: _dump_package_data_yaml}
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/packages.py b/src/rez/packages.py
index 61eb94c1f..fe4e0c498 100644
--- a/src/rez/packages.py
+++ b/src/rez/packages.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.package_repository import package_repository_manager
 from rez.package_resources import PackageFamilyResource, PackageResource, \
     VariantResource, package_family_schema, package_schema, variant_schema, \
@@ -942,19 +957,3 @@ def _check_class(resource, cls):
     if not isinstance(resource, cls):
         raise ResourceError("Expected %s, got %s"
                             % (cls.__name__, resource.__class__.__name__))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/packages_.py b/src/rez/packages_.py
index 1d5e0fbcf..1e4e60668 100644
--- a/src/rez/packages_.py
+++ b/src/rez/packages_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import warnings
 from rez.packages import *  # noqa
 
diff --git a/src/rez/pip.py b/src/rez/pip.py
index 30decba1a..37cd0160b 100644
--- a/src/rez/pip.py
+++ b/src/rez/pip.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function, absolute_import
 
 from rez.packages import get_latest_package
@@ -627,19 +642,3 @@ def _check_found(py_exe, version_text, log_invalid=True):
 def _log(msg):
     if _verbose:
         print_debug(msg)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/plugin_managers.py b/src/rez/plugin_managers.py
index 616edfa13..739a4f211 100644
--- a/src/rez/plugin_managers.py
+++ b/src/rez/plugin_managers.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Manages loading of all types of Rez plugins.
 """
@@ -457,19 +472,3 @@ class CommandPluginType(RezPluginType):
 plugin_manager.register_plugin_type(PackageRepositoryPluginType)
 plugin_manager.register_plugin_type(BuildProcessPluginType)
 plugin_manager.register_plugin_type(CommandPluginType)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/release_hook.py b/src/rez/release_hook.py
index 11cd2295d..03ebee99d 100644
--- a/src/rez/release_hook.py
+++ b/src/rez/release_hook.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.logging_ import print_warning, print_debug
 from rez.packages import get_developer_package
 from rez.vendor.enum import Enum
@@ -135,19 +150,3 @@ def __init__(self, label, noun, func_name):
         self.label = label
         self.noun = noun
         self.__name__ = func_name
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/release_vcs.py b/src/rez/release_vcs.py
index 877e6c019..c82e409ee 100644
--- a/src/rez/release_vcs.py
+++ b/src/rez/release_vcs.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.exceptions import ReleaseVCSError
 from rez.packages import get_developer_package
 from rez.util import which
@@ -224,19 +239,3 @@ def _cmd(self, *nargs):
             return [x.rstrip() for x in out.split('\n')]
         else:
             return []
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/resolved_context.py b/src/rez/resolved_context.py
index d57dd8361..440602bde 100644
--- a/src/rez/resolved_context.py
+++ b/src/rez/resolved_context.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez import __version__, module_root_path
@@ -2145,19 +2160,3 @@ def _append_suite_paths(self, executor):
         for path in suite_paths:
             tools_path = os.path.join(path, "bin")
             executor.env.PATH.append(tools_path)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/resolver.py b/src/rez/resolver.py
index 6689b8977..bbc96fed4 100644
--- a/src/rez/resolver.py
+++ b/src/rez/resolver.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.solver import Solver, SolverStatus
 from rez.package_repository import package_repository_manager
 from rez.packages import get_variant, get_last_release_time
@@ -465,19 +480,3 @@ def _solver_to_dict(cls, solver):
             variant_handles=variant_handles,
             ephemerals=ephemerals
         )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/rex.py b/src/rez/rex.py
index af4d2a945..3504a25b3 100644
--- a/src/rez/rex.py
+++ b/src/rez/rex.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import os
@@ -1402,19 +1417,3 @@ def get_output(self, style=OutputStyle.file):
 
     def expand(self, value):
         return self.formatter.format(str(value), regex=self.interpreter.ENV_VAR_REGEX)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/rex_bindings.py b/src/rez/rex_bindings.py
index d0c507714..9078668d7 100644
--- a/src/rez/rex_bindings.py
+++ b/src/rez/rex_bindings.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Provides wrappers for various types for binding to Rex. We do not want to bind
 object instances directly in Rex, because this would create an indirect
@@ -285,19 +300,3 @@ def commands():
         )
 
     return range1.intersects(range2)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/rezconfig.py b/src/rez/rezconfig.py
index c49b4417f..a6542243a 100644
--- a/src/rez/rezconfig.py
+++ b/src/rez/rezconfig.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Rez configuration settings. Do not change this file.
 
@@ -1180,19 +1195,3 @@
 
 # Turn GUI threading on/off. You would only turn off for debugging purposes.
 gui_threads = True
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/serialise.py b/src/rez/serialise.py
index 66564b695..bcbd5fb83 100644
--- a/src/rez/serialise.py
+++ b/src/rez/serialise.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Read and write data from file. File caching via a memcached server is supported.
 """
@@ -445,19 +460,3 @@ def clear_file_caches():
 load_functions = {FileFormat.py:      load_py,
                   FileFormat.yaml:    load_yaml,
                   FileFormat.txt:     load_txt}
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/shells.py b/src/rez/shells.py
index 5db529ae6..3e2f19b34 100644
--- a/src/rez/shells.py
+++ b/src/rez/shells.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Pluggable API for creating subshells using different programs, such as bash.
 """
@@ -536,18 +551,3 @@ def get_all_key_tokens(cls, key):
     @classmethod
     def line_terminator(cls):
         return "\n"
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/solver.py b/src/rez/solver.py
index f63b19217..b838214c3 100644
--- a/src/rez/solver.py
+++ b/src/rez/solver.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 The dependency resolving module.
 
@@ -2417,19 +2432,3 @@ def _short_req_str(package_request):
                                   str(package_request.range.span()),
                                   len(versions))
     return str(package_request)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/status.py b/src/rez/status.py
index 70ecb9584..d2d0ec229 100644
--- a/src/rez/status.py
+++ b/src/rez/status.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import sys
@@ -372,19 +387,3 @@ def _print_info(self, buf=sys.stdout):
 
 # singleton
 status = Status()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/suite.py b/src/rez/suite.py
index ec435994b..4a5517487 100644
--- a/src/rez/suite.py
+++ b/src/rez/suite.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.utils.execution import create_forwarding_script
@@ -760,19 +775,3 @@ def _FWD__invoke_suite_tool_alias(context_name, tool_name, prefix_char=None,
     w._init(suite_path, context_name, context, tool_name, prefix_char)
     retcode = w.run(*(_cli_args or []))
     sys.exit(retcode)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/system.py b/src/rez/system.py
index 3bc6b438d..e921df3c7 100644
--- a/src/rez/system.py
+++ b/src/rez/system.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 import os.path
 import re
@@ -318,19 +333,3 @@ def _make_safe_version_string(cls, s):
 
 # singleton
 system = System()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/util.py b/src/rez/util.py
index de699c4f0..685ab1ce5 100644
--- a/src/rez/util.py
+++ b/src/rez/util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Misc useful stuff.
 TODO: Move this into rez.utils.?
@@ -158,18 +173,3 @@ def is_non_string_iterable(arg):
         isinstance(arg, iterable_class)
         and not isinstance(arg, six.string_types)
     )
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/__init__.py b/src/rez/utils/__init__.py
index b165d767a..6289799ad 100644
--- a/src/rez/utils/__init__.py
+++ b/src/rez/utils/__init__.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import sys
 from rez.vendor.six import six
 from contextlib import contextmanager
@@ -11,19 +26,3 @@ def with_noop():
 def reraise(exc, new_exc_cls):
     traceback = sys.exc_info()[2]
     six.reraise(new_exc_cls, exc, traceback)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/_version.py b/src/rez/utils/_version.py
index 558d9bbd3..b3638160a 100644
--- a/src/rez/utils/_version.py
+++ b/src/rez/utils/_version.py
@@ -1,20 +1,17 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
 
 # Update this value to version up Rez. Do not place anything else in this file.
 _rez_version = "2.98.3"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/amqp.py b/src/rez/utils/amqp.py
index 8e17f8dcd..d9eccc3f4 100644
--- a/src/rez/utils/amqp.py
+++ b/src/rez/utils/amqp.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import atexit
 import socket
 import time
diff --git a/src/rez/utils/backcompat.py b/src/rez/utils/backcompat.py
index ff9e18694..4dc180404 100644
--- a/src/rez/utils/backcompat.py
+++ b/src/rez/utils/backcompat.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utility code for supporting earlier Rez data in later Rez releases.
 """
@@ -161,19 +176,3 @@ def _encode(s):
             """) % (br, '\n'.join(commands), rex_code, br)
         print_debug(msg)
     return rex_code
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/base26.py b/src/rez/utils/base26.py
index a82dcaa6a..441e7d30e 100644
--- a/src/rez/utils/base26.py
+++ b/src/rez/utils/base26.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import errno
 import os
 import os.path
diff --git a/src/rez/utils/colorize.py b/src/rez/utils/colorize.py
index 288ecead2..56ac5294d 100644
--- a/src/rez/utils/colorize.py
+++ b/src/rez/utils/colorize.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import sys
@@ -326,19 +341,3 @@ def get(self, msg, style=None):
         if style and self.colorize:
             msg = style(msg)
         return msg
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/data_utils.py b/src/rez/utils/data_utils.py
index 7225f511a..33d9010bf 100644
--- a/src/rez/utils/data_utils.py
+++ b/src/rez/utils/data_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utilities related to managing data types.
 """
@@ -669,19 +684,3 @@ def getter(self):
                 return self._validate_key_impl(key, attr, key_schema)
 
         return cached_property(getter, name=attribute)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/diff_packages.py b/src/rez/utils/diff_packages.py
index 9306b3289..2d61a63e5 100644
--- a/src/rez/utils/diff_packages.py
+++ b/src/rez/utils/diff_packages.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.packages import iter_packages
@@ -50,19 +65,3 @@ def _check_pkg(pkg):
 
     with Popen([difftool] + paths) as p:
         p.wait()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/elf.py b/src/rez/utils/elf.py
index 65eaaf957..73bbac51c 100644
--- a/src/rez/utils/elf.py
+++ b/src/rez/utils/elf.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Functions that wrap readelf/patchelf utils on linux.
 """
diff --git a/src/rez/utils/execution.py b/src/rez/utils/execution.py
index 938636789..5b351265c 100644
--- a/src/rez/utils/execution.py
+++ b/src/rez/utils/execution.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utilities related to process/script execution.
 """
diff --git a/src/rez/utils/filesystem.py b/src/rez/utils/filesystem.py
index 065e6e1a9..a755352a6 100644
--- a/src/rez/utils/filesystem.py
+++ b/src/rez/utils/filesystem.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Filesystem-related utilities.
 """
@@ -686,19 +701,3 @@ def windows_long_path(dos_path):
         path = "\\\\?\\" + path
 
     return path
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/formatting.py b/src/rez/utils/formatting.py
index c920d4cbe..406e546ff 100644
--- a/src/rez/utils/formatting.py
+++ b/src/rez/utils/formatting.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utilities related to formatting output or translating input.
 """
@@ -539,19 +554,3 @@ def minor_header_comment(executor, txt):
     executor.comment("")
     executor.comment(txt)
     executor.comment(_header_br_minor)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/graph_utils.py b/src/rez/utils/graph_utils.py
index 92639fa1a..bc5adb5b3 100644
--- a/src/rez/utils/graph_utils.py
+++ b/src/rez/utils/graph_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Functions for manipulating dot-based resolve graphs.
 """
@@ -304,19 +319,3 @@ def _write_graph(graph_str, dest_file=None):
 # converts string like '"PyQt-4.8.0[1]"' to 'PyQt-4.8.0'
 def _request_from_label(label):
     return label.strip('"').strip("'").rsplit('[', 1)[0]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/installer.py b/src/rez/utils/installer.py
index dd2dd3002..18961297a 100644
--- a/src/rez/utils/installer.py
+++ b/src/rez/utils/installer.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import rez
diff --git a/src/rez/utils/json.py b/src/rez/utils/json.py
index 4d2a1ce91..2f772422b 100644
--- a/src/rez/utils/json.py
+++ b/src/rez/utils/json.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import absolute_import
 import json
 from json import dumps  # noqa (forwarded)
diff --git a/src/rez/utils/lint_helper.py b/src/rez/utils/lint_helper.py
index b91a4484d..7d36a54ca 100644
--- a/src/rez/utils/lint_helper.py
+++ b/src/rez/utils/lint_helper.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 This file lets you import anything from it, and the result is a variable set to
 None. It is only here to keep linters such as PyFlakes happy. It is used in cases
@@ -20,19 +35,3 @@ def used(self, object_):
 
 
 sys.modules[__name__] = noner
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/logging_.py b/src/rez/utils/logging_.py
index 2e9e79964..5ef023d16 100644
--- a/src/rez/utils/logging_.py
+++ b/src/rez/utils/logging_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 from contextlib import contextmanager
 import logging
@@ -125,19 +140,3 @@ def view_file_logs(globbed_path, loglevel_index=None):
                     colorize.Printer()(line, color)
                 else:
                     print(line)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/memcached.py b/src/rez/utils/memcached.py
index 9f40f8d3a..0d0d6c72a 100644
--- a/src/rez/utils/memcached.py
+++ b/src/rez/utils/memcached.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.config import config
@@ -405,19 +420,3 @@ def forget():
 class DoNotCache(object):
     def __init__(self, result):
         self.result = result
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/patching.py b/src/rez/utils/patching.py
index 61c567017..818f6fe58 100644
--- a/src/rez/utils/patching.py
+++ b/src/rez/utils/patching.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.vendor.version.requirement import Requirement
 
 
@@ -76,19 +91,3 @@ def get_patched_request(requires, patchlist):
 
     result = [x for x in requires if x is not None] + appended
     return result
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/pip.py b/src/rez/utils/pip.py
index 67346e055..fc32bba04 100644
--- a/src/rez/utils/pip.py
+++ b/src/rez/utils/pip.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Python packaging related utilities.
 """
diff --git a/src/rez/utils/platform_.py b/src/rez/utils/platform_.py
index 3f35aa50a..d0e1f79e5 100644
--- a/src/rez/utils/platform_.py
+++ b/src/rez/utils/platform_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import platform
 import sys
 import os
@@ -569,19 +584,3 @@ def _difftool(self):
     platform_ = OSXPlatform()
 elif name == "windows":
     platform_ = WindowsPlatform()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/platform_mapped.py b/src/rez/utils/platform_mapped.py
index e06e78896..859485338 100644
--- a/src/rez/utils/platform_mapped.py
+++ b/src/rez/utils/platform_mapped.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import re
 
 
diff --git a/src/rez/utils/py23.py b/src/rez/utils/py23.py
index 0b485110a..120605a7c 100644
--- a/src/rez/utils/py23.py
+++ b/src/rez/utils/py23.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Custom py2/3 interoperability code.
 
diff --git a/src/rez/utils/py_dist.py b/src/rez/utils/py_dist.py
index 535686e61..3174934c3 100644
--- a/src/rez/utils/py_dist.py
+++ b/src/rez/utils/py_dist.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Functions for converting python distributions to rez packages.
 """
@@ -246,19 +261,3 @@ def commands():
         f.write(content)
 
     return pkg_path
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/resolve_graph.py b/src/rez/utils/resolve_graph.py
index d2661f321..03857149f 100644
--- a/src/rez/utils/resolve_graph.py
+++ b/src/rez/utils/resolve_graph.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.graph_utils import _request_from_label
 
 
diff --git a/src/rez/utils/resources.py b/src/rez/utils/resources.py
index 5198c6d15..297b90e15 100644
--- a/src/rez/utils/resources.py
+++ b/src/rez/utils/resources.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 A general resource system.
 
@@ -287,19 +302,3 @@ def __repr__(self):
 
     def __hash__(self):
         return hash((self.__class__, self.resource))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/schema.py b/src/rez/utils/schema.py
index 1bf5ce862..d13ddd38b 100644
--- a/src/rez/utils/schema.py
+++ b/src/rez/utils/schema.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Utilities for working with dict-based schemas.
 """
@@ -88,19 +103,3 @@ def extensible_schema_dict(schema_dict):
 
     result.update(schema_dict)
     return result
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/scope.py b/src/rez/utils/scope.py
index a51674276..02d3d6399 100644
--- a/src/rez/utils/scope.py
+++ b/src/rez/utils/scope.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.utils.formatting import StringFormatMixin, StringFormatType
@@ -259,19 +274,3 @@ def scoped_format(txt, **objects):
     expand = objects.pop("expand", RecursiveAttribute.format_expand)
     formatter = scoped_formatter(**objects)
     return formatter.format(txt, pretty=pretty, expand=expand)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/utils/sourcecode.py b/src/rez/utils/sourcecode.py
index 65b5d06af..bf5b25fdd 100644
--- a/src/rez/utils/sourcecode.py
+++ b/src/rez/utils/sourcecode.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.formatting import indent
 from rez.utils.data_utils import cached_property
 from rez.utils.logging_ import print_debug
diff --git a/src/rez/utils/yaml.py b/src/rez/utils/yaml.py
index 60e2ad7cb..56d552886 100644
--- a/src/rez/utils/yaml.py
+++ b/src/rez/utils/yaml.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.utils.sourcecode import SourceCode
 from rez.vendor import yaml
 from rez.vendor.yaml.dumper import SafeDumper
@@ -57,19 +72,3 @@ def save_yaml(filepath, **fields):
     content = dump_yaml(fields)
     with open(filepath, 'w') as f:
         f.write(content + '\n')
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/vendor/README.md b/src/rez/vendor/README.md
index 7b66538ab..3bd73276f 100644
--- a/src/rez/vendor/README.md
+++ b/src/rez/vendor/README.md
@@ -1,7 +1,5 @@
 This folder contains all the libraries on which rez depends to run.
 
-Libraries that are required to install Rez can be found in [src/build_utils](../../build_utils).
-
 The dependencies list found here is used to track which version we use so that when we
 revisit the install procedure, it will be much simpler to do any change in the vendored
 libraries (updating them, un-vendoring some, etc).
@@ -19,17 +17,6 @@ Note that the latest versions column is just to give us an idea of how far back
 <th>Note</th>
 </tr>
 
-<!-- ######################################################### -->
-<tr><td>
-    amqp
-</td><td>
-    1.4.9 (Jan 8, 2016)
-</td><td>
-    2.4.2 (Mar 3, 2019)
-</td><td>
-    -
-</td></tr>
-
 <!-- ######################################################### -->
 <tr><td>
     argcomplete
@@ -163,7 +150,7 @@ Note that the latest versions column is just to give us an idea of how far back
 </td><td>
     1.4.2.dev0 (Oct 28, 2020)
 </td><td>
-    
+
 * Updated (July 2019) in order to update pyparsing lib which in turn is
 required by the packaging library. Updated (Aug 2019) for py3.
 
diff --git a/src/rez/vendor/amqp/LICENSE b/src/rez/vendor/amqp/LICENSE
deleted file mode 100644
index 3b473dbfc..000000000
--- a/src/rez/vendor/amqp/LICENSE
+++ /dev/null
@@ -1,458 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
diff --git a/src/rez/vendor/amqp/__init__.py b/src/rez/vendor/amqp/__init__.py
deleted file mode 100644
index 9c39c4395..000000000
--- a/src/rez/vendor/amqp/__init__.py
+++ /dev/null
@@ -1,70 +0,0 @@
-"""Low-level AMQP client for Python (fork of amqplib)"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-VERSION = (1, 4, 9)
-__version__ = '.'.join(map(str, VERSION[0:3])) + ''.join(VERSION[3:])
-__author__ = 'Barry Pederson'
-__maintainer__ = 'Ask Solem'
-__contact__ = 'pyamqp@celeryproject.org'
-__homepage__ = 'http://github.com/celery/py-amqp'
-__docformat__ = 'restructuredtext'
-
-# -eof meta-
-
-#
-# Pull in the public items from the various sub-modules
-#
-from .basic_message import Message      # noqa
-from .channel import Channel            # noqa
-from .connection import Connection      # noqa
-from .exceptions import (               # noqa
-    AMQPError,
-    ConnectionError,
-    RecoverableConnectionError,
-    IrrecoverableConnectionError,
-    ChannelError,
-    RecoverableChannelError,
-    IrrecoverableChannelError,
-    ConsumerCancelled,
-    ContentTooLarge,
-    NoConsumers,
-    ConnectionForced,
-    InvalidPath,
-    AccessRefused,
-    NotFound,
-    ResourceLocked,
-    PreconditionFailed,
-    FrameError,
-    FrameSyntaxError,
-    InvalidCommand,
-    ChannelNotOpen,
-    UnexpectedFrame,
-    ResourceError,
-    NotAllowed,
-    AMQPNotImplementedError,
-    InternalError,
-    error_for_code,
-    __all__ as _all_exceptions,
-)
-from .utils import promise  # noqa
-
-__all__ = [
-    'Connection',
-    'Channel',
-    'Message',
-] + _all_exceptions
diff --git a/src/rez/vendor/amqp/abstract_channel.py b/src/rez/vendor/amqp/abstract_channel.py
deleted file mode 100644
index 62fca895f..000000000
--- a/src/rez/vendor/amqp/abstract_channel.py
+++ /dev/null
@@ -1,93 +0,0 @@
-"""Code common to Connection and Channel objects."""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>)
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-from .exceptions import AMQPNotImplementedError, RecoverableConnectionError
-from .serialization import AMQPWriter
-
-__all__ = ['AbstractChannel']
-
-
-class AbstractChannel(object):
-    """Superclass for both the Connection, which is treated
-    as channel 0, and other user-created Channel objects.
-
-    The subclasses must have a _METHOD_MAP class property, mapping
-    between AMQP method signatures and Python methods.
-
-    """
-    def __init__(self, connection, channel_id):
-        self.connection = connection
-        self.channel_id = channel_id
-        connection.channels[channel_id] = self
-        self.method_queue = []  # Higher level queue for methods
-        self.auto_decode = False
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, *exc_info):
-        self.close()
-
-    def _send_method(self, method_sig, args=bytes(), content=None):
-        """Send a method for our channel."""
-        conn = self.connection
-        if conn is None:
-            raise RecoverableConnectionError('connection already closed')
-
-        if isinstance(args, AMQPWriter):
-            args = args.getvalue()
-
-        conn.method_writer.write_method(
-            self.channel_id, method_sig, args, content,
-        )
-
-    def close(self):
-        """Close this Channel or Connection"""
-        raise NotImplementedError('Must be overriden in subclass')
-
-    def wait(self, allowed_methods=None, timeout=None):
-        """Wait for a method that matches our allowed_methods parameter (the
-        default value of None means match any method), and dispatch to it."""
-        method_sig, args, content = self.connection._wait_method(
-            self.channel_id, allowed_methods, timeout)
-
-        return self.dispatch_method(method_sig, args, content)
-
-    def dispatch_method(self, method_sig, args, content):
-        if content and \
-                self.auto_decode and \
-                hasattr(content, 'content_encoding'):
-            try:
-                content.body = content.body.decode(content.content_encoding)
-            except Exception:
-                pass
-
-        try:
-            amqp_method = self._METHOD_MAP[method_sig]
-        except KeyError:
-            raise AMQPNotImplementedError(
-                'Unknown AMQP method {0!r}'.format(method_sig))
-
-        if content is None:
-            return amqp_method(self, args)
-        else:
-            return amqp_method(self, args, content)
-
-    #: Placeholder, the concrete implementations will have to
-    #: supply their own versions of _METHOD_MAP
-    _METHOD_MAP = {}
diff --git a/src/rez/vendor/amqp/basic_message.py b/src/rez/vendor/amqp/basic_message.py
deleted file mode 100644
index 192ede90b..000000000
--- a/src/rez/vendor/amqp/basic_message.py
+++ /dev/null
@@ -1,124 +0,0 @@
-"""Messages for AMQP"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-from .serialization import GenericContent
-
-__all__ = ['Message']
-
-
-class Message(GenericContent):
-    """A Message for use with the Channnel.basic_* methods."""
-
-    #: Instances of this class have these attributes, which
-    #: are passed back and forth as message properties between
-    #: client and server
-    PROPERTIES = [
-        ('content_type', 'shortstr'),
-        ('content_encoding', 'shortstr'),
-        ('application_headers', 'table'),
-        ('delivery_mode', 'octet'),
-        ('priority', 'octet'),
-        ('correlation_id', 'shortstr'),
-        ('reply_to', 'shortstr'),
-        ('expiration', 'shortstr'),
-        ('message_id', 'shortstr'),
-        ('timestamp', 'timestamp'),
-        ('type', 'shortstr'),
-        ('user_id', 'shortstr'),
-        ('app_id', 'shortstr'),
-        ('cluster_id', 'shortstr')
-    ]
-
-    def __init__(self, body='', children=None, channel=None, **properties):
-        """Expected arg types
-
-            body: string
-            children: (not supported)
-
-        Keyword properties may include:
-
-            content_type: shortstr
-                MIME content type
-
-            content_encoding: shortstr
-                MIME content encoding
-
-            application_headers: table
-                Message header field table, a dict with string keys,
-                and string | int | Decimal | datetime | dict values.
-
-            delivery_mode: octet
-                Non-persistent (1) or persistent (2)
-
-            priority: octet
-                The message priority, 0 to 9
-
-            correlation_id: shortstr
-                The application correlation identifier
-
-            reply_to: shortstr
-                The destination to reply to
-
-            expiration: shortstr
-                Message expiration specification
-
-            message_id: shortstr
-                The application message identifier
-
-            timestamp: datetime.datetime
-                The message timestamp
-
-            type: shortstr
-                The message type name
-
-            user_id: shortstr
-                The creating user id
-
-            app_id: shortstr
-                The creating application id
-
-            cluster_id: shortstr
-                Intra-cluster routing identifier
-
-        Unicode bodies are encoded according to the 'content_encoding'
-        argument. If that's None, it's set to 'UTF-8' automatically.
-
-        example::
-
-            msg = Message('hello world',
-                            content_type='text/plain',
-                            application_headers={'foo': 7})
-
-        """
-        super(Message, self).__init__(**properties)
-        self.body = body
-        self.channel = channel
-
-    def __eq__(self, other):
-        """Check if the properties and bodies of this Message and another
-        Message are the same.
-
-        Received messages may contain a 'delivery_info' attribute,
-        which isn't compared.
-
-        """
-        try:
-            return (super(Message, self).__eq__(other) and
-                    self.body == other.body)
-        except AttributeError:
-            return NotImplemented
diff --git a/src/rez/vendor/amqp/channel.py b/src/rez/vendor/amqp/channel.py
deleted file mode 100644
index ff6a4ae27..000000000
--- a/src/rez/vendor/amqp/channel.py
+++ /dev/null
@@ -1,2550 +0,0 @@
-"""AMQP Channels"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-import logging
-
-from collections import defaultdict
-from warnings import warn
-
-from .abstract_channel import AbstractChannel
-from .exceptions import (
-    ChannelError, ConsumerCancelled, NotConfirmed, error_for_code,
-)
-from .five import Queue
-from .protocol import basic_return_t, queue_declare_ok_t
-from .serialization import AMQPWriter
-
-__all__ = ['Channel']
-
-AMQP_LOGGER = logging.getLogger('amqp')
-
-EXCHANGE_AUTODELETE_DEPRECATED = """\
-The auto_delete flag for exchanges has been deprecated and will be removed
-from py-amqp v1.5.0.\
-"""
-
-
-class VDeprecationWarning(DeprecationWarning):
-    pass
-
-
-class Channel(AbstractChannel):
-    """Work with channels
-
-    The channel class provides methods for a client to establish a
-    virtual connection - a channel - to a server and for both peers to
-    operate the virtual connection thereafter.
-
-    GRAMMAR::
-
-        channel             = open-channel *use-channel close-channel
-        open-channel        = C:OPEN S:OPEN-OK
-        use-channel         = C:FLOW S:FLOW-OK
-                            / S:FLOW C:FLOW-OK
-                            / functional-class
-        close-channel       = C:CLOSE S:CLOSE-OK
-                            / S:CLOSE C:CLOSE-OK
-
-    """
-
-    def __init__(self, connection, channel_id=None, auto_decode=True):
-        """Create a channel bound to a connection and using the specified
-        numeric channel_id, and open on the server.
-
-        The 'auto_decode' parameter (defaults to True), indicates
-        whether the library should attempt to decode the body
-        of Messages to a Unicode string if there's a 'content_encoding'
-        property for the message.  If there's no 'content_encoding'
-        property, or the decode raises an Exception, the message body
-        is left as plain bytes.
-
-        """
-        if channel_id:
-            connection._claim_channel_id(channel_id)
-        else:
-            channel_id = connection._get_free_channel_id()
-
-        AMQP_LOGGER.debug('using channel_id: %d', channel_id)
-
-        super(Channel, self).__init__(connection, channel_id)
-
-        self.is_open = False
-        self.active = True  # Flow control
-        self.returned_messages = Queue()
-        self.callbacks = {}
-        self.cancel_callbacks = {}
-        self.auto_decode = auto_decode
-        self.events = defaultdict(set)
-        self.no_ack_consumers = set()
-
-        # set first time basic_publish_confirm is called
-        # and publisher confirms are enabled for this channel.
-        self._confirm_selected = False
-        if self.connection.confirm_publish:
-            self.basic_publish = self.basic_publish_confirm
-
-        self._x_open()
-
-    def _do_close(self):
-        """Tear down this object, after we've agreed to close
-        with the server."""
-        AMQP_LOGGER.debug('Closed channel #%d', self.channel_id)
-        self.is_open = False
-        channel_id, self.channel_id = self.channel_id, None
-        connection, self.connection = self.connection, None
-        if connection:
-            connection.channels.pop(channel_id, None)
-            connection._avail_channel_ids.append(channel_id)
-        self.callbacks.clear()
-        self.cancel_callbacks.clear()
-        self.events.clear()
-        self.no_ack_consumers.clear()
-
-    def _do_revive(self):
-        self.is_open = False
-        self._x_open()
-
-    def close(self, reply_code=0, reply_text='', method_sig=(0, 0)):
-        """Request a channel close
-
-        This method indicates that the sender wants to close the
-        channel. This may be due to internal conditions (e.g. a forced
-        shut-down) or due to an error handling a specific method, i.e.
-        an exception.  When a close is due to an exception, the sender
-        provides the class and method id of the method which caused
-        the exception.
-
-        RULE:
-
-            After sending this method any received method except
-            Channel.Close-OK MUST be discarded.
-
-        RULE:
-
-            The peer sending this method MAY use a counter or timeout
-            to detect failure of the other peer to respond correctly
-            with Channel.Close-OK..
-
-        PARAMETERS:
-            reply_code: short
-
-                The reply code. The AMQ reply codes are defined in AMQ
-                RFC 011.
-
-            reply_text: shortstr
-
-                The localised reply text.  This text can be logged as an
-                aid to resolving issues.
-
-            class_id: short
-
-                failing method class
-
-                When the close is provoked by a method exception, this
-                is the class of the method.
-
-            method_id: short
-
-                failing method ID
-
-                When the close is provoked by a method exception, this
-                is the ID of the method.
-
-        """
-        try:
-            if not self.is_open or self.connection is None:
-                return
-
-            args = AMQPWriter()
-            args.write_short(reply_code)
-            args.write_shortstr(reply_text)
-            args.write_short(method_sig[0])  # class_id
-            args.write_short(method_sig[1])  # method_id
-            self._send_method((20, 40), args)
-            return self.wait(allowed_methods=[
-                (20, 40),  # Channel.close
-                (20, 41),  # Channel.close_ok
-            ])
-        finally:
-            self.connection = None
-
-    def _close(self, args):
-        """Request a channel close
-
-        This method indicates that the sender wants to close the
-        channel. This may be due to internal conditions (e.g. a forced
-        shut-down) or due to an error handling a specific method, i.e.
-        an exception.  When a close is due to an exception, the sender
-        provides the class and method id of the method which caused
-        the exception.
-
-        RULE:
-
-            After sending this method any received method except
-            Channel.Close-OK MUST be discarded.
-
-        RULE:
-
-            The peer sending this method MAY use a counter or timeout
-            to detect failure of the other peer to respond correctly
-            with Channel.Close-OK..
-
-        PARAMETERS:
-            reply_code: short
-
-                The reply code. The AMQ reply codes are defined in AMQ
-                RFC 011.
-
-            reply_text: shortstr
-
-                The localised reply text.  This text can be logged as an
-                aid to resolving issues.
-
-            class_id: short
-
-                failing method class
-
-                When the close is provoked by a method exception, this
-                is the class of the method.
-
-            method_id: short
-
-                failing method ID
-
-                When the close is provoked by a method exception, this
-                is the ID of the method.
-
-        """
-
-        reply_code = args.read_short()
-        reply_text = args.read_shortstr()
-        class_id = args.read_short()
-        method_id = args.read_short()
-
-        self._send_method((20, 41))
-        self._do_revive()
-
-        raise error_for_code(
-            reply_code, reply_text, (class_id, method_id), ChannelError,
-        )
-
-    def _close_ok(self, args):
-        """Confirm a channel close
-
-        This method confirms a Channel.Close method and tells the
-        recipient that it is safe to release resources for the channel
-        and close the socket.
-
-        RULE:
-
-            A peer that detects a socket closure without having
-            received a Channel.Close-Ok handshake method SHOULD log
-            the error.
-
-        """
-        self._do_close()
-
-    def flow(self, active):
-        """Enable/disable flow from peer
-
-        This method asks the peer to pause or restart the flow of
-        content data. This is a simple flow-control mechanism that a
-        peer can use to avoid oveflowing its queues or otherwise
-        finding itself receiving more messages than it can process.
-        Note that this method is not intended for window control.  The
-        peer that receives a request to stop sending content should
-        finish sending the current content, if any, and then wait
-        until it receives a Flow restart method.
-
-        RULE:
-
-            When a new channel is opened, it is active.  Some
-            applications assume that channels are inactive until
-            started.  To emulate this behaviour a client MAY open the
-            channel, then pause it.
-
-        RULE:
-
-            When sending content data in multiple frames, a peer
-            SHOULD monitor the channel for incoming methods and
-            respond to a Channel.Flow as rapidly as possible.
-
-        RULE:
-
-            A peer MAY use the Channel.Flow method to throttle
-            incoming content data for internal reasons, for example,
-            when exchangeing data over a slower connection.
-
-        RULE:
-
-            The peer that requests a Channel.Flow method MAY
-            disconnect and/or ban a peer that does not respect the
-            request.
-
-        PARAMETERS:
-            active: boolean
-
-                start/stop content frames
-
-                If True, the peer starts sending content frames.  If
-                False, the peer stops sending content frames.
-
-        """
-        args = AMQPWriter()
-        args.write_bit(active)
-        self._send_method((20, 20), args)
-        return self.wait(allowed_methods=[
-            (20, 21),  # Channel.flow_ok
-        ])
-
-    def _flow(self, args):
-        """Enable/disable flow from peer
-
-        This method asks the peer to pause or restart the flow of
-        content data. This is a simple flow-control mechanism that a
-        peer can use to avoid oveflowing its queues or otherwise
-        finding itself receiving more messages than it can process.
-        Note that this method is not intended for window control.  The
-        peer that receives a request to stop sending content should
-        finish sending the current content, if any, and then wait
-        until it receives a Flow restart method.
-
-        RULE:
-
-            When a new channel is opened, it is active.  Some
-            applications assume that channels are inactive until
-            started.  To emulate this behaviour a client MAY open the
-            channel, then pause it.
-
-        RULE:
-
-            When sending content data in multiple frames, a peer
-            SHOULD monitor the channel for incoming methods and
-            respond to a Channel.Flow as rapidly as possible.
-
-        RULE:
-
-            A peer MAY use the Channel.Flow method to throttle
-            incoming content data for internal reasons, for example,
-            when exchangeing data over a slower connection.
-
-        RULE:
-
-            The peer that requests a Channel.Flow method MAY
-            disconnect and/or ban a peer that does not respect the
-            request.
-
-        PARAMETERS:
-            active: boolean
-
-                start/stop content frames
-
-                If True, the peer starts sending content frames.  If
-                False, the peer stops sending content frames.
-
-        """
-        self.active = args.read_bit()
-        self._x_flow_ok(self.active)
-
-    def _x_flow_ok(self, active):
-        """Confirm a flow method
-
-        Confirms to the peer that a flow command was received and
-        processed.
-
-        PARAMETERS:
-            active: boolean
-
-                current flow setting
-
-                Confirms the setting of the processed flow method:
-                True means the peer will start sending or continue
-                to send content frames; False means it will not.
-
-        """
-        args = AMQPWriter()
-        args.write_bit(active)
-        self._send_method((20, 21), args)
-
-    def _flow_ok(self, args):
-        """Confirm a flow method
-
-        Confirms to the peer that a flow command was received and
-        processed.
-
-        PARAMETERS:
-            active: boolean
-
-                current flow setting
-
-                Confirms the setting of the processed flow method:
-                True means the peer will start sending or continue
-                to send content frames; False means it will not.
-
-        """
-        return args.read_bit()
-
-    def _x_open(self):
-        """Open a channel for use
-
-        This method opens a virtual connection (a channel).
-
-        RULE:
-
-            This method MUST NOT be called when the channel is already
-            open.
-
-        PARAMETERS:
-            out_of_band: shortstr (DEPRECATED)
-
-                out-of-band settings
-
-                Configures out-of-band transfers on this channel.  The
-                syntax and meaning of this field will be formally
-                defined at a later date.
-
-        """
-        if self.is_open:
-            return
-
-        args = AMQPWriter()
-        args.write_shortstr('')  # out_of_band: deprecated
-        self._send_method((20, 10), args)
-        return self.wait(allowed_methods=[
-            (20, 11),  # Channel.open_ok
-        ])
-
-    def _open_ok(self, args):
-        """Signal that the channel is ready
-
-        This method signals to the client that the channel is ready
-        for use.
-
-        """
-        self.is_open = True
-        AMQP_LOGGER.debug('Channel open')
-
-    #############
-    #
-    #  Exchange
-    #
-    #
-    # work with exchanges
-    #
-    # Exchanges match and distribute messages across queues.
-    # Exchanges can be configured in the server or created at runtime.
-    #
-    # GRAMMAR::
-    #
-    #     exchange            = C:DECLARE  S:DECLARE-OK
-    #                         / C:DELETE   S:DELETE-OK
-    #
-    # RULE:
-    #
-    #     The server MUST implement the direct and fanout exchange
-    #     types, and predeclare the corresponding exchanges named
-    #     amq.direct and amq.fanout in each virtual host. The server
-    #     MUST also predeclare a direct exchange to act as the default
-    #     exchange for content Publish methods and for default queue
-    #     bindings.
-    #
-    # RULE:
-    #
-    #     The server SHOULD implement the topic exchange type, and
-    #     predeclare the corresponding exchange named amq.topic in
-    #     each virtual host.
-    #
-    # RULE:
-    #
-    #     The server MAY implement the system exchange type, and
-    #     predeclare the corresponding exchanges named amq.system in
-    #     each virtual host. If the client attempts to bind a queue to
-    #     the system exchange, the server MUST raise a connection
-    #     exception with reply code 507 (not allowed).
-    #
-
-    def exchange_declare(self, exchange, type, passive=False, durable=False,
-                         auto_delete=True, nowait=False, arguments=None):
-        """Declare exchange, create if needed
-
-        This method creates an exchange if it does not already exist,
-        and if the exchange exists, verifies that it is of the correct
-        and expected class.
-
-        RULE:
-
-            The server SHOULD support a minimum of 16 exchanges per
-            virtual host and ideally, impose no limit except as
-            defined by available resources.
-
-        PARAMETERS:
-            exchange: shortstr
-
-                RULE:
-
-                    Exchange names starting with "amq." are reserved
-                    for predeclared and standardised exchanges.  If
-                    the client attempts to create an exchange starting
-                    with "amq.", the server MUST raise a channel
-                    exception with reply code 403 (access refused).
-
-            type: shortstr
-
-                exchange type
-
-                Each exchange belongs to one of a set of exchange
-                types implemented by the server.  The exchange types
-                define the functionality of the exchange - i.e. how
-                messages are routed through it.  It is not valid or
-                meaningful to attempt to change the type of an
-                existing exchange.
-
-                RULE:
-
-                    If the exchange already exists with a different
-                    type, the server MUST raise a connection exception
-                    with a reply code 507 (not allowed).
-
-                RULE:
-
-                    If the server does not support the requested
-                    exchange type it MUST raise a connection exception
-                    with a reply code 503 (command invalid).
-
-            passive: boolean
-
-                do not create exchange
-
-                If set, the server will not create the exchange.  The
-                client can use this to check whether an exchange
-                exists without modifying the server state.
-
-                RULE:
-
-                    If set, and the exchange does not already exist,
-                    the server MUST raise a channel exception with
-                    reply code 404 (not found).
-
-            durable: boolean
-
-                request a durable exchange
-
-                If set when creating a new exchange, the exchange will
-                be marked as durable.  Durable exchanges remain active
-                when a server restarts. Non-durable exchanges
-                (transient exchanges) are purged if/when a server
-                restarts.
-
-                RULE:
-
-                    The server MUST support both durable and transient
-                    exchanges.
-
-                RULE:
-
-                    The server MUST ignore the durable field if the
-                    exchange already exists.
-
-            auto_delete: boolean
-
-                auto-delete when unused
-
-                If set, the exchange is deleted when all queues have
-                finished using it.
-
-                RULE:
-
-                    The server SHOULD allow for a reasonable delay
-                    between the point when it determines that an
-                    exchange is not being used (or no longer used),
-                    and the point when it deletes the exchange.  At
-                    the least it must allow a client to create an
-                    exchange and then bind a queue to it, with a small
-                    but non-zero delay between these two actions.
-
-                RULE:
-
-                    The server MUST ignore the auto-delete field if
-                    the exchange already exists.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-            arguments: table
-
-                arguments for declaration
-
-                A set of arguments for the declaration. The syntax and
-                semantics of these arguments depends on the server
-                implementation.  This field is ignored if passive is
-                True.
-
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(exchange)
-        args.write_shortstr(type)
-        args.write_bit(passive)
-        args.write_bit(durable)
-        args.write_bit(auto_delete)
-        args.write_bit(False)  # internal: deprecated
-        args.write_bit(nowait)
-        args.write_table(arguments)
-        self._send_method((40, 10), args)
-
-        if auto_delete:
-            warn(VDeprecationWarning(EXCHANGE_AUTODELETE_DEPRECATED))
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (40, 11),  # Channel.exchange_declare_ok
-            ])
-
-    def _exchange_declare_ok(self, args):
-        """Confirms an exchange declaration
-
-        This method confirms a Declare method and confirms the name of
-        the exchange, essential for automatically-named exchanges.
-
-        """
-        pass
-
-    def exchange_delete(self, exchange, if_unused=False, nowait=False):
-        """Delete an exchange
-
-        This method deletes an exchange.  When an exchange is deleted
-        all queue bindings on the exchange are cancelled.
-
-        PARAMETERS:
-            exchange: shortstr
-
-                RULE:
-
-                    The exchange MUST exist. Attempting to delete a
-                    non-existing exchange causes a channel exception.
-
-            if_unused: boolean
-
-                delete only if unused
-
-                If set, the server will only delete the exchange if it
-                has no queue bindings. If the exchange has queue
-                bindings the server does not delete it but raises a
-                channel exception instead.
-
-                RULE:
-
-                    If set, the server SHOULD delete the exchange but
-                    only if it has no queue bindings.
-
-                RULE:
-
-                    If set, the server SHOULD raise a channel
-                    exception if the exchange is in use.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(exchange)
-        args.write_bit(if_unused)
-        args.write_bit(nowait)
-        self._send_method((40, 20), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (40, 21),  # Channel.exchange_delete_ok
-            ])
-
-    def _exchange_delete_ok(self, args):
-        """Confirm deletion of an exchange
-
-        This method confirms the deletion of an exchange.
-
-        """
-        pass
-
-    def exchange_bind(self, destination, source='', routing_key='',
-                      nowait=False, arguments=None):
-        """This method binds an exchange to an exchange.
-
-        RULE:
-
-            A server MUST allow and ignore duplicate bindings - that
-            is, two or more bind methods for a specific exchanges,
-            with identical arguments - without treating these as an
-            error.
-
-        RULE:
-
-            A server MUST allow cycles of exchange bindings to be
-            created including allowing an exchange to be bound to
-            itself.
-
-        RULE:
-
-            A server MUST not deliver the same message more than once
-            to a destination exchange, even if the topology of
-            exchanges and bindings results in multiple (even infinite)
-            routes to that exchange.
-
-        PARAMETERS:
-            reserved-1: short
-
-            destination: shortstr
-
-                Specifies the name of the destination exchange to
-                bind.
-
-                RULE:
-
-                    A client MUST NOT be allowed to bind a non-
-                    existent destination exchange.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to
-                    mean the default exchange.
-
-            source: shortstr
-
-                Specifies the name of the source exchange to bind.
-
-                RULE:
-
-                    A client MUST NOT be allowed to bind a non-
-                    existent source exchange.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to
-                    mean the default exchange.
-
-            routing-key: shortstr
-
-                Specifies the routing key for the binding. The routing
-                key is used for routing messages depending on the
-                exchange configuration. Not all exchanges use a
-                routing key - refer to the specific exchange
-                documentation.
-
-            no-wait: bit
-
-            arguments: table
-
-                A set of arguments for the binding. The syntax and
-                semantics of these arguments depends on the exchange
-                class.
-
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(destination)
-        args.write_shortstr(source)
-        args.write_shortstr(routing_key)
-        args.write_bit(nowait)
-        args.write_table(arguments)
-        self._send_method((40, 30), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (40, 31),  # Channel.exchange_bind_ok
-            ])
-
-    def exchange_unbind(self, destination, source='', routing_key='',
-                        nowait=False, arguments=None):
-        """This method unbinds an exchange from an exchange.
-
-        RULE:
-
-            If a unbind fails, the server MUST raise a connection
-            exception.
-
-        PARAMETERS:
-            reserved-1: short
-
-            destination: shortstr
-
-                Specifies the name of the destination exchange to
-                unbind.
-
-                RULE:
-
-                    The client MUST NOT attempt to unbind an exchange
-                    that does not exist from an exchange.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to
-                    mean the default exchange.
-
-            source: shortstr
-
-                Specifies the name of the source exchange to unbind.
-
-                RULE:
-
-                    The client MUST NOT attempt to unbind an exchange
-                    from an exchange that does not exist.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to
-                    mean the default exchange.
-
-            routing-key: shortstr
-
-                Specifies the routing key of the binding to unbind.
-
-            no-wait: bit
-
-            arguments: table
-
-                Specifies the arguments of the binding to unbind.
-
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(destination)
-        args.write_shortstr(source)
-        args.write_shortstr(routing_key)
-        args.write_bit(nowait)
-        args.write_table(arguments)
-        self._send_method((40, 40), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (40, 51),  # Channel.exchange_unbind_ok
-            ])
-
-    def _exchange_bind_ok(self, args):
-        """Confirm bind successful
-
-        This method confirms that the bind was successful.
-
-        """
-        pass
-
-    def _exchange_unbind_ok(self, args):
-        """Confirm unbind successful
-
-        This method confirms that the unbind was successful.
-
-        """
-        pass
-
-    #############
-    #
-    #  Queue
-    #
-    #
-    # work with queues
-    #
-    # Queues store and forward messages.  Queues can be configured in
-    # the server or created at runtime.  Queues must be attached to at
-    # least one exchange in order to receive messages from publishers.
-    #
-    # GRAMMAR::
-    #
-    #     queue               = C:DECLARE  S:DECLARE-OK
-    #                         / C:BIND     S:BIND-OK
-    #                         / C:PURGE    S:PURGE-OK
-    #                         / C:DELETE   S:DELETE-OK
-    #
-    # RULE:
-    #
-    #     A server MUST allow any content class to be sent to any
-    #     queue, in any mix, and queue and delivery these content
-    #     classes independently. Note that all methods that fetch
-    #     content off queues are specific to a given content class.
-    #
-
-    def queue_bind(self, queue, exchange='', routing_key='',
-                   nowait=False, arguments=None):
-        """Bind queue to an exchange
-
-        This method binds a queue to an exchange.  Until a queue is
-        bound it will not receive any messages.  In a classic
-        messaging model, store-and-forward queues are bound to a dest
-        exchange and subscription queues are bound to a dest_wild
-        exchange.
-
-        RULE:
-
-            A server MUST allow ignore duplicate bindings - that is,
-            two or more bind methods for a specific queue, with
-            identical arguments - without treating these as an error.
-
-        RULE:
-
-            If a bind fails, the server MUST raise a connection
-            exception.
-
-        RULE:
-
-            The server MUST NOT allow a durable queue to bind to a
-            transient exchange. If the client attempts this the server
-            MUST raise a channel exception.
-
-        RULE:
-
-            Bindings for durable queues are automatically durable and
-            the server SHOULD restore such bindings after a server
-            restart.
-
-        RULE:
-
-            The server SHOULD support at least 4 bindings per queue,
-            and ideally, impose no limit except as defined by
-            available resources.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to bind.  If the queue
-                name is empty, refers to the current queue for the
-                channel, which is the last declared queue.
-
-                RULE:
-
-                    If the client did not previously declare a queue,
-                    and the queue name in this method is empty, the
-                    server MUST raise a connection exception with
-                    reply code 530 (not allowed).
-
-                RULE:
-
-                    If the queue does not exist the server MUST raise
-                    a channel exception with reply code 404 (not
-                    found).
-
-            exchange: shortstr
-
-                The name of the exchange to bind to.
-
-                RULE:
-
-                    If the exchange does not exist the server MUST
-                    raise a channel exception with reply code 404 (not
-                    found).
-
-            routing_key: shortstr
-
-                message routing key
-
-                Specifies the routing key for the binding.  The
-                routing key is used for routing messages depending on
-                the exchange configuration. Not all exchanges use a
-                routing key - refer to the specific exchange
-                documentation.  If the routing key is empty and the
-                queue name is empty, the routing key will be the
-                current queue for the channel, which is the last
-                declared queue.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-            arguments: table
-
-                arguments for binding
-
-                A set of arguments for the binding.  The syntax and
-                semantics of these arguments depends on the exchange
-                class.
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_shortstr(exchange)
-        args.write_shortstr(routing_key)
-        args.write_bit(nowait)
-        args.write_table(arguments)
-        self._send_method((50, 20), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (50, 21),  # Channel.queue_bind_ok
-            ])
-
-    def _queue_bind_ok(self, args):
-        """Confirm bind successful
-
-        This method confirms that the bind was successful.
-
-        """
-        pass
-
-    def queue_unbind(self, queue, exchange, routing_key='',
-                     nowait=False, arguments=None):
-        """Unbind a queue from an exchange
-
-        This method unbinds a queue from an exchange.
-
-        RULE:
-
-            If a unbind fails, the server MUST raise a connection exception.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to unbind.
-
-                RULE:
-
-                    The client MUST either specify a queue name or have
-                    previously declared a queue on the same channel
-
-                RULE:
-
-                    The client MUST NOT attempt to unbind a queue that
-                    does not exist.
-
-            exchange: shortstr
-
-                The name of the exchange to unbind from.
-
-                RULE:
-
-                    The client MUST NOT attempt to unbind a queue from an
-                    exchange that does not exist.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to mean
-                    the default exchange.
-
-            routing_key: shortstr
-
-                routing key of binding
-
-                Specifies the routing key of the binding to unbind.
-
-            arguments: table
-
-                arguments of binding
-
-                Specifies the arguments of the binding to unbind.
-
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_shortstr(exchange)
-        args.write_shortstr(routing_key)
-        args.write_table(arguments)
-        self._send_method((50, 50), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (50, 51),  # Channel.queue_unbind_ok
-            ])
-
-    def _queue_unbind_ok(self, args):
-        """Confirm unbind successful
-
-        This method confirms that the unbind was successful.
-
-        """
-        pass
-
-    def queue_declare(self, queue='', passive=False, durable=False,
-                      exclusive=False, auto_delete=True, nowait=False,
-                      arguments=None):
-        """Declare queue, create if needed
-
-        This method creates or checks a queue.  When creating a new
-        queue the client can specify various properties that control
-        the durability of the queue and its contents, and the level of
-        sharing for the queue.
-
-        RULE:
-
-            The server MUST create a default binding for a newly-
-            created queue to the default exchange, which is an
-            exchange of type 'direct'.
-
-        RULE:
-
-            The server SHOULD support a minimum of 256 queues per
-            virtual host and ideally, impose no limit except as
-            defined by available resources.
-
-        PARAMETERS:
-            queue: shortstr
-
-                RULE:
-
-                    The queue name MAY be empty, in which case the
-                    server MUST create a new queue with a unique
-                    generated name and return this to the client in
-                    the Declare-Ok method.
-
-                RULE:
-
-                    Queue names starting with "amq." are reserved for
-                    predeclared and standardised server queues.  If
-                    the queue name starts with "amq." and the passive
-                    option is False, the server MUST raise a connection
-                    exception with reply code 403 (access refused).
-
-            passive: boolean
-
-                do not create queue
-
-                If set, the server will not create the queue.  The
-                client can use this to check whether a queue exists
-                without modifying the server state.
-
-                RULE:
-
-                    If set, and the queue does not already exist, the
-                    server MUST respond with a reply code 404 (not
-                    found) and raise a channel exception.
-
-            durable: boolean
-
-                request a durable queue
-
-                If set when creating a new queue, the queue will be
-                marked as durable.  Durable queues remain active when
-                a server restarts. Non-durable queues (transient
-                queues) are purged if/when a server restarts.  Note
-                that durable queues do not necessarily hold persistent
-                messages, although it does not make sense to send
-                persistent messages to a transient queue.
-
-                RULE:
-
-                    The server MUST recreate the durable queue after a
-                    restart.
-
-                RULE:
-
-                    The server MUST support both durable and transient
-                    queues.
-
-                RULE:
-
-                    The server MUST ignore the durable field if the
-                    queue already exists.
-
-            exclusive: boolean
-
-                request an exclusive queue
-
-                Exclusive queues may only be consumed from by the
-                current connection. Setting the 'exclusive' flag
-                always implies 'auto-delete'.
-
-                RULE:
-
-                    The server MUST support both exclusive (private)
-                    and non-exclusive (shared) queues.
-
-                RULE:
-
-                    The server MUST raise a channel exception if
-                    'exclusive' is specified and the queue already
-                    exists and is owned by a different connection.
-
-            auto_delete: boolean
-
-                auto-delete queue when unused
-
-                If set, the queue is deleted when all consumers have
-                finished using it. Last consumer can be cancelled
-                either explicitly or because its channel is closed. If
-                there was no consumer ever on the queue, it won't be
-                deleted.
-
-                RULE:
-
-                    The server SHOULD allow for a reasonable delay
-                    between the point when it determines that a queue
-                    is not being used (or no longer used), and the
-                    point when it deletes the queue.  At the least it
-                    must allow a client to create a queue and then
-                    create a consumer to read from it, with a small
-                    but non-zero delay between these two actions.  The
-                    server should equally allow for clients that may
-                    be disconnected prematurely, and wish to re-
-                    consume from the same queue without losing
-                    messages.  We would recommend a configurable
-                    timeout, with a suitable default value being one
-                    minute.
-
-                RULE:
-
-                    The server MUST ignore the auto-delete field if
-                    the queue already exists.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-            arguments: table
-
-                arguments for declaration
-
-                A set of arguments for the declaration. The syntax and
-                semantics of these arguments depends on the server
-                implementation.  This field is ignored if passive is
-                True.
-
-        Returns a tuple containing 3 items:
-            the name of the queue (essential for automatically-named queues)
-            message count
-            consumer count
-
-        """
-        arguments = {} if arguments is None else arguments
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_bit(passive)
-        args.write_bit(durable)
-        args.write_bit(exclusive)
-        args.write_bit(auto_delete)
-        args.write_bit(nowait)
-        args.write_table(arguments)
-        self._send_method((50, 10), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (50, 11),  # Channel.queue_declare_ok
-            ])
-
-    def _queue_declare_ok(self, args):
-        """Confirms a queue definition
-
-        This method confirms a Declare method and confirms the name of
-        the queue, essential for automatically-named queues.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Reports the name of the queue. If the server generated
-                a queue name, this field contains that name.
-
-            message_count: long
-
-                number of messages in queue
-
-                Reports the number of messages in the queue, which
-                will be zero for newly-created queues.
-
-            consumer_count: long
-
-                number of consumers
-
-                Reports the number of active consumers for the queue.
-                Note that consumers can suspend activity
-                (Channel.Flow) in which case they do not appear in
-                this count.
-
-        """
-        return queue_declare_ok_t(
-            args.read_shortstr(),
-            args.read_long(),
-            args.read_long(),
-        )
-
-    def queue_delete(self, queue='',
-                     if_unused=False, if_empty=False, nowait=False):
-        """Delete a queue
-
-        This method deletes a queue.  When a queue is deleted any
-        pending messages are sent to a dead-letter queue if this is
-        defined in the server configuration, and all consumers on the
-        queue are cancelled.
-
-        RULE:
-
-            The server SHOULD use a dead-letter queue to hold messages
-            that were pending on a deleted queue, and MAY provide
-            facilities for a system administrator to move these
-            messages back to an active queue.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to delete. If the
-                queue name is empty, refers to the current queue for
-                the channel, which is the last declared queue.
-
-                RULE:
-
-                    If the client did not previously declare a queue,
-                    and the queue name in this method is empty, the
-                    server MUST raise a connection exception with
-                    reply code 530 (not allowed).
-
-                RULE:
-
-                    The queue must exist. Attempting to delete a non-
-                    existing queue causes a channel exception.
-
-            if_unused: boolean
-
-                delete only if unused
-
-                If set, the server will only delete the queue if it
-                has no consumers. If the queue has consumers the
-                server does does not delete it but raises a channel
-                exception instead.
-
-                RULE:
-
-                    The server MUST respect the if-unused flag when
-                    deleting a queue.
-
-            if_empty: boolean
-
-                delete only if empty
-
-                If set, the server will only delete the queue if it
-                has no messages. If the queue is not empty the server
-                raises a channel exception.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_bit(if_unused)
-        args.write_bit(if_empty)
-        args.write_bit(nowait)
-        self._send_method((50, 40), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (50, 41),  # Channel.queue_delete_ok
-            ])
-
-    def _queue_delete_ok(self, args):
-        """Confirm deletion of a queue
-
-        This method confirms the deletion of a queue.
-
-        PARAMETERS:
-            message_count: long
-
-                number of messages purged
-
-                Reports the number of messages purged.
-
-        """
-        return args.read_long()
-
-    def queue_purge(self, queue='', nowait=False):
-        """Purge a queue
-
-        This method removes all messages from a queue.  It does not
-        cancel consumers.  Purged messages are deleted without any
-        formal "undo" mechanism.
-
-        RULE:
-
-            A call to purge MUST result in an empty queue.
-
-        RULE:
-
-            On transacted channels the server MUST not purge messages
-            that have already been sent to a client but not yet
-            acknowledged.
-
-        RULE:
-
-            The server MAY implement a purge queue or log that allows
-            system administrators to recover accidentally-purged
-            messages.  The server SHOULD NOT keep purged messages in
-            the same storage spaces as the live messages since the
-            volumes of purged messages may get very large.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to purge.  If the
-                queue name is empty, refers to the current queue for
-                the channel, which is the last declared queue.
-
-                RULE:
-
-                    If the client did not previously declare a queue,
-                    and the queue name in this method is empty, the
-                    server MUST raise a connection exception with
-                    reply code 530 (not allowed).
-
-                RULE:
-
-                    The queue must exist. Attempting to purge a non-
-                    existing queue causes a channel exception.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-        if nowait is False, returns a message_count
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_bit(nowait)
-        self._send_method((50, 30), args)
-
-        if not nowait:
-            return self.wait(allowed_methods=[
-                (50, 31),  # Channel.queue_purge_ok
-            ])
-
-    def _queue_purge_ok(self, args):
-        """Confirms a queue purge
-
-        This method confirms the purge of a queue.
-
-        PARAMETERS:
-            message_count: long
-
-                number of messages purged
-
-                Reports the number of messages purged.
-
-        """
-        return args.read_long()
-
-    #############
-    #
-    #  Basic
-    #
-    #
-    # work with basic content
-    #
-    # The Basic class provides methods that support an industry-
-    # standard messaging model.
-    #
-    # GRAMMAR::
-    #
-    #     basic               = C:QOS S:QOS-OK
-    #                         / C:CONSUME S:CONSUME-OK
-    #                         / C:CANCEL S:CANCEL-OK
-    #                         / C:PUBLISH content
-    #                         / S:RETURN content
-    #                         / S:DELIVER content
-    #                         / C:GET ( S:GET-OK content / S:GET-EMPTY )
-    #                         / C:ACK
-    #                         / C:REJECT
-    #
-    # RULE:
-    #
-    #     The server SHOULD respect the persistent property of basic
-    #     messages and SHOULD make a best-effort to hold persistent
-    #     basic messages on a reliable storage mechanism.
-    #
-    # RULE:
-    #
-    #     The server MUST NOT discard a persistent basic message in
-    #     case of a queue overflow. The server MAY use the
-    #     Channel.Flow method to slow or stop a basic message
-    #     publisher when necessary.
-    #
-    # RULE:
-    #
-    #     The server MAY overflow non-persistent basic messages to
-    #     persistent storage and MAY discard or dead-letter non-
-    #     persistent basic messages on a priority basis if the queue
-    #     size exceeds some configured limit.
-    #
-    # RULE:
-    #
-    #     The server MUST implement at least 2 priority levels for
-    #     basic messages, where priorities 0-4 and 5-9 are treated as
-    #     two distinct levels. The server MAY implement up to 10
-    #     priority levels.
-    #
-    # RULE:
-    #
-    #     The server MUST deliver messages of the same priority in
-    #     order irrespective of their individual persistence.
-    #
-    # RULE:
-    #
-    #     The server MUST support both automatic and explicit
-    #     acknowledgements on Basic content.
-    #
-
-    def basic_ack(self, delivery_tag, multiple=False):
-        """Acknowledge one or more messages
-
-        This method acknowledges one or more messages delivered via
-        the Deliver or Get-Ok methods.  The client can ask to confirm
-        a single message or a set of messages up to and including a
-        specific message.
-
-        PARAMETERS:
-            delivery_tag: longlong
-
-                server-assigned delivery tag
-
-                The server-assigned and channel-specific delivery tag
-
-                RULE:
-
-                    The delivery tag is valid only within the channel
-                    from which the message was received.  I.e. a client
-                    MUST NOT receive a message on one channel and then
-                    acknowledge it on another.
-
-                RULE:
-
-                    The server MUST NOT use a zero value for delivery
-                    tags.  Zero is reserved for client use, meaning "all
-                    messages so far received".
-
-            multiple: boolean
-
-                acknowledge multiple messages
-
-                If set to True, the delivery tag is treated as "up to
-                and including", so that the client can acknowledge
-                multiple messages with a single method.  If set to
-                False, the delivery tag refers to a single message.
-                If the multiple field is True, and the delivery tag
-                is zero, tells the server to acknowledge all
-                outstanding mesages.
-
-                RULE:
-
-                    The server MUST validate that a non-zero delivery-
-                    tag refers to an delivered message, and raise a
-                    channel exception if this is not the case.
-
-        """
-        args = AMQPWriter()
-        args.write_longlong(delivery_tag)
-        args.write_bit(multiple)
-        self._send_method((60, 80), args)
-
-    def basic_cancel(self, consumer_tag, nowait=False):
-        """End a queue consumer
-
-        This method cancels a consumer. This does not affect already
-        delivered messages, but it does mean the server will not send
-        any more messages for that consumer.  The client may receive
-        an abitrary number of messages in between sending the cancel
-        method and receiving the cancel-ok reply.
-
-        RULE:
-
-            If the queue no longer exists when the client sends a
-            cancel command, or the consumer has been cancelled for
-            other reasons, this command has no effect.
-
-        PARAMETERS:
-            consumer_tag: shortstr
-
-                consumer tag
-
-                Identifier for the consumer, valid within the current
-                connection.
-
-                RULE:
-
-                    The consumer tag is valid only within the channel
-                    from which the consumer was created. I.e. a client
-                    MUST NOT create a consumer in one channel and then
-                    use it in another.
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-        """
-        if self.connection is not None:
-            self.no_ack_consumers.discard(consumer_tag)
-            args = AMQPWriter()
-            args.write_shortstr(consumer_tag)
-            args.write_bit(nowait)
-            self._send_method((60, 30), args)
-            return self.wait(allowed_methods=[
-                (60, 31),  # Channel.basic_cancel_ok
-            ])
-
-    def _basic_cancel_notify(self, args):
-        """Consumer cancelled by server.
-
-        Most likely the queue was deleted.
-
-        """
-        consumer_tag = args.read_shortstr()
-        callback = self._on_cancel(consumer_tag)
-        if callback:
-            callback(consumer_tag)
-        else:
-            raise ConsumerCancelled(consumer_tag, (60, 30))
-
-    def _basic_cancel_ok(self, args):
-        """Confirm a cancelled consumer
-
-        This method confirms that the cancellation was completed.
-
-        PARAMETERS:
-            consumer_tag: shortstr
-
-                consumer tag
-
-                Identifier for the consumer, valid within the current
-                connection.
-
-                RULE:
-
-                    The consumer tag is valid only within the channel
-                    from which the consumer was created. I.e. a client
-                    MUST NOT create a consumer in one channel and then
-                    use it in another.
-
-        """
-        consumer_tag = args.read_shortstr()
-        self._on_cancel(consumer_tag)
-
-    def _on_cancel(self, consumer_tag):
-        self.callbacks.pop(consumer_tag, None)
-        return self.cancel_callbacks.pop(consumer_tag, None)
-
-    def basic_consume(self, queue='', consumer_tag='', no_local=False,
-                      no_ack=False, exclusive=False, nowait=False,
-                      callback=None, arguments=None, on_cancel=None):
-        """Start a queue consumer
-
-        This method asks the server to start a "consumer", which is a
-        transient request for messages from a specific queue.
-        Consumers last as long as the channel they were created on, or
-        until the client cancels them.
-
-        RULE:
-
-            The server SHOULD support at least 16 consumers per queue,
-            unless the queue was declared as private, and ideally,
-            impose no limit except as defined by available resources.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to consume from.  If
-                the queue name is null, refers to the current queue
-                for the channel, which is the last declared queue.
-
-                RULE:
-
-                    If the client did not previously declare a queue,
-                    and the queue name in this method is empty, the
-                    server MUST raise a connection exception with
-                    reply code 530 (not allowed).
-
-            consumer_tag: shortstr
-
-                Specifies the identifier for the consumer. The
-                consumer tag is local to a connection, so two clients
-                can use the same consumer tags. If this field is empty
-                the server will generate a unique tag.
-
-                RULE:
-
-                    The tag MUST NOT refer to an existing consumer. If
-                    the client attempts to create two consumers with
-                    the same non-empty tag the server MUST raise a
-                    connection exception with reply code 530 (not
-                    allowed).
-
-            no_local: boolean
-
-                do not deliver own messages
-
-                If the no-local field is set the server will not send
-                messages to the client that published them.
-
-            no_ack: boolean
-
-                no acknowledgement needed
-
-                If this field is set the server does not expect
-                acknowledgments for messages.  That is, when a message
-                is delivered to the client the server automatically and
-                silently acknowledges it on behalf of the client.  This
-                functionality increases performance but at the cost of
-                reliability.  Messages can get lost if a client dies
-                before it can deliver them to the application.
-
-            exclusive: boolean
-
-                request exclusive access
-
-                Request exclusive consumer access, meaning only this
-                consumer can access the queue.
-
-                RULE:
-
-                    If the server cannot grant exclusive access to the
-                    queue when asked, - because there are other
-                    consumers active - it MUST raise a channel
-                    exception with return code 403 (access refused).
-
-            nowait: boolean
-
-                do not send a reply method
-
-                If set, the server will not respond to the method. The
-                client should not wait for a reply method.  If the
-                server could not complete the method it will raise a
-                channel or connection exception.
-
-            callback: Python callable
-
-                function/method called with each delivered message
-
-                For each message delivered by the broker, the
-                callable will be called with a Message object
-                as the single argument.  If no callable is specified,
-                messages are quietly discarded, no_ack should probably
-                be set to True in that case.
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_shortstr(consumer_tag)
-        args.write_bit(no_local)
-        args.write_bit(no_ack)
-        args.write_bit(exclusive)
-        args.write_bit(nowait)
-        args.write_table(arguments or {})
-        self._send_method((60, 20), args)
-
-        if not nowait:
-            consumer_tag = self.wait(allowed_methods=[
-                (60, 21),  # Channel.basic_consume_ok
-            ])
-
-        self.callbacks[consumer_tag] = callback
-
-        if on_cancel:
-            self.cancel_callbacks[consumer_tag] = on_cancel
-        if no_ack:
-            self.no_ack_consumers.add(consumer_tag)
-
-        return consumer_tag
-
-    def _basic_consume_ok(self, args):
-        """Confirm a new consumer
-
-        The server provides the client with a consumer tag, which is
-        used by the client for methods called on the consumer at a
-        later stage.
-
-        PARAMETERS:
-            consumer_tag: shortstr
-
-                Holds the consumer tag specified by the client or
-                provided by the server.
-
-        """
-        return args.read_shortstr()
-
-    def _basic_deliver(self, args, msg):
-        """Notify the client of a consumer message
-
-        This method delivers a message to the client, via a consumer.
-        In the asynchronous message delivery model, the client starts
-        a consumer using the Consume method, then the server responds
-        with Deliver methods as and when messages arrive for that
-        consumer.
-
-        RULE:
-
-            The server SHOULD track the number of times a message has
-            been delivered to clients and when a message is
-            redelivered a certain number of times - e.g. 5 times -
-            without being acknowledged, the server SHOULD consider the
-            message to be unprocessable (possibly causing client
-            applications to abort), and move the message to a dead
-            letter queue.
-
-        PARAMETERS:
-            consumer_tag: shortstr
-
-                consumer tag
-
-                Identifier for the consumer, valid within the current
-                connection.
-
-                RULE:
-
-                    The consumer tag is valid only within the channel
-                    from which the consumer was created. I.e. a client
-                    MUST NOT create a consumer in one channel and then
-                    use it in another.
-
-            delivery_tag: longlong
-
-                server-assigned delivery tag
-
-                The server-assigned and channel-specific delivery tag
-
-                RULE:
-
-                    The delivery tag is valid only within the channel
-                    from which the message was received.  I.e. a client
-                    MUST NOT receive a message on one channel and then
-                    acknowledge it on another.
-
-                RULE:
-
-                    The server MUST NOT use a zero value for delivery
-                    tags.  Zero is reserved for client use, meaning "all
-                    messages so far received".
-
-            redelivered: boolean
-
-                message is being redelivered
-
-                This indicates that the message has been previously
-                delivered to this or another client.
-
-            exchange: shortstr
-
-                Specifies the name of the exchange that the message
-                was originally published to.
-
-            routing_key: shortstr
-
-                Message routing key
-
-                Specifies the routing key name specified when the
-                message was published.
-
-        """
-        consumer_tag = args.read_shortstr()
-        delivery_tag = args.read_longlong()
-        redelivered = args.read_bit()
-        exchange = args.read_shortstr()
-        routing_key = args.read_shortstr()
-
-        msg.channel = self
-        msg.delivery_info = {
-            'consumer_tag': consumer_tag,
-            'delivery_tag': delivery_tag,
-            'redelivered': redelivered,
-            'exchange': exchange,
-            'routing_key': routing_key,
-        }
-
-        try:
-            fun = self.callbacks[consumer_tag]
-        except KeyError:
-            pass
-        else:
-            fun(msg)
-
-    def basic_get(self, queue='', no_ack=False):
-        """Direct access to a queue
-
-        This method provides a direct access to the messages in a
-        queue using a synchronous dialogue that is designed for
-        specific types of application where synchronous functionality
-        is more important than performance.
-
-        PARAMETERS:
-            queue: shortstr
-
-                Specifies the name of the queue to consume from.  If
-                the queue name is null, refers to the current queue
-                for the channel, which is the last declared queue.
-
-                RULE:
-
-                    If the client did not previously declare a queue,
-                    and the queue name in this method is empty, the
-                    server MUST raise a connection exception with
-                    reply code 530 (not allowed).
-
-            no_ack: boolean
-
-                no acknowledgement needed
-
-                If this field is set the server does not expect
-                acknowledgments for messages.  That is, when a message
-                is delivered to the client the server automatically and
-                silently acknowledges it on behalf of the client.  This
-                functionality increases performance but at the cost of
-                reliability.  Messages can get lost if a client dies
-                before it can deliver them to the application.
-
-        Non-blocking, returns a message object, or None.
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(queue)
-        args.write_bit(no_ack)
-        self._send_method((60, 70), args)
-        return self.wait(allowed_methods=[
-            (60, 71),  # Channel.basic_get_ok
-            (60, 72),  # Channel.basic_get_empty
-        ])
-
-    def _basic_get_empty(self, args):
-        """Indicate no messages available
-
-        This method tells the client that the queue has no messages
-        available for the client.
-
-        PARAMETERS:
-            cluster_id: shortstr
-
-                Cluster id
-
-                For use by cluster applications, should not be used by
-                client applications.
-
-        """
-        cluster_id = args.read_shortstr()  # noqa
-
-    def _basic_get_ok(self, args, msg):
-        """Provide client with a message
-
-        This method delivers a message to the client following a get
-        method.  A message delivered by 'get-ok' must be acknowledged
-        unless the no-ack option was set in the get method.
-
-        PARAMETERS:
-            delivery_tag: longlong
-
-                server-assigned delivery tag
-
-                The server-assigned and channel-specific delivery tag
-
-                RULE:
-
-                    The delivery tag is valid only within the channel
-                    from which the message was received.  I.e. a client
-                    MUST NOT receive a message on one channel and then
-                    acknowledge it on another.
-
-                RULE:
-
-                    The server MUST NOT use a zero value for delivery
-                    tags.  Zero is reserved for client use, meaning "all
-                    messages so far received".
-
-            redelivered: boolean
-
-                message is being redelivered
-
-                This indicates that the message has been previously
-                delivered to this or another client.
-
-            exchange: shortstr
-
-                Specifies the name of the exchange that the message
-                was originally published to.  If empty, the message
-                was published to the default exchange.
-
-            routing_key: shortstr
-
-                Message routing key
-
-                Specifies the routing key name specified when the
-                message was published.
-
-            message_count: long
-
-                number of messages pending
-
-                This field reports the number of messages pending on
-                the queue, excluding the message being delivered.
-                Note that this figure is indicative, not reliable, and
-                can change arbitrarily as messages are added to the
-                queue and removed by other clients.
-
-        """
-        delivery_tag = args.read_longlong()
-        redelivered = args.read_bit()
-        exchange = args.read_shortstr()
-        routing_key = args.read_shortstr()
-        message_count = args.read_long()
-
-        msg.channel = self
-        msg.delivery_info = {
-            'delivery_tag': delivery_tag,
-            'redelivered': redelivered,
-            'exchange': exchange,
-            'routing_key': routing_key,
-            'message_count': message_count
-        }
-        return msg
-
-    def _basic_publish(self, msg, exchange='', routing_key='',
-                       mandatory=False, immediate=False):
-        """Publish a message
-
-        This method publishes a message to a specific exchange. The
-        message will be routed to queues as defined by the exchange
-        configuration and distributed to any active consumers when the
-        transaction, if any, is committed.
-
-        PARAMETERS:
-            exchange: shortstr
-
-                Specifies the name of the exchange to publish to.  The
-                exchange name can be empty, meaning the default
-                exchange.  If the exchange name is specified, and that
-                exchange does not exist, the server will raise a
-                channel exception.
-
-                RULE:
-
-                    The server MUST accept a blank exchange name to
-                    mean the default exchange.
-
-                RULE:
-
-                    The exchange MAY refuse basic content in which
-                    case it MUST raise a channel exception with reply
-                    code 540 (not implemented).
-
-            routing_key: shortstr
-
-                Message routing key
-
-                Specifies the routing key for the message.  The
-                routing key is used for routing messages depending on
-                the exchange configuration.
-
-            mandatory: boolean
-
-                indicate mandatory routing
-
-                This flag tells the server how to react if the message
-                cannot be routed to a queue.  If this flag is True, the
-                server will return an unroutable message with a Return
-                method.  If this flag is False, the server silently
-                drops the message.
-
-                RULE:
-
-                    The server SHOULD implement the mandatory flag.
-
-            immediate: boolean
-
-                request immediate delivery
-
-                This flag tells the server how to react if the message
-                cannot be routed to a queue consumer immediately.  If
-                this flag is set, the server will return an
-                undeliverable message with a Return method. If this
-                flag is zero, the server will queue the message, but
-                with no guarantee that it will ever be consumed.
-
-                RULE:
-
-                    The server SHOULD implement the immediate flag.
-
-        """
-        args = AMQPWriter()
-        args.write_short(0)
-        args.write_shortstr(exchange)
-        args.write_shortstr(routing_key)
-        args.write_bit(mandatory)
-        args.write_bit(immediate)
-
-        self._send_method((60, 40), args, msg)
-    basic_publish = _basic_publish
-
-    def basic_publish_confirm(self, *args, **kwargs):
-        if not self._confirm_selected:
-            self._confirm_selected = True
-            self.confirm_select()
-        ret = self._basic_publish(*args, **kwargs)
-        # Basic.Ack / Basic.Nack
-        self.wait([(60, 80), (60, 120)])
-        return ret
-
-    def basic_qos(self, prefetch_size, prefetch_count, a_global):
-        """Specify quality of service
-
-        This method requests a specific quality of service.  The QoS
-        can be specified for the current channel or for all channels
-        on the connection.  The particular properties and semantics of
-        a qos method always depend on the content class semantics.
-        Though the qos method could in principle apply to both peers,
-        it is currently meaningful only for the server.
-
-        PARAMETERS:
-            prefetch_size: long
-
-                prefetch window in octets
-
-                The client can request that messages be sent in
-                advance so that when the client finishes processing a
-                message, the following message is already held
-                locally, rather than needing to be sent down the
-                channel.  Prefetching gives a performance improvement.
-                This field specifies the prefetch window size in
-                octets.  The server will send a message in advance if
-                it is equal to or smaller in size than the available
-                prefetch size (and also falls into other prefetch
-                limits). May be set to zero, meaning "no specific
-                limit", although other prefetch limits may still
-                apply. The prefetch-size is ignored if the no-ack
-                option is set.
-
-                RULE:
-
-                    The server MUST ignore this setting when the
-                    client is not processing any messages - i.e. the
-                    prefetch size does not limit the transfer of
-                    single messages to a client, only the sending in
-                    advance of more messages while the client still
-                    has one or more unacknowledged messages.
-
-            prefetch_count: short
-
-                prefetch window in messages
-
-                Specifies a prefetch window in terms of whole
-                messages.  This field may be used in combination with
-                the prefetch-size field; a message will only be sent
-                in advance if both prefetch windows (and those at the
-                channel and connection level) allow it. The prefetch-
-                count is ignored if the no-ack option is set.
-
-                RULE:
-
-                    The server MAY send less data in advance than
-                    allowed by the client's specified prefetch windows
-                    but it MUST NOT send more.
-
-            a_global: boolean
-
-                apply to entire connection
-
-                By default the QoS settings apply to the current
-                channel only.  If this field is set, they are applied
-                to the entire connection.
-
-        """
-        args = AMQPWriter()
-        args.write_long(prefetch_size)
-        args.write_short(prefetch_count)
-        args.write_bit(a_global)
-        self._send_method((60, 10), args)
-        return self.wait(allowed_methods=[
-            (60, 11),  # Channel.basic_qos_ok
-        ])
-
-    def _basic_qos_ok(self, args):
-        """Confirm the requested qos
-
-        This method tells the client that the requested QoS levels
-        could be handled by the server.  The requested QoS applies to
-        all active consumers until a new QoS is defined.
-
-        """
-        pass
-
-    def basic_recover(self, requeue=False):
-        """Redeliver unacknowledged messages
-
-        This method asks the broker to redeliver all unacknowledged
-        messages on a specified channel. Zero or more messages may be
-        redelivered.  This method is only allowed on non-transacted
-        channels.
-
-        RULE:
-
-            The server MUST set the redelivered flag on all messages
-            that are resent.
-
-        RULE:
-
-            The server MUST raise a channel exception if this is
-            called on a transacted channel.
-
-        PARAMETERS:
-            requeue: boolean
-
-                requeue the message
-
-                If this field is False, the message will be redelivered
-                to the original recipient.  If this field is True, the
-                server will attempt to requeue the message,
-                potentially then delivering it to an alternative
-                subscriber.
-
-        """
-        args = AMQPWriter()
-        args.write_bit(requeue)
-        self._send_method((60, 110), args)
-
-    def basic_recover_async(self, requeue=False):
-        args = AMQPWriter()
-        args.write_bit(requeue)
-        self._send_method((60, 100), args)
-
-    def _basic_recover_ok(self, args):
-        """In 0-9-1 the deprecated recover solicits a response."""
-        pass
-
-    def basic_reject(self, delivery_tag, requeue):
-        """Reject an incoming message
-
-        This method allows a client to reject a message.  It can be
-        used to interrupt and cancel large incoming messages, or
-        return untreatable messages to their original queue.
-
-        RULE:
-
-            The server SHOULD be capable of accepting and process the
-            Reject method while sending message content with a Deliver
-            or Get-Ok method.  I.e. the server should read and process
-            incoming methods while sending output frames.  To cancel a
-            partially-send content, the server sends a content body
-            frame of size 1 (i.e. with no data except the frame-end
-            octet).
-
-        RULE:
-
-            The server SHOULD interpret this method as meaning that
-            the client is unable to process the message at this time.
-
-        RULE:
-
-            A client MUST NOT use this method as a means of selecting
-            messages to process.  A rejected message MAY be discarded
-            or dead-lettered, not necessarily passed to another
-            client.
-
-        PARAMETERS:
-            delivery_tag: longlong
-
-                server-assigned delivery tag
-
-                The server-assigned and channel-specific delivery tag
-
-                RULE:
-
-                    The delivery tag is valid only within the channel
-                    from which the message was received.  I.e. a client
-                    MUST NOT receive a message on one channel and then
-                    acknowledge it on another.
-
-                RULE:
-
-                    The server MUST NOT use a zero value for delivery
-                    tags.  Zero is reserved for client use, meaning "all
-                    messages so far received".
-
-            requeue: boolean
-
-                requeue the message
-
-                If this field is False, the message will be discarded.
-                If this field is True, the server will attempt to
-                requeue the message.
-
-                RULE:
-
-                    The server MUST NOT deliver the message to the
-                    same client within the context of the current
-                    channel.  The recommended strategy is to attempt
-                    to deliver the message to an alternative consumer,
-                    and if that is not possible, to move the message
-                    to a dead-letter queue.  The server MAY use more
-                    sophisticated tracking to hold the message on the
-                    queue and redeliver it to the same client at a
-                    later stage.
-
-        """
-        args = AMQPWriter()
-        args.write_longlong(delivery_tag)
-        args.write_bit(requeue)
-        self._send_method((60, 90), args)
-
-    def _basic_return(self, args, msg):
-        """Return a failed message
-
-        This method returns an undeliverable message that was
-        published with the "immediate" flag set, or an unroutable
-        message published with the "mandatory" flag set. The reply
-        code and text provide information about the reason that the
-        message was undeliverable.
-
-        PARAMETERS:
-            reply_code: short
-
-                The reply code. The AMQ reply codes are defined in AMQ
-                RFC 011.
-
-            reply_text: shortstr
-
-                The localised reply text.  This text can be logged as an
-                aid to resolving issues.
-
-            exchange: shortstr
-
-                Specifies the name of the exchange that the message
-                was originally published to.
-
-            routing_key: shortstr
-
-                Message routing key
-
-                Specifies the routing key name specified when the
-                message was published.
-
-        """
-        self.returned_messages.put(basic_return_t(
-            args.read_short(),
-            args.read_shortstr(),
-            args.read_shortstr(),
-            args.read_shortstr(),
-            msg,
-        ))
-
-    #############
-    #
-    #  Tx
-    #
-    #
-    # work with standard transactions
-    #
-    # Standard transactions provide so-called "1.5 phase commit".  We
-    # can ensure that work is never lost, but there is a chance of
-    # confirmations being lost, so that messages may be resent.
-    # Applications that use standard transactions must be able to
-    # detect and ignore duplicate messages.
-    #
-    # GRAMMAR::
-    #
-    #     tx                  = C:SELECT S:SELECT-OK
-    #                         / C:COMMIT S:COMMIT-OK
-    #                         / C:ROLLBACK S:ROLLBACK-OK
-    #
-    # RULE:
-    #
-    #     An client using standard transactions SHOULD be able to
-    #     track all messages received within a reasonable period, and
-    #     thus detect and reject duplicates of the same message. It
-    #     SHOULD NOT pass these to the application layer.
-    #
-    #
-
-    def tx_commit(self):
-        """Commit the current transaction
-
-        This method commits all messages published and acknowledged in
-        the current transaction.  A new transaction starts immediately
-        after a commit.
-
-        """
-        self._send_method((90, 20))
-        return self.wait(allowed_methods=[
-            (90, 21),  # Channel.tx_commit_ok
-        ])
-
-    def _tx_commit_ok(self, args):
-        """Confirm a successful commit
-
-        This method confirms to the client that the commit succeeded.
-        Note that if a commit fails, the server raises a channel
-        exception.
-
-        """
-        pass
-
-    def tx_rollback(self):
-        """Abandon the current transaction
-
-        This method abandons all messages published and acknowledged
-        in the current transaction.  A new transaction starts
-        immediately after a rollback.
-
-        """
-        self._send_method((90, 30))
-        return self.wait(allowed_methods=[
-            (90, 31),  # Channel.tx_rollback_ok
-        ])
-
-    def _tx_rollback_ok(self, args):
-        """Confirm a successful rollback
-
-        This method confirms to the client that the rollback
-        succeeded. Note that if an rollback fails, the server raises a
-        channel exception.
-
-        """
-        pass
-
-    def tx_select(self):
-        """Select standard transaction mode
-
-        This method sets the channel to use standard transactions.
-        The client must use this method at least once on a channel
-        before using the Commit or Rollback methods.
-
-        """
-        self._send_method((90, 10))
-        return self.wait(allowed_methods=[
-            (90, 11),  # Channel.tx_select_ok
-        ])
-
-    def _tx_select_ok(self, args):
-        """Confirm transaction mode
-
-        This method confirms to the client that the channel was
-        successfully set to use standard transactions.
-
-        """
-        pass
-
-    def confirm_select(self, nowait=False):
-        """Enables publisher confirms for this channel (an RabbitMQ
-        extension).
-
-        Can now be used if the channel is in transactional mode.
-
-        :param nowait:
-            If set, the server will not respond to the method.
-            The client should not wait for a reply method. If the
-            server could not complete the method it will raise a channel
-            or connection exception.
-
-        """
-        args = AMQPWriter()
-        args.write_bit(nowait)
-
-        self._send_method((85, 10), args)
-        if not nowait:
-            self.wait(allowed_methods=[
-                (85, 11),  # Confirm.select_ok
-            ])
-
-    def _confirm_select_ok(self, args):
-        """With this method the broker confirms to the client that
-        the channel is now using publisher confirms."""
-        pass
-
-    def _basic_ack_recv(self, args):
-        delivery_tag = args.read_longlong()
-        multiple = args.read_bit()
-        self._apply_callbacks('basic_ack', delivery_tag, multiple)
-
-    def _apply_callbacks(self, event, *args):
-        return [callback(*args) for callback in self.events[event]]
-
-    def _basic_nack(self, args):
-        delivery_tag = args.read_longlong()
-        multiple = args.read_bit()
-        requeue = args.read_bit()
-        if not self._apply_callbacks(
-                'basic_nack', delivery_tag, multiple, requeue):
-            raise NotConfirmed(delivery_tag, (60, 120), 'basic.nack')
-
-    _METHOD_MAP = {
-        (20, 11): _open_ok,
-        (20, 20): _flow,
-        (20, 21): _flow_ok,
-        (20, 40): _close,
-        (20, 41): _close_ok,
-        (40, 11): _exchange_declare_ok,
-        (40, 21): _exchange_delete_ok,
-        (40, 31): _exchange_bind_ok,
-        (40, 51): _exchange_unbind_ok,
-        (50, 11): _queue_declare_ok,
-        (50, 21): _queue_bind_ok,
-        (50, 31): _queue_purge_ok,
-        (50, 41): _queue_delete_ok,
-        (50, 51): _queue_unbind_ok,
-        (60, 11): _basic_qos_ok,
-        (60, 21): _basic_consume_ok,
-        (60, 30): _basic_cancel_notify,
-        (60, 31): _basic_cancel_ok,
-        (60, 50): _basic_return,
-        (60, 60): _basic_deliver,
-        (60, 71): _basic_get_ok,
-        (60, 72): _basic_get_empty,
-        (60, 80): _basic_ack_recv,
-        (60, 120): _basic_nack,
-        (60, 111): _basic_recover_ok,
-        (85, 11): _confirm_select_ok,
-        (90, 11): _tx_select_ok,
-        (90, 21): _tx_commit_ok,
-        (90, 31): _tx_rollback_ok,
-    }
-
-    _IMMEDIATE_METHODS = [
-        (60, 50),  # basic_return
-    ]
diff --git a/src/rez/vendor/amqp/connection.py b/src/rez/vendor/amqp/connection.py
deleted file mode 100644
index 6988f8570..000000000
--- a/src/rez/vendor/amqp/connection.py
+++ /dev/null
@@ -1,1008 +0,0 @@
-"""AMQP Connections"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-import logging
-import socket
-
-from array import array
-try:
-    from ssl import SSLError
-except ImportError:
-    class SSLError(Exception):  # noqa
-        pass
-
-from . import __version__
-from .abstract_channel import AbstractChannel
-from .channel import Channel
-from .exceptions import (
-    AMQPNotImplementedError, ChannelError, ResourceError,
-    ConnectionForced, ConnectionError, error_for_code,
-    RecoverableConnectionError, RecoverableChannelError,
-)
-from .five import items, range, values, monotonic
-from .method_framing import MethodReader, MethodWriter
-from .serialization import AMQPWriter
-from .transport import create_transport
-
-HAS_MSG_PEEK = hasattr(socket, 'MSG_PEEK')
-
-START_DEBUG_FMT = """
-Start from server, version: %d.%d, properties: %s, mechanisms: %s, locales: %s
-""".strip()
-
-__all__ = ['Connection']
-
-#
-# Client property info that gets sent to the server on connection startup
-#
-LIBRARY_PROPERTIES = {
-    'product': 'py-amqp',
-    'product_version': __version__,
-    'capabilities': {},
-}
-
-AMQP_LOGGER = logging.getLogger('amqp')
-
-
-class Connection(AbstractChannel):
-    """The connection class provides methods for a client to establish a
-    network connection to a server, and for both peers to operate the
-    connection thereafter.
-
-    GRAMMAR::
-
-        connection          = open-connection *use-connection close-connection
-        open-connection     = C:protocol-header
-                              S:START C:START-OK
-                              *challenge
-                              S:TUNE C:TUNE-OK
-                              C:OPEN S:OPEN-OK
-        challenge           = S:SECURE C:SECURE-OK
-        use-connection      = *channel
-        close-connection    = C:CLOSE S:CLOSE-OK
-                            / S:CLOSE C:CLOSE-OK
-
-    """
-    Channel = Channel
-
-    #: Final heartbeat interval value (in float seconds) after negotiation
-    heartbeat = None
-
-    #: Original heartbeat interval value proposed by client.
-    client_heartbeat = None
-
-    #: Original heartbeat interval proposed by server.
-    server_heartbeat = None
-
-    #: Time of last heartbeat sent (in monotonic time, if available).
-    last_heartbeat_sent = 0
-
-    #: Time of last heartbeat received (in monotonic time, if available).
-    last_heartbeat_received = 0
-
-    #: Number of bytes sent to socket at the last heartbeat check.
-    prev_sent = None
-
-    #: Number of bytes received from socket at the last heartbeat check.
-    prev_recv = None
-
-    def __init__(self, host='localhost', userid='guest', password='guest',
-                 login_method='AMQPLAIN', login_response=None,
-                 virtual_host='/', locale='en_US', client_properties=None,
-                 ssl=False, connect_timeout=None, channel_max=None,
-                 frame_max=None, heartbeat=0, on_blocked=None,
-                 on_unblocked=None, confirm_publish=False, **kwargs):
-        """Create a connection to the specified host, which should be
-        a 'host[:port]', such as 'localhost', or '1.2.3.4:5672'
-        (defaults to 'localhost', if a port is not specified then
-        5672 is used)
-
-        If login_response is not specified, one is built up for you from
-        userid and password if they are present.
-
-        The 'ssl' parameter may be simply True/False, or for Python >= 2.6
-        a dictionary of options to pass to ssl.wrap_socket() such as
-        requiring certain certificates.
-
-        """
-        channel_max = channel_max or 65535
-        frame_max = frame_max or 131072
-        if (login_response is None) \
-                and (userid is not None) \
-                and (password is not None):
-            login_response = AMQPWriter()
-            login_response.write_table({'LOGIN': userid, 'PASSWORD': password})
-            # Skip the length at the beginning
-            login_response = login_response.getvalue()[4:]
-
-        d = dict(LIBRARY_PROPERTIES, **client_properties or {})
-        self._method_override = {(60, 50): self._dispatch_basic_return}
-
-        self.channels = {}
-        # The connection object itself is treated as channel 0
-        super(Connection, self).__init__(self, 0)
-
-        self.transport = None
-
-        # Properties set in the Tune method
-        self.channel_max = channel_max
-        self.frame_max = frame_max
-        self.client_heartbeat = heartbeat
-
-        self.confirm_publish = confirm_publish
-
-        # Callbacks
-        self.on_blocked = on_blocked
-        self.on_unblocked = on_unblocked
-
-        self._avail_channel_ids = array('H', range(self.channel_max, 0, -1))
-
-        # Properties set in the Start method
-        self.version_major = 0
-        self.version_minor = 0
-        self.server_properties = {}
-        self.mechanisms = []
-        self.locales = []
-
-        # Let the transport.py module setup the actual
-        # socket connection to the broker.
-        #
-        self.transport = self.Transport(host, connect_timeout, ssl)
-
-        self.method_reader = MethodReader(self.transport)
-        self.method_writer = MethodWriter(self.transport, self.frame_max)
-
-        self.wait(allowed_methods=[
-            (10, 10),  # start
-        ])
-
-        self._x_start_ok(d, login_method, login_response, locale)
-
-        self._wait_tune_ok = True
-        while self._wait_tune_ok:
-            self.wait(allowed_methods=[
-                (10, 20),  # secure
-                (10, 30),  # tune
-            ])
-
-        return self._x_open(virtual_host)
-
-    def Transport(self, host, connect_timeout, ssl=False):
-        return create_transport(host, connect_timeout, ssl)
-
-    @property
-    def connected(self):
-        return self.transport and self.transport.connected
-
-    def _do_close(self):
-        try:
-            self.transport.close()
-
-            temp_list = [x for x in values(self.channels) if x is not self]
-            for ch in temp_list:
-                ch._do_close()
-        except socket.error:
-            pass  # connection already closed on the other end
-        finally:
-            self.transport = self.connection = self.channels = None
-
-    def _get_free_channel_id(self):
-        try:
-            return self._avail_channel_ids.pop()
-        except IndexError:
-            raise ResourceError(
-                'No free channel ids, current={0}, channel_max={1}'.format(
-                    len(self.channels), self.channel_max), (20, 10))
-
-    def _claim_channel_id(self, channel_id):
-        try:
-            return self._avail_channel_ids.remove(channel_id)
-        except ValueError:
-            raise ConnectionError(
-                'Channel %r already open' % (channel_id, ))
-
-    def _wait_method(self, channel_id, allowed_methods, timeout=None):
-        """Wait for a method from the server destined for
-        a particular channel."""
-        #
-        # Check the channel's deferred methods
-        #
-        method_queue = self.channels[channel_id].method_queue
-
-        for queued_method in method_queue:
-            method_sig = queued_method[0]
-            if (allowed_methods is None) \
-                    or (method_sig in allowed_methods) \
-                    or (method_sig == (20, 40)):
-                method_queue.remove(queued_method)
-                return queued_method
-
-        #
-        # Nothing queued, need to wait for a method from the peer
-        #
-        read_timeout = self.read_timeout
-        wait = self.wait
-        while 1:
-            channel, method_sig, args, content = read_timeout(timeout)
-
-            if channel == channel_id and (
-                    allowed_methods is None or
-                    method_sig in allowed_methods or
-                    method_sig == (20, 40)):
-                return method_sig, args, content
-
-            #
-            # Certain methods like basic_return should be dispatched
-            # immediately rather than being queued, even if they're not
-            # one of the 'allowed_methods' we're looking for.
-            #
-            if channel and method_sig in self.Channel._IMMEDIATE_METHODS:
-                self.channels[channel].dispatch_method(
-                    method_sig, args, content,
-                )
-                continue
-
-            #
-            # Not the channel and/or method we were looking for.  Queue
-            # this method for later
-            #
-            self.channels[channel].method_queue.append(
-                (method_sig, args, content),
-            )
-
-            #
-            # If we just queued up a method for channel 0 (the Connection
-            # itself) it's probably a close method in reaction to some
-            # error, so deal with it right away.
-            #
-            if not channel:
-                wait()
-
-    def channel(self, channel_id=None):
-        """Fetch a Channel object identified by the numeric channel_id, or
-        create that object if it doesn't already exist."""
-        try:
-            return self.channels[channel_id]
-        except KeyError:
-            return self.Channel(self, channel_id)
-
-    def is_alive(self):
-        if HAS_MSG_PEEK:
-            sock = self.sock
-            prev = sock.gettimeout()
-            sock.settimeout(0.0001)
-            try:
-                sock.recv(1, socket.MSG_PEEK)
-            except socket.timeout:
-                pass
-            except socket.error:
-                return False
-            finally:
-                sock.settimeout(prev)
-        return True
-
-    def drain_events(self, timeout=None):
-        """Wait for an event on a channel."""
-        chanmap = self.channels
-        chanid, method_sig, args, content = self._wait_multiple(
-            chanmap, None, timeout=timeout,
-        )
-
-        channel = chanmap[chanid]
-
-        if (content and
-                channel.auto_decode and
-                hasattr(content, 'content_encoding')):
-            try:
-                content.body = content.body.decode(content.content_encoding)
-            except Exception:
-                pass
-
-        amqp_method = (self._method_override.get(method_sig) or
-                       channel._METHOD_MAP.get(method_sig, None))
-
-        if amqp_method is None:
-            raise AMQPNotImplementedError(
-                'Unknown AMQP method {0!r}'.format(method_sig))
-
-        if content is None:
-            return amqp_method(channel, args)
-        else:
-            return amqp_method(channel, args, content)
-
-    def read_timeout(self, timeout=None):
-        if timeout is None:
-            return self.method_reader.read_method()
-        sock = self.sock
-        prev = sock.gettimeout()
-        if prev != timeout:
-            sock.settimeout(timeout)
-        try:
-            try:
-                return self.method_reader.read_method()
-            except SSLError as exc:
-                # http://bugs.python.org/issue10272
-                if 'timed out' in str(exc):
-                    raise socket.timeout()
-                # Non-blocking SSL sockets can throw SSLError
-                if 'The operation did not complete' in str(exc):
-                    raise socket.timeout()
-                raise
-        finally:
-            if prev != timeout:
-                sock.settimeout(prev)
-
-    def _wait_multiple(self, channels, allowed_methods, timeout=None):
-        for channel_id, channel in items(channels):
-            method_queue = channel.method_queue
-            for queued_method in method_queue:
-                method_sig = queued_method[0]
-                if (allowed_methods is None or
-                        method_sig in allowed_methods or
-                        method_sig == (20, 40)):
-                    method_queue.remove(queued_method)
-                    method_sig, args, content = queued_method
-                    return channel_id, method_sig, args, content
-
-        # Nothing queued, need to wait for a method from the peer
-        read_timeout = self.read_timeout
-        wait = self.wait
-        while 1:
-            channel, method_sig, args, content = read_timeout(timeout)
-
-            if channel in channels and (
-                    allowed_methods is None or
-                    method_sig in allowed_methods or
-                    method_sig == (20, 40)):
-                return channel, method_sig, args, content
-
-            # Not the channel and/or method we were looking for. Queue
-            # this method for later
-            channels[channel].method_queue.append((method_sig, args, content))
-
-            #
-            # If we just queued up a method for channel 0 (the Connection
-            # itself) it's probably a close method in reaction to some
-            # error, so deal with it right away.
-            #
-            if channel == 0:
-                wait()
-
-    def _dispatch_basic_return(self, channel, args, msg):
-        reply_code = args.read_short()
-        reply_text = args.read_shortstr()
-        exchange = args.read_shortstr()
-        routing_key = args.read_shortstr()
-
-        exc = error_for_code(reply_code, reply_text, (50, 60), ChannelError)
-        handlers = channel.events.get('basic_return')
-        if not handlers:
-            raise exc
-        for callback in handlers:
-            callback(exc, exchange, routing_key, msg)
-
-    def close(self, reply_code=0, reply_text='', method_sig=(0, 0)):
-        """Request a connection close
-
-        This method indicates that the sender wants to close the
-        connection. This may be due to internal conditions (e.g. a
-        forced shut-down) or due to an error handling a specific
-        method, i.e. an exception.  When a close is due to an
-        exception, the sender provides the class and method id of the
-        method which caused the exception.
-
-        RULE:
-
-            After sending this method any received method except the
-            Close-OK method MUST be discarded.
-
-        RULE:
-
-            The peer sending this method MAY use a counter or timeout
-            to detect failure of the other peer to respond correctly
-            with the Close-OK method.
-
-        RULE:
-
-            When a server receives the Close method from a client it
-            MUST delete all server-side resources associated with the
-            client's context.  A client CANNOT reconnect to a context
-            after sending or receiving a Close method.
-
-        PARAMETERS:
-            reply_code: short
-
-                The reply code. The AMQ reply codes are defined in AMQ
-                RFC 011.
-
-            reply_text: shortstr
-
-                The localised reply text.  This text can be logged as an
-                aid to resolving issues.
-
-            class_id: short
-
-                failing method class
-
-                When the close is provoked by a method exception, this
-                is the class of the method.
-
-            method_id: short
-
-                failing method ID
-
-                When the close is provoked by a method exception, this
-                is the ID of the method.
-
-        """
-        if self.transport is None:
-            # already closed
-            return
-
-        args = AMQPWriter()
-        args.write_short(reply_code)
-        args.write_shortstr(reply_text)
-        args.write_short(method_sig[0])  # class_id
-        args.write_short(method_sig[1])  # method_id
-        self._send_method((10, 50), args)
-        return self.wait(allowed_methods=[
-            (10, 50),  # Connection.close
-            (10, 51),  # Connection.close_ok
-        ])
-
-    def _close(self, args):
-        """Request a connection close
-
-        This method indicates that the sender wants to close the
-        connection. This may be due to internal conditions (e.g. a
-        forced shut-down) or due to an error handling a specific
-        method, i.e. an exception.  When a close is due to an
-        exception, the sender provides the class and method id of the
-        method which caused the exception.
-
-        RULE:
-
-            After sending this method any received method except the
-            Close-OK method MUST be discarded.
-
-        RULE:
-
-            The peer sending this method MAY use a counter or timeout
-            to detect failure of the other peer to respond correctly
-            with the Close-OK method.
-
-        RULE:
-
-            When a server receives the Close method from a client it
-            MUST delete all server-side resources associated with the
-            client's context.  A client CANNOT reconnect to a context
-            after sending or receiving a Close method.
-
-        PARAMETERS:
-            reply_code: short
-
-                The reply code. The AMQ reply codes are defined in AMQ
-                RFC 011.
-
-            reply_text: shortstr
-
-                The localised reply text.  This text can be logged as an
-                aid to resolving issues.
-
-            class_id: short
-
-                failing method class
-
-                When the close is provoked by a method exception, this
-                is the class of the method.
-
-            method_id: short
-
-                failing method ID
-
-                When the close is provoked by a method exception, this
-                is the ID of the method.
-
-        """
-        reply_code = args.read_short()
-        reply_text = args.read_shortstr()
-        class_id = args.read_short()
-        method_id = args.read_short()
-
-        self._x_close_ok()
-
-        raise error_for_code(reply_code, reply_text,
-                             (class_id, method_id), ConnectionError)
-
-    def _blocked(self, args):
-        """RabbitMQ Extension."""
-        reason = args.read_shortstr()
-        if self.on_blocked:
-            return self.on_blocked(reason)
-
-    def _unblocked(self, *args):
-        if self.on_unblocked:
-            return self.on_unblocked()
-
-    def _x_close_ok(self):
-        """Confirm a connection close
-
-        This method confirms a Connection.Close method and tells the
-        recipient that it is safe to release resources for the
-        connection and close the socket.
-
-        RULE:
-
-            A peer that detects a socket closure without having
-            received a Close-Ok handshake method SHOULD log the error.
-
-        """
-        self._send_method((10, 51))
-        self._do_close()
-
-    def _close_ok(self, args):
-        """Confirm a connection close
-
-        This method confirms a Connection.Close method and tells the
-        recipient that it is safe to release resources for the
-        connection and close the socket.
-
-        RULE:
-
-            A peer that detects a socket closure without having
-            received a Close-Ok handshake method SHOULD log the error.
-
-        """
-        self._do_close()
-
-    def _x_open(self, virtual_host, capabilities=''):
-        """Open connection to virtual host
-
-        This method opens a connection to a virtual host, which is a
-        collection of resources, and acts to separate multiple
-        application domains within a server.
-
-        RULE:
-
-            The client MUST open the context before doing any work on
-            the connection.
-
-        PARAMETERS:
-            virtual_host: shortstr
-
-                virtual host name
-
-                The name of the virtual host to work with.
-
-                RULE:
-
-                    If the server supports multiple virtual hosts, it
-                    MUST enforce a full separation of exchanges,
-                    queues, and all associated entities per virtual
-                    host. An application, connected to a specific
-                    virtual host, MUST NOT be able to access resources
-                    of another virtual host.
-
-                RULE:
-
-                    The server SHOULD verify that the client has
-                    permission to access the specified virtual host.
-
-                RULE:
-
-                    The server MAY configure arbitrary limits per
-                    virtual host, such as the number of each type of
-                    entity that may be used, per connection and/or in
-                    total.
-
-            capabilities: shortstr
-
-                required capabilities
-
-                The client may specify a number of capability names,
-                delimited by spaces.  The server can use this string
-                to how to process the client's connection request.
-
-        """
-        args = AMQPWriter()
-        args.write_shortstr(virtual_host)
-        args.write_shortstr(capabilities)
-        args.write_bit(False)
-        self._send_method((10, 40), args)
-        return self.wait(allowed_methods=[
-            (10, 41),    # Connection.open_ok
-        ])
-
-    def _open_ok(self, args):
-        """Signal that the connection is ready
-
-        This method signals to the client that the connection is ready
-        for use.
-
-        PARAMETERS:
-            known_hosts: shortstr (deprecated)
-
-        """
-        AMQP_LOGGER.debug('Open OK!')
-
-    def _secure(self, args):
-        """Security mechanism challenge
-
-        The SASL protocol works by exchanging challenges and responses
-        until both peers have received sufficient information to
-        authenticate each other.  This method challenges the client to
-        provide more information.
-
-        PARAMETERS:
-            challenge: longstr
-
-                security challenge data
-
-                Challenge information, a block of opaque binary data
-                passed to the security mechanism.
-
-        """
-        challenge = args.read_longstr()  # noqa
-
-    def _x_secure_ok(self, response):
-        """Security mechanism response
-
-        This method attempts to authenticate, passing a block of SASL
-        data for the security mechanism at the server side.
-
-        PARAMETERS:
-            response: longstr
-
-                security response data
-
-                A block of opaque data passed to the security
-                mechanism.  The contents of this data are defined by
-                the SASL security mechanism.
-
-        """
-        args = AMQPWriter()
-        args.write_longstr(response)
-        self._send_method((10, 21), args)
-
-    def _start(self, args):
-        """Start connection negotiation
-
-        This method starts the connection negotiation process by
-        telling the client the protocol version that the server
-        proposes, along with a list of security mechanisms which the
-        client can use for authentication.
-
-        RULE:
-
-            If the client cannot handle the protocol version suggested
-            by the server it MUST close the socket connection.
-
-        RULE:
-
-            The server MUST provide a protocol version that is lower
-            than or equal to that requested by the client in the
-            protocol header. If the server cannot support the
-            specified protocol it MUST NOT send this method, but MUST
-            close the socket connection.
-
-        PARAMETERS:
-            version_major: octet
-
-                protocol major version
-
-                The protocol major version that the server agrees to
-                use, which cannot be higher than the client's major
-                version.
-
-            version_minor: octet
-
-                protocol major version
-
-                The protocol minor version that the server agrees to
-                use, which cannot be higher than the client's minor
-                version.
-
-            server_properties: table
-
-                server properties
-
-            mechanisms: longstr
-
-                available security mechanisms
-
-                A list of the security mechanisms that the server
-                supports, delimited by spaces.  Currently ASL supports
-                these mechanisms: PLAIN.
-
-            locales: longstr
-
-                available message locales
-
-                A list of the message locales that the server
-                supports, delimited by spaces.  The locale defines the
-                language in which the server will send reply texts.
-
-                RULE:
-
-                    All servers MUST support at least the en_US
-                    locale.
-
-        """
-        self.version_major = args.read_octet()
-        self.version_minor = args.read_octet()
-        self.server_properties = args.read_table()
-        self.mechanisms = args.read_longstr().split(' ')
-        self.locales = args.read_longstr().split(' ')
-
-        AMQP_LOGGER.debug(
-            START_DEBUG_FMT,
-            self.version_major, self.version_minor,
-            self.server_properties, self.mechanisms, self.locales,
-        )
-
-    def _x_start_ok(self, client_properties, mechanism, response, locale):
-        """Select security mechanism and locale
-
-        This method selects a SASL security mechanism. ASL uses SASL
-        (RFC2222) to negotiate authentication and encryption.
-
-        PARAMETERS:
-            client_properties: table
-
-                client properties
-
-            mechanism: shortstr
-
-                selected security mechanism
-
-                A single security mechanisms selected by the client,
-                which must be one of those specified by the server.
-
-                RULE:
-
-                    The client SHOULD authenticate using the highest-
-                    level security profile it can handle from the list
-                    provided by the server.
-
-                RULE:
-
-                    The mechanism field MUST contain one of the
-                    security mechanisms proposed by the server in the
-                    Start method. If it doesn't, the server MUST close
-                    the socket.
-
-            response: longstr
-
-                security response data
-
-                A block of opaque data passed to the security
-                mechanism. The contents of this data are defined by
-                the SASL security mechanism.  For the PLAIN security
-                mechanism this is defined as a field table holding two
-                fields, LOGIN and PASSWORD.
-
-            locale: shortstr
-
-                selected message locale
-
-                A single message local selected by the client, which
-                must be one of those specified by the server.
-
-        """
-        if self.server_capabilities.get('consumer_cancel_notify'):
-            if 'capabilities' not in client_properties:
-                client_properties['capabilities'] = {}
-            client_properties['capabilities']['consumer_cancel_notify'] = True
-        if self.server_capabilities.get('connection.blocked'):
-            if 'capabilities' not in client_properties:
-                client_properties['capabilities'] = {}
-            client_properties['capabilities']['connection.blocked'] = True
-        args = AMQPWriter()
-        args.write_table(client_properties)
-        args.write_shortstr(mechanism)
-        args.write_longstr(response)
-        args.write_shortstr(locale)
-        self._send_method((10, 11), args)
-
-    def _tune(self, args):
-        """Propose connection tuning parameters
-
-        This method proposes a set of connection configuration values
-        to the client.  The client can accept and/or adjust these.
-
-        PARAMETERS:
-            channel_max: short
-
-                proposed maximum channels
-
-                The maximum total number of channels that the server
-                allows per connection. Zero means that the server does
-                not impose a fixed limit, but the number of allowed
-                channels may be limited by available server resources.
-
-            frame_max: long
-
-                proposed maximum frame size
-
-                The largest frame size that the server proposes for
-                the connection. The client can negotiate a lower
-                value.  Zero means that the server does not impose any
-                specific limit but may reject very large frames if it
-                cannot allocate resources for them.
-
-                RULE:
-
-                    Until the frame-max has been negotiated, both
-                    peers MUST accept frames of up to 4096 octets
-                    large. The minimum non-zero value for the frame-
-                    max field is 4096.
-
-            heartbeat: short
-
-                desired heartbeat delay
-
-                The delay, in seconds, of the connection heartbeat
-                that the server wants.  Zero means the server does not
-                want a heartbeat.
-
-        """
-        client_heartbeat = self.client_heartbeat or 0
-        self.channel_max = args.read_short() or self.channel_max
-        self.frame_max = args.read_long() or self.frame_max
-        self.method_writer.frame_max = self.frame_max
-        self.server_heartbeat = args.read_short() or 0
-
-        # negotiate the heartbeat interval to the smaller of the
-        # specified values
-        if self.server_heartbeat == 0 or client_heartbeat == 0:
-            self.heartbeat = max(self.server_heartbeat, client_heartbeat)
-        else:
-            self.heartbeat = min(self.server_heartbeat, client_heartbeat)
-
-        # Ignore server heartbeat if client_heartbeat is disabled
-        if not self.client_heartbeat:
-            self.heartbeat = 0
-
-        self._x_tune_ok(self.channel_max, self.frame_max, self.heartbeat)
-
-    def send_heartbeat(self):
-        self.transport.write_frame(8, 0, bytes())
-
-    def heartbeat_tick(self, rate=2):
-        """Send heartbeat packets, if necessary, and fail if none have been
-        received recently.  This should be called frequently, on the order of
-        once per second.
-
-        :keyword rate: Ignored
-        """
-        if not self.heartbeat:
-            return
-
-        # treat actual data exchange in either direction as a heartbeat
-        sent_now = self.method_writer.bytes_sent
-        recv_now = self.method_reader.bytes_recv
-        if self.prev_sent is None or self.prev_sent != sent_now:
-            self.last_heartbeat_sent = monotonic()
-        if self.prev_recv is None or self.prev_recv != recv_now:
-            self.last_heartbeat_received = monotonic()
-        self.prev_sent, self.prev_recv = sent_now, recv_now
-
-        # send a heartbeat if it's time to do so
-        if monotonic() > self.last_heartbeat_sent + self.heartbeat:
-            self.send_heartbeat()
-            self.last_heartbeat_sent = monotonic()
-
-        # if we've missed two intervals' heartbeats, fail; this gives the
-        # server enough time to send heartbeats a little late
-        if (self.last_heartbeat_received and
-                self.last_heartbeat_received + 2 *
-                self.heartbeat < monotonic()):
-            raise ConnectionForced('Too many heartbeats missed')
-
-    def _x_tune_ok(self, channel_max, frame_max, heartbeat):
-        """Negotiate connection tuning parameters
-
-        This method sends the client's connection tuning parameters to
-        the server. Certain fields are negotiated, others provide
-        capability information.
-
-        PARAMETERS:
-            channel_max: short
-
-                negotiated maximum channels
-
-                The maximum total number of channels that the client
-                will use per connection.  May not be higher than the
-                value specified by the server.
-
-                RULE:
-
-                    The server MAY ignore the channel-max value or MAY
-                    use it for tuning its resource allocation.
-
-            frame_max: long
-
-                negotiated maximum frame size
-
-                The largest frame size that the client and server will
-                use for the connection.  Zero means that the client
-                does not impose any specific limit but may reject very
-                large frames if it cannot allocate resources for them.
-                Note that the frame-max limit applies principally to
-                content frames, where large contents can be broken
-                into frames of arbitrary size.
-
-                RULE:
-
-                    Until the frame-max has been negotiated, both
-                    peers must accept frames of up to 4096 octets
-                    large. The minimum non-zero value for the frame-
-                    max field is 4096.
-
-            heartbeat: short
-
-                desired heartbeat delay
-
-                The delay, in seconds, of the connection heartbeat
-                that the client wants. Zero means the client does not
-                want a heartbeat.
-
-        """
-        args = AMQPWriter()
-        args.write_short(channel_max)
-        args.write_long(frame_max)
-        args.write_short(heartbeat or 0)
-        self._send_method((10, 31), args)
-        self._wait_tune_ok = False
-
-    @property
-    def sock(self):
-        return self.transport.sock
-
-    @property
-    def server_capabilities(self):
-        return self.server_properties.get('capabilities') or {}
-
-    _METHOD_MAP = {
-        (10, 10): _start,
-        (10, 20): _secure,
-        (10, 30): _tune,
-        (10, 41): _open_ok,
-        (10, 50): _close,
-        (10, 51): _close_ok,
-        (10, 60): _blocked,
-        (10, 61): _unblocked,
-    }
-
-    _IMMEDIATE_METHODS = []
-    connection_errors = (
-        ConnectionError,
-        socket.error,
-        IOError,
-        OSError,
-    )
-    channel_errors = (ChannelError, )
-    recoverable_connection_errors = (
-        RecoverableConnectionError,
-        socket.error,
-        IOError,
-        OSError,
-    )
-    recoverable_channel_errors = (
-        RecoverableChannelError,
-    )
diff --git a/src/rez/vendor/amqp/exceptions.py b/src/rez/vendor/amqp/exceptions.py
deleted file mode 100644
index 6a0287b01..000000000
--- a/src/rez/vendor/amqp/exceptions.py
+++ /dev/null
@@ -1,262 +0,0 @@
-"""Exceptions used by amqp"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-from struct import pack, unpack
-
-__all__ = [
-    'AMQPError',
-    'ConnectionError', 'ChannelError',
-    'RecoverableConnectionError', 'IrrecoverableConnectionError',
-    'RecoverableChannelError', 'IrrecoverableChannelError',
-    'ConsumerCancelled', 'ContentTooLarge', 'NoConsumers',
-    'ConnectionForced', 'InvalidPath', 'AccessRefused', 'NotFound',
-    'ResourceLocked', 'PreconditionFailed', 'FrameError', 'FrameSyntaxError',
-    'InvalidCommand', 'ChannelNotOpen', 'UnexpectedFrame', 'ResourceError',
-    'NotConfirmed', 'NotAllowed', 'AMQPNotImplementedError', 'InternalError',
-]
-
-
-class AMQPError(Exception):
-    code = 0
-
-    def __init__(self, reply_text=None, method_sig=None,
-                 method_name=None, reply_code=None):
-        self.message = reply_text
-        self.reply_code = reply_code or self.code
-        self.reply_text = reply_text
-        self.method_sig = method_sig
-        self.method_name = method_name or ''
-        if method_sig and not self.method_name:
-            self.method_name = METHOD_NAME_MAP.get(method_sig, '')
-        Exception.__init__(self, reply_code,
-                           reply_text, method_sig, self.method_name)
-
-    def __str__(self):
-        if self.method:
-            return '{0.method}: ({0.reply_code}) {0.reply_text}'.format(self)
-        return self.reply_text or '<AMQPError: unknown error>'
-
-    @property
-    def method(self):
-        return self.method_name or self.method_sig
-
-
-class ConnectionError(AMQPError):
-    pass
-
-
-class ChannelError(AMQPError):
-    pass
-
-
-class RecoverableChannelError(ChannelError):
-    pass
-
-
-class IrrecoverableChannelError(ChannelError):
-    pass
-
-
-class RecoverableConnectionError(ConnectionError):
-    pass
-
-
-class IrrecoverableConnectionError(ConnectionError):
-    pass
-
-
-class Blocked(RecoverableConnectionError):
-    pass
-
-
-class ConsumerCancelled(RecoverableConnectionError):
-    pass
-
-
-class ContentTooLarge(RecoverableChannelError):
-    code = 311
-
-
-class NoConsumers(RecoverableChannelError):
-    code = 313
-
-
-class ConnectionForced(RecoverableConnectionError):
-    code = 320
-
-
-class InvalidPath(IrrecoverableConnectionError):
-    code = 402
-
-
-class AccessRefused(IrrecoverableChannelError):
-    code = 403
-
-
-class NotFound(IrrecoverableChannelError):
-    code = 404
-
-
-class NotConfirmed(RecoverableConnectionError):
-    pass
-
-
-class ResourceLocked(RecoverableChannelError):
-    code = 405
-
-
-class PreconditionFailed(IrrecoverableChannelError):
-    code = 406
-
-
-class FrameError(IrrecoverableConnectionError):
-    code = 501
-
-
-class FrameSyntaxError(IrrecoverableConnectionError):
-    code = 502
-
-
-class InvalidCommand(IrrecoverableConnectionError):
-    code = 503
-
-
-class ChannelNotOpen(IrrecoverableConnectionError):
-    code = 504
-
-
-class UnexpectedFrame(IrrecoverableConnectionError):
-    code = 505
-
-
-class ResourceError(RecoverableConnectionError):
-    code = 506
-
-
-class NotAllowed(IrrecoverableConnectionError):
-    code = 530
-
-
-class AMQPNotImplementedError(IrrecoverableConnectionError):
-    code = 540
-
-
-class InternalError(IrrecoverableConnectionError):
-    code = 541
-
-
-ERROR_MAP = {
-    311: ContentTooLarge,
-    313: NoConsumers,
-    320: ConnectionForced,
-    402: InvalidPath,
-    403: AccessRefused,
-    404: NotFound,
-    405: ResourceLocked,
-    406: PreconditionFailed,
-    501: FrameError,
-    502: FrameSyntaxError,
-    503: InvalidCommand,
-    504: ChannelNotOpen,
-    505: UnexpectedFrame,
-    506: ResourceError,
-    530: NotAllowed,
-    540: AMQPNotImplementedError,
-    541: InternalError,
-}
-
-
-def error_for_code(code, text, method, default):
-    try:
-        return ERROR_MAP[code](text, method, reply_code=code)
-    except KeyError:
-        return default(text, method, reply_code=code)
-
-
-def raise_for_code(code, text, method, default):
-    raise error_for_code(code, text, method, default)
-
-
-METHOD_NAME_MAP = {
-    (10, 10): 'Connection.start',
-    (10, 11): 'Connection.start_ok',
-    (10, 20): 'Connection.secure',
-    (10, 21): 'Connection.secure_ok',
-    (10, 30): 'Connection.tune',
-    (10, 31): 'Connection.tune_ok',
-    (10, 40): 'Connection.open',
-    (10, 41): 'Connection.open_ok',
-    (10, 50): 'Connection.close',
-    (10, 51): 'Connection.close_ok',
-    (20, 10): 'Channel.open',
-    (20, 11): 'Channel.open_ok',
-    (20, 20): 'Channel.flow',
-    (20, 21): 'Channel.flow_ok',
-    (20, 40): 'Channel.close',
-    (20, 41): 'Channel.close_ok',
-    (30, 10): 'Access.request',
-    (30, 11): 'Access.request_ok',
-    (40, 10): 'Exchange.declare',
-    (40, 11): 'Exchange.declare_ok',
-    (40, 20): 'Exchange.delete',
-    (40, 21): 'Exchange.delete_ok',
-    (40, 30): 'Exchange.bind',
-    (40, 31): 'Exchange.bind_ok',
-    (40, 40): 'Exchange.unbind',
-    (40, 41): 'Exchange.unbind_ok',
-    (50, 10): 'Queue.declare',
-    (50, 11): 'Queue.declare_ok',
-    (50, 20): 'Queue.bind',
-    (50, 21): 'Queue.bind_ok',
-    (50, 30): 'Queue.purge',
-    (50, 31): 'Queue.purge_ok',
-    (50, 40): 'Queue.delete',
-    (50, 41): 'Queue.delete_ok',
-    (50, 50): 'Queue.unbind',
-    (50, 51): 'Queue.unbind_ok',
-    (60, 10): 'Basic.qos',
-    (60, 11): 'Basic.qos_ok',
-    (60, 20): 'Basic.consume',
-    (60, 21): 'Basic.consume_ok',
-    (60, 30): 'Basic.cancel',
-    (60, 31): 'Basic.cancel_ok',
-    (60, 40): 'Basic.publish',
-    (60, 50): 'Basic.return',
-    (60, 60): 'Basic.deliver',
-    (60, 70): 'Basic.get',
-    (60, 71): 'Basic.get_ok',
-    (60, 72): 'Basic.get_empty',
-    (60, 80): 'Basic.ack',
-    (60, 90): 'Basic.reject',
-    (60, 100): 'Basic.recover_async',
-    (60, 110): 'Basic.recover',
-    (60, 111): 'Basic.recover_ok',
-    (60, 120): 'Basic.nack',
-    (90, 10): 'Tx.select',
-    (90, 11): 'Tx.select_ok',
-    (90, 20): 'Tx.commit',
-    (90, 21): 'Tx.commit_ok',
-    (90, 30): 'Tx.rollback',
-    (90, 31): 'Tx.rollback_ok',
-    (85, 10): 'Confirm.select',
-    (85, 11): 'Confirm.select_ok',
-}
-
-
-for _method_id, _method_name in list(METHOD_NAME_MAP.items()):
-    METHOD_NAME_MAP[unpack('>I', pack('>HH', *_method_id))[0]] = _method_name
diff --git a/src/rez/vendor/amqp/five.py b/src/rez/vendor/amqp/five.py
deleted file mode 100644
index 8b281dbe3..000000000
--- a/src/rez/vendor/amqp/five.py
+++ /dev/null
@@ -1,191 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    celery.five
-    ~~~~~~~~~~~
-
-    Compatibility implementations of features
-    only available in newer Python versions.
-
-
-"""
-from __future__ import absolute_import
-
-# ############# py3k #########################################################
-import sys
-PY3 = sys.version_info[0] == 3
-
-try:
-    reload = reload                         # noqa
-except NameError:                           # pragma: no cover
-    from imp import reload                  # noqa
-
-try:
-    from UserList import UserList           # noqa
-except ImportError:                         # pragma: no cover
-    from collections import UserList        # noqa
-
-try:
-    from UserDict import UserDict           # noqa
-except ImportError:                         # pragma: no cover
-    from collections import UserDict        # noqa
-
-
-if PY3:
-    import builtins
-
-    from queue import Queue, Empty
-    from itertools import zip_longest
-    from io import StringIO, BytesIO
-
-    map = map
-    string = str
-    string_t = str
-    long_t = int
-    text_t = str
-    range = range
-    int_types = (int, )
-
-    open_fqdn = 'builtins.open'
-
-    def items(d):
-        return d.items()
-
-    def keys(d):
-        return d.keys()
-
-    def values(d):
-        return d.values()
-
-    def nextfun(it):
-        return it.__next__
-
-    exec_ = getattr(builtins, 'exec')
-
-    def reraise(tp, value, tb=None):
-        if value.__traceback__ is not tb:
-            raise value.with_traceback(tb)
-        raise value
-
-    class WhateverIO(StringIO):
-
-        def write(self, data):
-            if isinstance(data, bytes):
-                data = data.encode()
-            StringIO.write(self, data)
-
-else:
-    import __builtin__ as builtins  # noqa
-    from Queue import Queue, Empty  # noqa
-    from itertools import imap as map, izip_longest as zip_longest  # noqa
-    from StringIO import StringIO   # noqa
-    string = unicode                # noqa
-    string_t = basestring           # noqa
-    text_t = unicode
-    long_t = long                   # noqa
-    range = xrange
-    int_types = (int, long)
-
-    open_fqdn = '__builtin__.open'
-
-    def items(d):                   # noqa
-        return d.iteritems()
-
-    def keys(d):                    # noqa
-        return d.iterkeys()
-
-    def values(d):                  # noqa
-        return d.itervalues()
-
-    def nextfun(it):                # noqa
-        return it.next
-
-    def exec_(code, globs=None, locs=None):
-        """Execute code in a namespace."""
-        if globs is None:
-            frame = sys._getframe(1)
-            globs = frame.f_globals
-            if locs is None:
-                locs = frame.f_locals
-            del frame
-        elif locs is None:
-            locs = globs
-        exec("""exec code in globs, locs""")
-
-    exec_("""def reraise(tp, value, tb=None): raise tp, value, tb""")
-
-    BytesIO = WhateverIO = StringIO         # noqa
-
-
-def with_metaclass(Type, skip_attrs=set(['__dict__', '__weakref__'])):
-    """Class decorator to set metaclass.
-
-    Works with both Python 3 and Python 3 and it does not add
-    an extra class in the lookup order like ``six.with_metaclass`` does
-    (that is -- it copies the original class instead of using inheritance).
-
-    """
-
-    def _clone_with_metaclass(Class):
-        attrs = dict((key, value) for key, value in items(vars(Class))
-                     if key not in skip_attrs)
-        return Type(Class.__name__, Class.__bases__, attrs)
-
-    return _clone_with_metaclass
-
-# ############# time.monotonic ################################################
-
-if sys.version_info < (3, 3):
-
-    import platform
-    SYSTEM = platform.system()
-
-    try:
-        import ctypes
-    except ImportError:  # pragma: no cover
-        ctypes = None  # noqa
-
-    if SYSTEM == 'Darwin' and ctypes is not None:
-        from ctypes.util import find_library
-        libSystem = ctypes.CDLL(find_library('libSystem.dylib'))
-        CoreServices = ctypes.CDLL(find_library('CoreServices'),
-                                   use_errno=True)
-        mach_absolute_time = libSystem.mach_absolute_time
-        mach_absolute_time.restype = ctypes.c_uint64
-        absolute_to_nanoseconds = CoreServices.AbsoluteToNanoseconds
-        absolute_to_nanoseconds.restype = ctypes.c_uint64
-        absolute_to_nanoseconds.argtypes = [ctypes.c_uint64]
-
-        def _monotonic():
-            return absolute_to_nanoseconds(mach_absolute_time()) * 1e-9
-
-    elif SYSTEM == 'Linux' and ctypes is not None:
-        # from stackoverflow:
-        # questions/1205722/how-do-i-get-monotonic-time-durations-in-python
-        import os
-
-        CLOCK_MONOTONIC = 1  # see <linux/time.h>
-
-        class timespec(ctypes.Structure):
-            _fields_ = [
-                ('tv_sec', ctypes.c_long),
-                ('tv_nsec', ctypes.c_long),
-            ]
-
-        librt = ctypes.CDLL('librt.so.1', use_errno=True)
-        clock_gettime = librt.clock_gettime
-        clock_gettime.argtypes = [
-            ctypes.c_int, ctypes.POINTER(timespec),
-        ]
-
-        def _monotonic():  # noqa
-            t = timespec()
-            if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0:
-                errno_ = ctypes.get_errno()
-                raise OSError(errno_, os.strerror(errno_))
-            return t.tv_sec + t.tv_nsec * 1e-9
-    else:
-        from time import time as _monotonic
-try:
-    from time import monotonic
-except ImportError:
-    monotonic = _monotonic  # noqa
diff --git a/src/rez/vendor/amqp/method_framing.py b/src/rez/vendor/amqp/method_framing.py
deleted file mode 100644
index b45452472..000000000
--- a/src/rez/vendor/amqp/method_framing.py
+++ /dev/null
@@ -1,231 +0,0 @@
-"""Convert between frames and higher-level AMQP methods"""
-# Copyright (C) 2007-2008 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-from collections import defaultdict, deque
-from struct import pack, unpack
-
-from .basic_message import Message
-from .exceptions import AMQPError, UnexpectedFrame
-from .five import range, string
-from .serialization import AMQPReader
-
-__all__ = ['MethodReader']
-
-#
-# MethodReader needs to know which methods are supposed
-# to be followed by content headers and bodies.
-#
-_CONTENT_METHODS = [
-    (60, 50),  # Basic.return
-    (60, 60),  # Basic.deliver
-    (60, 71),  # Basic.get_ok
-]
-
-
-class _PartialMessage(object):
-    """Helper class to build up a multi-frame method."""
-
-    def __init__(self, method_sig, args, channel):
-        self.method_sig = method_sig
-        self.args = args
-        self.msg = Message()
-        self.body_parts = []
-        self.body_received = 0
-        self.body_size = None
-        self.complete = False
-
-    def add_header(self, payload):
-        class_id, weight, self.body_size = unpack('>HHQ', payload[:12])
-        self.msg._load_properties(payload[12:])
-        self.complete = (self.body_size == 0)
-
-    def add_payload(self, payload):
-        parts = self.body_parts
-        self.body_received += len(payload)
-        if self.body_received == self.body_size:
-            if parts:
-                parts.append(payload)
-                self.msg.body = bytes().join(parts)
-            else:
-                self.msg.body = payload
-            self.complete = True
-        else:
-            parts.append(payload)
-
-
-class MethodReader(object):
-    """Helper class to receive frames from the broker, combine them if
-    necessary with content-headers and content-bodies into complete methods.
-
-    Normally a method is represented as a tuple containing
-    (channel, method_sig, args, content).
-
-    In the case of a framing error, an :exc:`ConnectionError` is placed
-    in the queue.
-
-    In the case of unexpected frames, a tuple made up of
-    ``(channel, ChannelError)`` is placed in the queue.
-
-    """
-
-    def __init__(self, source):
-        self.source = source
-        self.queue = deque()
-        self.running = False
-        self.partial_messages = {}
-        self.heartbeats = 0
-        # For each channel, which type is expected next
-        self.expected_types = defaultdict(lambda: 1)
-        # not an actual byte count, just incremented whenever we receive
-        self.bytes_recv = 0
-        self._quick_put = self.queue.append
-        self._quick_get = self.queue.popleft
-
-    def _next_method(self):
-        """Read the next method from the source, once one complete method has
-        been assembled it is placed in the internal queue."""
-        queue = self.queue
-        put = self._quick_put
-        read_frame = self.source.read_frame
-        while not queue:
-            try:
-                frame_type, channel, payload = read_frame()
-            except Exception as exc:
-                #
-                # Connection was closed?  Framing Error?
-                #
-                put(exc)
-                break
-
-            self.bytes_recv += 1
-
-            if frame_type not in (self.expected_types[channel], 8):
-                put((
-                    channel,
-                    UnexpectedFrame(
-                        'Received frame {0} while expecting type: {1}'.format(
-                            frame_type, self.expected_types[channel]))))
-            elif frame_type == 1:
-                self._process_method_frame(channel, payload)
-            elif frame_type == 2:
-                self._process_content_header(channel, payload)
-            elif frame_type == 3:
-                self._process_content_body(channel, payload)
-            elif frame_type == 8:
-                self._process_heartbeat(channel, payload)
-
-    def _process_heartbeat(self, channel, payload):
-        self.heartbeats += 1
-
-    def _process_method_frame(self, channel, payload):
-        """Process Method frames"""
-        method_sig = unpack('>HH', payload[:4])
-        args = AMQPReader(payload[4:])
-
-        if method_sig in _CONTENT_METHODS:
-            #
-            # Save what we've got so far and wait for the content-header
-            #
-            self.partial_messages[channel] = _PartialMessage(
-                method_sig, args, channel,
-            )
-            self.expected_types[channel] = 2
-        else:
-            self._quick_put((channel, method_sig, args, None))
-
-    def _process_content_header(self, channel, payload):
-        """Process Content Header frames"""
-        partial = self.partial_messages[channel]
-        partial.add_header(payload)
-
-        if partial.complete:
-            #
-            # a bodyless message, we're done
-            #
-            self._quick_put((channel, partial.method_sig,
-                             partial.args, partial.msg))
-            self.partial_messages.pop(channel, None)
-            self.expected_types[channel] = 1
-        else:
-            #
-            # wait for the content-body
-            #
-            self.expected_types[channel] = 3
-
-    def _process_content_body(self, channel, payload):
-        """Process Content Body frames"""
-        partial = self.partial_messages[channel]
-        partial.add_payload(payload)
-        if partial.complete:
-            #
-            # Stick the message in the queue and go back to
-            # waiting for method frames
-            #
-            self._quick_put((channel, partial.method_sig,
-                             partial.args, partial.msg))
-            self.partial_messages.pop(channel, None)
-            self.expected_types[channel] = 1
-
-    def read_method(self):
-        """Read a method from the peer."""
-        self._next_method()
-        m = self._quick_get()
-        if isinstance(m, Exception):
-            raise m
-        if isinstance(m, tuple) and isinstance(m[1], AMQPError):
-            raise m[1]
-        return m
-
-
-class MethodWriter(object):
-    """Convert AMQP methods into AMQP frames and send them out
-    to the peer."""
-
-    def __init__(self, dest, frame_max):
-        self.dest = dest
-        self.frame_max = frame_max
-        self.bytes_sent = 0
-
-    def write_method(self, channel, method_sig, args, content=None):
-        write_frame = self.dest.write_frame
-        payload = pack('>HH', method_sig[0], method_sig[1]) + args
-
-        if content:
-            # do this early, so we can raise an exception if there's a
-            # problem with the content properties, before sending the
-            # first frame
-            body = content.body
-            if isinstance(body, string):
-                coding = content.properties.get('content_encoding', None)
-                if coding is None:
-                    coding = content.properties['content_encoding'] = 'UTF-8'
-
-                body = body.encode(coding)
-            properties = content._serialize_properties()
-
-        write_frame(1, channel, payload)
-
-        if content:
-            payload = pack('>HHQ', method_sig[0], 0, len(body)) + properties
-
-            write_frame(2, channel, payload)
-
-            chunk_size = self.frame_max - 8
-            for i in range(0, len(body), chunk_size):
-                write_frame(3, channel, body[i:i + chunk_size])
-        self.bytes_sent += 1
diff --git a/src/rez/vendor/amqp/protocol.py b/src/rez/vendor/amqp/protocol.py
deleted file mode 100644
index 0856eb4e1..000000000
--- a/src/rez/vendor/amqp/protocol.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import absolute_import
-
-from collections import namedtuple
-
-
-queue_declare_ok_t = namedtuple(
-    'queue_declare_ok_t', ('queue', 'message_count', 'consumer_count'),
-)
-
-basic_return_t = namedtuple(
-    'basic_return_t',
-    ('reply_code', 'reply_text', 'exchange', 'routing_key', 'message'),
-)
diff --git a/src/rez/vendor/amqp/serialization.py b/src/rez/vendor/amqp/serialization.py
deleted file mode 100644
index 4b54336d8..000000000
--- a/src/rez/vendor/amqp/serialization.py
+++ /dev/null
@@ -1,509 +0,0 @@
-"""
-Convert between bytestreams and higher-level AMQP types.
-
-2007-11-05 Barry Pederson <bp@barryp.org>
-
-"""
-# Copyright (C) 2007 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-import calendar
-import sys
-
-from datetime import datetime
-from decimal import Decimal
-from io import BytesIO
-from struct import pack, unpack
-
-from .exceptions import FrameSyntaxError
-from .five import int_types, long_t, string, string_t, items
-
-IS_PY3K = sys.version_info[0] >= 3
-
-if IS_PY3K:
-    def byte(n):
-        return bytes([n])
-else:
-    byte = chr
-
-
-ILLEGAL_TABLE_TYPE_WITH_KEY = """\
-Table type {0!r} for key {1!r} not handled by amqp. [value: {2!r}]
-"""
-
-ILLEGAL_TABLE_TYPE = """\
-    Table type {0!r} not handled by amqp. [value: {1!r}]
-"""
-
-
-class AMQPReader(object):
-    """Read higher-level AMQP types from a bytestream."""
-    def __init__(self, source):
-        """Source should be either a file-like object with a read() method, or
-        a plain (non-unicode) string."""
-        if isinstance(source, bytes):
-            self.input = BytesIO(source)
-        elif hasattr(source, 'read'):
-            self.input = source
-        else:
-            raise ValueError(
-                'AMQPReader needs a file-like object or plain string')
-
-        self.bitcount = self.bits = 0
-
-    def close(self):
-        self.input.close()
-
-    def read(self, n):
-        """Read n bytes."""
-        self.bitcount = self.bits = 0
-        return self.input.read(n)
-
-    def read_bit(self):
-        """Read a single boolean value."""
-        if not self.bitcount:
-            self.bits = ord(self.input.read(1))
-            self.bitcount = 8
-        result = (self.bits & 1) == 1
-        self.bits >>= 1
-        self.bitcount -= 1
-        return result
-
-    def read_octet(self):
-        """Read one byte, return as an integer"""
-        self.bitcount = self.bits = 0
-        return unpack('B', self.input.read(1))[0]
-
-    def read_short(self):
-        """Read an unsigned 16-bit integer"""
-        self.bitcount = self.bits = 0
-        return unpack('>H', self.input.read(2))[0]
-
-    def read_long(self):
-        """Read an unsigned 32-bit integer"""
-        self.bitcount = self.bits = 0
-        return unpack('>I', self.input.read(4))[0]
-
-    def read_longlong(self):
-        """Read an unsigned 64-bit integer"""
-        self.bitcount = self.bits = 0
-        return unpack('>Q', self.input.read(8))[0]
-
-    def read_float(self):
-        """Read float value."""
-        self.bitcount = self.bits = 0
-        return unpack('>d', self.input.read(8))[0]
-
-    def read_shortstr(self):
-        """Read a short string that's stored in up to 255 bytes.
-
-        The encoding isn't specified in the AMQP spec, so
-        assume it's utf-8
-
-        """
-        self.bitcount = self.bits = 0
-        slen = unpack('B', self.input.read(1))[0]
-        return self.input.read(slen).decode('utf-8')
-
-    def read_longstr(self):
-        """Read a string that's up to 2**32 bytes.
-
-        The encoding isn't specified in the AMQP spec, so
-        assume it's utf-8
-
-        """
-        self.bitcount = self.bits = 0
-        slen = unpack('>I', self.input.read(4))[0]
-        return self.input.read(slen).decode('utf-8')
-
-    def read_table(self):
-        """Read an AMQP table, and return as a Python dictionary."""
-        self.bitcount = self.bits = 0
-        tlen = unpack('>I', self.input.read(4))[0]
-        table_data = AMQPReader(self.input.read(tlen))
-        result = {}
-        while table_data.input.tell() < tlen:
-            name = table_data.read_shortstr()
-            val = table_data.read_item()
-            result[name] = val
-        return result
-
-    def read_item(self):
-        ftype = ord(self.input.read(1))
-
-        # 'S': long string
-        if ftype == 83:
-            val = self.read_longstr()
-        # 's': short string
-        elif ftype == 115:
-            val = self.read_shortstr()
-        # 'b': short-short int
-        elif ftype == 98:
-            val, = unpack('>B', self.input.read(1))
-        # 'B': short-short unsigned int
-        elif ftype == 66:
-            val, = unpack('>b', self.input.read(1))
-        # 'U': short int
-        elif ftype == 85:
-            val, = unpack('>h', self.input.read(2))
-        # 'u': short unsigned int
-        elif ftype == 117:
-            val, = unpack('>H', self.input.read(2))
-        # 'I': long int
-        elif ftype == 73:
-            val, = unpack('>i', self.input.read(4))
-        # 'i': long unsigned int
-        elif ftype == 105:  # 'l'
-            val, = unpack('>I', self.input.read(4))
-        # 'L': long long int
-        elif ftype == 76:
-            val, = unpack('>q', self.input.read(8))
-        # 'l': long long unsigned int
-        elif ftype == 108:
-            val, = unpack('>Q', self.input.read(8))
-        # 'f': float
-        elif ftype == 102:
-            val, = unpack('>f', self.input.read(4))
-        # 'd': double
-        elif ftype == 100:
-            val = self.read_float()
-        # 'D': decimal
-        elif ftype == 68:
-            d = self.read_octet()
-            n, = unpack('>i', self.input.read(4))
-            val = Decimal(n) / Decimal(10 ** d)
-        # 'F': table
-        elif ftype == 70:
-            val = self.read_table()  # recurse
-        # 'A': array
-        elif ftype == 65:
-            val = self.read_array()
-        # 't' (bool)
-        elif ftype == 116:
-            val = self.read_bit()
-        # 'T': timestamp
-        elif ftype == 84:
-            val = self.read_timestamp()
-        # 'V': void
-        elif ftype == 86:
-            val = None
-        else:
-            raise FrameSyntaxError(
-                'Unknown value in table: {0!r} ({1!r})'.format(
-                    ftype, type(ftype)))
-        return val
-
-    def read_array(self):
-        array_length = unpack('>I', self.input.read(4))[0]
-        array_data = AMQPReader(self.input.read(array_length))
-        result = []
-        while array_data.input.tell() < array_length:
-            val = array_data.read_item()
-            result.append(val)
-        return result
-
-    def read_timestamp(self):
-        """Read and AMQP timestamp, which is a 64-bit integer representing
-        seconds since the Unix epoch in 1-second resolution.
-
-        Return as a Python datetime.datetime object,
-        expressed as localtime.
-
-        """
-        return datetime.utcfromtimestamp(self.read_longlong())
-
-
-class AMQPWriter(object):
-    """Convert higher-level AMQP types to bytestreams."""
-
-    def __init__(self, dest=None):
-        """dest may be a file-type object (with a write() method).  If None
-        then a BytesIO is created, and the contents can be accessed with
-        this class's getvalue() method."""
-        self.out = BytesIO() if dest is None else dest
-        self.bits = []
-        self.bitcount = 0
-
-    def _flushbits(self):
-        if self.bits:
-            out = self.out
-            for b in self.bits:
-                out.write(pack('B', b))
-            self.bits = []
-            self.bitcount = 0
-
-    def close(self):
-        """Pass through if possible to any file-like destinations."""
-        try:
-            self.out.close()
-        except AttributeError:
-            pass
-
-    def flush(self):
-        """Pass through if possible to any file-like destinations."""
-        try:
-            self.out.flush()
-        except AttributeError:
-            pass
-
-    def getvalue(self):
-        """Get what's been encoded so far if we're working with a BytesIO."""
-        self._flushbits()
-        return self.out.getvalue()
-
-    def write(self, s):
-        """Write a plain Python string with no special encoding in Python 2.x,
-        or bytes in Python 3.x"""
-        self._flushbits()
-        self.out.write(s)
-
-    def write_bit(self, b):
-        """Write a boolean value."""
-        b = 1 if b else 0
-        shift = self.bitcount % 8
-        if shift == 0:
-            self.bits.append(0)
-        self.bits[-1] |= (b << shift)
-        self.bitcount += 1
-
-    def write_octet(self, n):
-        """Write an integer as an unsigned 8-bit value."""
-        if n < 0 or n > 255:
-            raise FrameSyntaxError(
-                'Octet {0!r} out of range 0..255'.format(n))
-        self._flushbits()
-        self.out.write(pack('B', n))
-
-    def write_short(self, n):
-        """Write an integer as an unsigned 16-bit value."""
-        if n < 0 or n > 65535:
-            raise FrameSyntaxError(
-                'Octet {0!r} out of range 0..65535'.format(n))
-        self._flushbits()
-        self.out.write(pack('>H', int(n)))
-
-    def write_long(self, n):
-        """Write an integer as an unsigned2 32-bit value."""
-        if n < 0 or n >= 4294967296:
-            raise FrameSyntaxError(
-                'Octet {0!r} out of range 0..2**31-1'.format(n))
-        self._flushbits()
-        self.out.write(pack('>I', n))
-
-    def write_longlong(self, n):
-        """Write an integer as an unsigned 64-bit value."""
-        if n < 0 or n >= 18446744073709551616:
-            raise FrameSyntaxError(
-                'Octet {0!r} out of range 0..2**64-1'.format(n))
-        self._flushbits()
-        self.out.write(pack('>Q', n))
-
-    def write_shortstr(self, s):
-        """Write a string up to 255 bytes long (after any encoding).
-
-        If passed a unicode string, encode with UTF-8.
-
-        """
-        self._flushbits()
-        if isinstance(s, string):
-            s = s.encode('utf-8')
-        if len(s) > 255:
-            raise FrameSyntaxError(
-                'Shortstring overflow ({0} > 255)'.format(len(s)))
-        self.write_octet(len(s))
-        self.out.write(s)
-
-    def write_longstr(self, s):
-        """Write a string up to 2**32 bytes long after encoding.
-
-        If passed a unicode string, encode as UTF-8.
-
-        """
-        self._flushbits()
-        if isinstance(s, string):
-            s = s.encode('utf-8')
-        self.write_long(len(s))
-        self.out.write(s)
-
-    def write_table(self, d):
-        """Write out a Python dictionary made of up string keys, and values
-        that are strings, signed integers, Decimal, datetime.datetime, or
-        sub-dictionaries following the same constraints."""
-        self._flushbits()
-        table_data = AMQPWriter()
-        for k, v in items(d):
-            table_data.write_shortstr(k)
-            table_data.write_item(v, k)
-        table_data = table_data.getvalue()
-        self.write_long(len(table_data))
-        self.out.write(table_data)
-
-    def write_item(self, v, k=None):
-        if isinstance(v, (string_t, bytes)):
-            if isinstance(v, string):
-                v = v.encode('utf-8')
-            self.write(b'S')
-            self.write_longstr(v)
-        elif isinstance(v, bool):
-            self.write(pack('>cB', b't', int(v)))
-        elif isinstance(v, float):
-            self.write(pack('>cd', b'd', v))
-        elif isinstance(v, int_types):
-            self.write(pack('>ci', b'I', v))
-        elif isinstance(v, Decimal):
-            self.write(b'D')
-            sign, digits, exponent = v.as_tuple()
-            v = 0
-            for d in digits:
-                v = (v * 10) + d
-            if sign:
-                v = -v
-            self.write_octet(-exponent)
-            self.write(pack('>i', v))
-        elif isinstance(v, datetime):
-            self.write(b'T')
-            self.write_timestamp(v)
-        elif isinstance(v, dict):
-            self.write(b'F')
-            self.write_table(v)
-        elif isinstance(v, (list, tuple)):
-            self.write(b'A')
-            self.write_array(v)
-        elif v is None:
-            self.write(b'V')
-        else:
-            err = (ILLEGAL_TABLE_TYPE_WITH_KEY.format(type(v), k, v) if k
-                   else ILLEGAL_TABLE_TYPE.format(type(v), v))
-            raise FrameSyntaxError(err)
-
-    def write_array(self, a):
-        array_data = AMQPWriter()
-        for v in a:
-            array_data.write_item(v)
-        array_data = array_data.getvalue()
-        self.write_long(len(array_data))
-        self.out.write(array_data)
-
-    def write_timestamp(self, v):
-        """Write out a Python datetime.datetime object as a 64-bit integer
-        representing seconds since the Unix epoch."""
-        self.out.write(pack('>Q', long_t(calendar.timegm(v.utctimetuple()))))
-
-
-class GenericContent(object):
-    """Abstract base class for AMQP content.
-
-    Subclasses should override the PROPERTIES attribute.
-
-    """
-    PROPERTIES = [('dummy', 'shortstr')]
-
-    def __init__(self, **props):
-        """Save the properties appropriate to this AMQP content type
-        in a 'properties' dictionary."""
-        d = {}
-        for propname, _ in self.PROPERTIES:
-            if propname in props:
-                d[propname] = props[propname]
-            # FIXME: should we ignore unknown properties?
-
-        self.properties = d
-
-    def __eq__(self, other):
-        """Check if this object has the same properties as another
-        content object."""
-        try:
-            return self.properties == other.properties
-        except AttributeError:
-            return NotImplemented
-
-    def __getattr__(self, name):
-        """Look for additional properties in the 'properties'
-        dictionary, and if present - the 'delivery_info'
-        dictionary."""
-        if name == '__setstate__':
-            # Allows pickling/unpickling to work
-            raise AttributeError('__setstate__')
-
-        if name in self.properties:
-            return self.properties[name]
-
-        if 'delivery_info' in self.__dict__ \
-                and name in self.delivery_info:
-            return self.delivery_info[name]
-
-        raise AttributeError(name)
-
-    def _load_properties(self, raw_bytes):
-        """Given the raw bytes containing the property-flags and property-list
-        from a content-frame-header, parse and insert into a dictionary
-        stored in this object as an attribute named 'properties'."""
-        r = AMQPReader(raw_bytes)
-
-        #
-        # Read 16-bit shorts until we get one with a low bit set to zero
-        #
-        flags = []
-        while 1:
-            flag_bits = r.read_short()
-            flags.append(flag_bits)
-            if flag_bits & 1 == 0:
-                break
-
-        shift = 0
-        d = {}
-        for key, proptype in self.PROPERTIES:
-            if shift == 0:
-                if not flags:
-                    break
-                flag_bits, flags = flags[0], flags[1:]
-                shift = 15
-            if flag_bits & (1 << shift):
-                d[key] = getattr(r, 'read_' + proptype)()
-            shift -= 1
-
-        self.properties = d
-
-    def _serialize_properties(self):
-        """serialize the 'properties' attribute (a dictionary) into
-        the raw bytes making up a set of property flags and a
-        property list, suitable for putting into a content frame header."""
-        shift = 15
-        flag_bits = 0
-        flags = []
-        raw_bytes = AMQPWriter()
-        for key, proptype in self.PROPERTIES:
-            val = self.properties.get(key, None)
-            if val is not None:
-                if shift == 0:
-                    flags.append(flag_bits)
-                    flag_bits = 0
-                    shift = 15
-
-                flag_bits |= (1 << shift)
-                if proptype != 'bit':
-                    getattr(raw_bytes, 'write_' + proptype)(val)
-
-            shift -= 1
-
-        flags.append(flag_bits)
-        result = AMQPWriter()
-        for flag_bits in flags:
-            result.write_short(flag_bits)
-        result.write(raw_bytes.getvalue())
-
-        return result.getvalue()
diff --git a/src/rez/vendor/amqp/transport.py b/src/rez/vendor/amqp/transport.py
deleted file mode 100644
index 7cec03ed2..000000000
--- a/src/rez/vendor/amqp/transport.py
+++ /dev/null
@@ -1,303 +0,0 @@
-# Copyright (C) 2009 Barry Pederson <bp@barryp.org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
-from __future__ import absolute_import
-
-import errno
-import re
-import socket
-
-# Jython does not have this attribute
-try:
-    from socket import SOL_TCP
-except ImportError:  # pragma: no cover
-    from socket import IPPROTO_TCP as SOL_TCP  # noqa
-
-try:
-    from ssl import SSLError
-except ImportError:
-    class SSLError(Exception):  # noqa
-        pass
-
-from struct import pack, unpack
-
-from .exceptions import UnexpectedFrame
-from .utils import get_errno, set_cloexec
-
-_UNAVAIL = errno.EAGAIN, errno.EINTR, errno.ENOENT
-
-AMQP_PORT = 5672
-
-EMPTY_BUFFER = bytes()
-
-# Yes, Advanced Message Queuing Protocol Protocol is redundant
-AMQP_PROTOCOL_HEADER = 'AMQP\x01\x01\x00\x09'.encode('latin_1')
-
-# Match things like: [fe80::1]:5432, from RFC 2732
-IPV6_LITERAL = re.compile(r'\[([\.0-9a-f:]+)\](?::(\d+))?')
-
-
-class _AbstractTransport(object):
-    """Common superclass for TCP and SSL transports"""
-    connected = False
-
-    def __init__(self, host, connect_timeout):
-        self.connected = True
-        msg = None
-        port = AMQP_PORT
-
-        m = IPV6_LITERAL.match(host)
-        if m:
-            host = m.group(1)
-            if m.group(2):
-                port = int(m.group(2))
-        else:
-            if ':' in host:
-                host, port = host.rsplit(':', 1)
-                port = int(port)
-
-        self.sock = None
-        last_err = None
-        for res in socket.getaddrinfo(host, port, 0,
-                                      socket.SOCK_STREAM, SOL_TCP):
-            af, socktype, proto, canonname, sa = res
-            try:
-                self.sock = socket.socket(af, socktype, proto)
-                try:
-                    set_cloexec(self.sock, True)
-                except NotImplementedError:
-                    pass
-                self.sock.settimeout(connect_timeout)
-                self.sock.connect(sa)
-            except socket.error as exc:
-                msg = exc
-                self.sock.close()
-                self.sock = None
-                last_err = msg
-                continue
-            break
-
-        if not self.sock:
-            # Didn't connect, return the most recent error message
-            raise socket.error(last_err)
-
-        try:
-            self.sock.settimeout(None)
-            self.sock.setsockopt(SOL_TCP, socket.TCP_NODELAY, 1)
-            self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
-
-            self._setup_transport()
-
-            self._write(AMQP_PROTOCOL_HEADER)
-        except (OSError, IOError, socket.error) as exc:
-            if get_errno(exc) not in _UNAVAIL:
-                self.connected = False
-            raise
-
-    def __del__(self):
-        try:
-            # socket module may have been collected by gc
-            # if this is called by a thread at shutdown.
-            if socket is not None:
-                try:
-                    self.close()
-                except socket.error:
-                    pass
-        finally:
-            self.sock = None
-
-    def _read(self, n, initial=False):
-        """Read exactly n bytes from the peer"""
-        raise NotImplementedError('Must be overriden in subclass')
-
-    def _setup_transport(self):
-        """Do any additional initialization of the class (used
-        by the subclasses)."""
-        pass
-
-    def _shutdown_transport(self):
-        """Do any preliminary work in shutting down the connection."""
-        pass
-
-    def _write(self, s):
-        """Completely write a string to the peer."""
-        raise NotImplementedError('Must be overriden in subclass')
-
-    def close(self):
-        if self.sock is not None:
-            self._shutdown_transport()
-            # Call shutdown first to make sure that pending messages
-            # reach the AMQP broker if the program exits after
-            # calling this method.
-            self.sock.shutdown(socket.SHUT_RDWR)
-            self.sock.close()
-            self.sock = None
-        self.connected = False
-
-    def read_frame(self, unpack=unpack):
-        read = self._read
-        read_frame_buffer = EMPTY_BUFFER
-        try:
-            frame_header = read(7, True)
-            read_frame_buffer += frame_header
-            frame_type, channel, size = unpack('>BHI', frame_header)
-            payload = read(size)
-            read_frame_buffer += payload
-            ch = ord(read(1))
-        except socket.timeout:
-            self._read_buffer = read_frame_buffer + self._read_buffer
-            raise
-        except (OSError, IOError, socket.error) as exc:
-            # Don't disconnect for ssl read time outs
-            # http://bugs.python.org/issue10272
-            if isinstance(exc, SSLError) and 'timed out' in str(exc):
-                raise socket.timeout()
-            if get_errno(exc) not in _UNAVAIL:
-                self.connected = False
-            raise
-        if ch == 206:  # '\xce'
-            return frame_type, channel, payload
-        else:
-            raise UnexpectedFrame(
-                'Received 0x{0:02x} while expecting 0xce'.format(ch))
-
-    def write_frame(self, frame_type, channel, payload):
-        size = len(payload)
-        try:
-            self._write(pack(
-                '>BHI%dsB' % size,
-                frame_type, channel, size, payload, 0xce,
-            ))
-        except socket.timeout:
-            raise
-        except (OSError, IOError, socket.error) as exc:
-            if get_errno(exc) not in _UNAVAIL:
-                self.connected = False
-            raise
-
-
-class SSLTransport(_AbstractTransport):
-    """Transport that works over SSL"""
-
-    def __init__(self, host, connect_timeout, ssl):
-        if isinstance(ssl, dict):
-            self.sslopts = ssl
-        self._read_buffer = EMPTY_BUFFER
-        super(SSLTransport, self).__init__(host, connect_timeout)
-
-    def _setup_transport(self):
-        """Wrap the socket in an SSL object."""
-
-        # note: moved here in rez in order to avoid ssl import unless necessary
-        # https://github.com/nerdvegas/rez/issues/910
-        import ssl
-
-        if hasattr(self, 'sslopts'):
-            self.sock = ssl.wrap_socket(self.sock, **self.sslopts)
-        else:
-            self.sock = ssl.wrap_socket(self.sock)
-        self.sock.do_handshake()
-        self._quick_recv = self.sock.read
-
-    def _shutdown_transport(self):
-        """Unwrap a Python 2.6 SSL socket, so we can call shutdown()"""
-        if self.sock is not None:
-            try:
-                unwrap = self.sock.unwrap
-            except AttributeError:
-                return
-            self.sock = unwrap()
-
-    def _read(self, n, initial=False,
-              _errnos=(errno.ENOENT, errno.EAGAIN, errno.EINTR)):
-        # According to SSL_read(3), it can at most return 16kb of data.
-        # Thus, we use an internal read buffer like TCPTransport._read
-        # to get the exact number of bytes wanted.
-        recv = self._quick_recv
-        rbuf = self._read_buffer
-        try:
-            while len(rbuf) < n:
-                try:
-                    s = recv(n - len(rbuf))  # see note above
-                except socket.error as exc:
-                    # ssl.sock.read may cause ENOENT if the
-                    # operation couldn't be performed (Issue celery#1414).
-                    if not initial and exc.errno in _errnos:
-                        continue
-                    raise
-                if not s:
-                    raise IOError('Socket closed')
-                rbuf += s
-        except:
-            self._read_buffer = rbuf
-            raise
-        result, self._read_buffer = rbuf[:n], rbuf[n:]
-        return result
-
-    def _write(self, s):
-        """Write a string out to the SSL socket fully."""
-        try:
-            write = self.sock.write
-        except AttributeError:
-            # Works around a bug in python socket library
-            raise IOError('Socket closed')
-        else:
-            while s:
-                n = write(s)
-                if not n:
-                    raise IOError('Socket closed')
-                s = s[n:]
-
-
-class TCPTransport(_AbstractTransport):
-    """Transport that deals directly with TCP socket."""
-
-    def _setup_transport(self):
-        """Setup to _write() directly to the socket, and
-        do our own buffered reads."""
-        self._write = self.sock.sendall
-        self._read_buffer = EMPTY_BUFFER
-        self._quick_recv = self.sock.recv
-
-    def _read(self, n, initial=False, _errnos=(errno.EAGAIN, errno.EINTR)):
-        """Read exactly n bytes from the socket"""
-        recv = self._quick_recv
-        rbuf = self._read_buffer
-        try:
-            while len(rbuf) < n:
-                try:
-                    s = recv(n - len(rbuf))
-                except socket.error as exc:
-                    if not initial and exc.errno in _errnos:
-                        continue
-                    raise
-                if not s:
-                    raise IOError('Socket closed')
-                rbuf += s
-        except:
-            self._read_buffer = rbuf
-            raise
-
-        result, self._read_buffer = rbuf[:n], rbuf[n:]
-        return result
-
-
-def create_transport(host, connect_timeout, ssl=False):
-    """Given a few parameters from the Connection constructor,
-    select and create a subclass of _AbstractTransport."""
-    if ssl:
-        return SSLTransport(host, connect_timeout, ssl)
-    else:
-        return TCPTransport(host, connect_timeout)
diff --git a/src/rez/vendor/amqp/utils.py b/src/rez/vendor/amqp/utils.py
deleted file mode 100644
index 900d2aace..000000000
--- a/src/rez/vendor/amqp/utils.py
+++ /dev/null
@@ -1,102 +0,0 @@
-from __future__ import absolute_import
-
-import sys
-
-try:
-    import fcntl
-except ImportError:
-    fcntl = None   # noqa
-
-
-class promise(object):
-    if not hasattr(sys, 'pypy_version_info'):
-        __slots__ = tuple(
-            'fun args kwargs value ready failed '
-            ' on_success on_error calls'.split()
-        )
-
-    def __init__(self, fun, args=(), kwargs=(),
-                 on_success=None, on_error=None):
-        self.fun = fun
-        self.args = args
-        self.kwargs = kwargs
-        self.ready = False
-        self.failed = False
-        self.on_success = on_success
-        self.on_error = on_error
-        self.value = None
-        self.calls = 0
-
-    def __repr__(self):
-        return '<$: {0.fun.__name__}(*{0.args!r}, **{0.kwargs!r})'.format(
-            self,
-        )
-
-    def __call__(self, *args, **kwargs):
-        try:
-            self.value = self.fun(
-                *self.args + args if self.args else args,
-                **dict(self.kwargs, **kwargs) if self.kwargs else kwargs
-            )
-        except Exception as exc:
-            self.set_error_state(exc)
-        else:
-            if self.on_success:
-                self.on_success(self.value)
-        finally:
-            self.ready = True
-            self.calls += 1
-
-    def then(self, callback=None, on_error=None):
-        self.on_success = callback
-        self.on_error = on_error
-        return callback
-
-    def set_error_state(self, exc):
-        self.failed = True
-        if self.on_error is None:
-            raise
-        self.on_error(exc)
-
-    def throw(self, exc):
-        try:
-            raise exc
-        except exc.__class__ as with_cause:
-            self.set_error_state(with_cause)
-
-
-def noop():
-    return promise(lambda *a, **k: None)
-
-
-try:
-    from os import set_cloexec  # Python 3.4?
-except ImportError:
-    def set_cloexec(fd, cloexec):  # noqa
-        try:
-            FD_CLOEXEC = fcntl.FD_CLOEXEC
-        except AttributeError:
-            raise NotImplementedError(
-                'close-on-exec flag not supported on this platform',
-            )
-        flags = fcntl.fcntl(fd, fcntl.F_GETFD)
-        if cloexec:
-            flags |= FD_CLOEXEC
-        else:
-            flags &= ~FD_CLOEXEC
-        return fcntl.fcntl(fd, fcntl.F_SETFD, flags)
-
-
-def get_errno(exc):
-    """:exc:`socket.error` and :exc:`IOError` first got
-    the ``.errno`` attribute in Py2.7"""
-    try:
-        return exc.errno
-    except AttributeError:
-        try:
-            # e.args = (errno, reason)
-            if isinstance(exc.args, tuple) and len(exc.args) == 2:
-                return exc.args[0]
-        except AttributeError:
-            pass
-    return 0
diff --git a/src/rez/vendor/version/__init__.py b/src/rez/vendor/version/__init__.py
index e69de29bb..582e11b0a 100644
--- a/src/rez/vendor/version/__init__.py
+++ b/src/rez/vendor/version/__init__.py
@@ -0,0 +1,13 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rez/vendor/version/requirement.py b/src/rez/vendor/version/requirement.py
index 4c80adebd..f8c09e8ea 100644
--- a/src/rez/vendor/version/requirement.py
+++ b/src/rez/vendor/version/requirement.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.vendor.version.version import Version, VersionRange
 from rez.vendor.version.util import _Common
 import re
diff --git a/src/rez/vendor/version/util.py b/src/rez/vendor/version/util.py
index 21a420044..a66e129bc 100644
--- a/src/rez/vendor/version/util.py
+++ b/src/rez/vendor/version/util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from itertools import groupby
 
 
diff --git a/src/rez/vendor/version/version.py b/src/rez/vendor/version/version.py
index a8597e363..56b9d6b45 100644
--- a/src/rez/vendor/version/version.py
+++ b/src/rez/vendor/version/version.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Implements a well defined versioning schema.
 
diff --git a/src/rez/wrapper.py b/src/rez/wrapper.py
index 9b4e4f32a..9acf24d63 100644
--- a/src/rez/wrapper.py
+++ b/src/rez/wrapper.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from rez.resolved_context import ResolvedContext
@@ -269,19 +284,3 @@ def _print_conflicting(cls, variants):
         vars_str = " ".join(x.qualified_package_name for x in variants)
         msg = "Packages (in conflict): %s" % vars_str
         Printer()(msg, critical)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/__init__.py b/src/rezgui/__init__.py
index 069287af2..0a2534976 100644
--- a/src/rezgui/__init__.py
+++ b/src/rezgui/__init__.py
@@ -1,18 +1,17 @@
-organisation_name = "nerdvegas"
-application_name = "rez-gui"
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+organisation_name = "nerdvegas"
+application_name = "rez-gui"
diff --git a/src/rezgui/app.py b/src/rezgui/app.py
index 5f7142690..36528f3b6 100644
--- a/src/rezgui/app.py
+++ b/src/rezgui/app.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rezgui.objects.App import app
 from rezgui.windows.MainWindow import MainWindow
 import os.path
@@ -43,19 +58,3 @@ def run(opts=None, parser=None):
             main_window.cascade()
 
     sys.exit(app.exec_())
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/AboutDialog.py b/src/rezgui/dialogs/AboutDialog.py
index 673ac7ab3..e89ccf144 100644
--- a/src/rezgui/dialogs/AboutDialog.py
+++ b/src/rezgui/dialogs/AboutDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import create_pane, get_icon
 from rez import __version__
@@ -35,19 +50,3 @@ def sizeHint(self):
     def _goto_github(self):
         import webbrowser
         webbrowser.open_new("https://github.com/nerdvegas/rez")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/BrowsePackageDialog.py b/src/rezgui/dialogs/BrowsePackageDialog.py
index 7de65731d..cf54291c2 100644
--- a/src/rezgui/dialogs/BrowsePackageDialog.py
+++ b/src/rezgui/dialogs/BrowsePackageDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.util import create_pane
 from rezgui.mixins.StoreSizeMixin import StoreSizeMixin
@@ -57,19 +72,3 @@ def _set_package(self):
     def _ok(self):
         self.package = self.widget.current_package()
         self.close()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/ImageViewerDialog.py b/src/rezgui/dialogs/ImageViewerDialog.py
index bf878af15..04182965c 100644
--- a/src/rezgui/dialogs/ImageViewerDialog.py
+++ b/src/rezgui/dialogs/ImageViewerDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.mixins.StoreSizeMixin import StoreSizeMixin
 from rezgui.widgets.ImageViewerWidget import ImageViewerWidget
@@ -22,19 +37,3 @@ def __init__(self, image_file, parent=None):
         close_btn.clicked.connect(self.close)
         fit_checkbox.stateChanged.connect(self.image_viewer.fit_to_window)
         app.config.attach(fit_checkbox, "resolve/fit_graph")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/ProcessDialog.py b/src/rezgui/dialogs/ProcessDialog.py
index 2e53c14ef..a3f5078bf 100644
--- a/src/rezgui/dialogs/ProcessDialog.py
+++ b/src/rezgui/dialogs/ProcessDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from Qt import QtCore, QtWidgets
@@ -87,19 +102,3 @@ def _update(self):
 
         if self.ended and self.output_ended:
             self.timer.stop()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/ResolveDialog.py b/src/rezgui/dialogs/ResolveDialog.py
index a1ef92772..aa1beaff3 100644
--- a/src/rezgui/dialogs/ResolveDialog.py
+++ b/src/rezgui/dialogs/ResolveDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import create_pane
 from rezgui.mixins.StoreSizeMixin import StoreSizeMixin
@@ -326,19 +341,3 @@ def _set_progress(self, done=True):
             self.bar.setValue(0)
         elif done is None:
             self.bar.setRange(0, 0)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/VariantVersionsDialog.py b/src/rezgui/dialogs/VariantVersionsDialog.py
index 4e2bd2762..66592c7db 100644
--- a/src/rezgui/dialogs/VariantVersionsDialog.py
+++ b/src/rezgui/dialogs/VariantVersionsDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.mixins.StoreSizeMixin import StoreSizeMixin
 from rezgui.widgets.VariantVersionsWidget import VariantVersionsWidget
@@ -20,19 +35,3 @@ def __init__(self, context_model, variant, reference_variant=None, parent=None):
 
         self.versions_widget.set_variant(variant)
         self.versions_widget.closeWindow.connect(self.close)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/WriteGraphDialog.py b/src/rezgui/dialogs/WriteGraphDialog.py
index 407978894..e5602e672 100644
--- a/src/rezgui/dialogs/WriteGraphDialog.py
+++ b/src/rezgui/dialogs/WriteGraphDialog.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import create_pane
 from rez.utils.graph_utils import save_graph, prune_graph
@@ -131,19 +146,3 @@ def view_graph(graph_str, parent=None, prune_to=None):
     graph_file_lookup[h] = filepath
     dlg = ImageViewerDialog(filepath, parent)
     dlg.exec_()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/dialogs/__init__.py b/src/rezgui/dialogs/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/dialogs/__init__.py
+++ b/src/rezgui/dialogs/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezgui/mixins/ContextViewMixin.py b/src/rezgui/mixins/ContextViewMixin.py
index f63aaee39..4a2c57ab9 100644
--- a/src/rezgui/mixins/ContextViewMixin.py
+++ b/src/rezgui/mixins/ContextViewMixin.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore
 from rezgui.models.ContextModel import ContextModel
 
@@ -33,19 +48,3 @@ def _connect(self, b):
             sig = self.context_model.dataChanged
             fn = sig.connect if b else sig.disconnect
             fn(self._contextChanged)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/mixins/StoreSizeMixin.py b/src/rezgui/mixins/StoreSizeMixin.py
index 8b36982f5..9062b1d7a 100644
--- a/src/rezgui/mixins/StoreSizeMixin.py
+++ b/src/rezgui/mixins/StoreSizeMixin.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 
 
@@ -19,19 +34,3 @@ def closeEvent(self, event):
         self.config.setValue(self.config_key + "/width", size.width())
         self.config.setValue(self.config_key + "/height", size.height())
         self.config.sync()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/mixins/__init__.py b/src/rezgui/mixins/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/mixins/__init__.py
+++ b/src/rezgui/mixins/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezgui/models/ContextModel.py b/src/rezgui/models/ContextModel.py
index aedd1a6f0..1d94fd24b 100644
--- a/src/rezgui/models/ContextModel.py
+++ b/src/rezgui/models/ContextModel.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore
 from rez.resolved_context import ResolvedContext, PatchLock, get_lock_request
 from rez.package_filter import PackageFilterList
@@ -251,19 +266,3 @@ def _attr_changed(self, attr, value, flags):
             return
         setattr(self, attr, value)
         self._changed(flags)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/models/__init__.py b/src/rezgui/models/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/models/__init__.py
+++ b/src/rezgui/models/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezgui/objects/App.py b/src/rezgui/objects/App.py
index 86839d730..ac1f25e1d 100644
--- a/src/rezgui/objects/App.py
+++ b/src/rezgui/objects/App.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.objects.Config import Config
 #from rezgui.objects.ProcessTrackerThread import ProcessTrackerThread
@@ -88,19 +103,3 @@ def execute_shell(self, context, command=None, terminal=False, **Popen_args):
 
 # app singleton
 app = App()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/objects/Config.py b/src/rezgui/objects/Config.py
index e59437120..070785197 100644
--- a/src/rezgui/objects/Config.py
+++ b/src/rezgui/objects/Config.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from functools import partial
 
@@ -127,19 +142,3 @@ def _default_value(self, key):
             except KeyError:
                 raise ValueError("No such application setting: %r" % key)
         return value
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/objects/LoadPackagesThread.py b/src/rezgui/objects/LoadPackagesThread.py
index 22e2067f4..8ca457ec8 100644
--- a/src/rezgui/objects/LoadPackagesThread.py
+++ b/src/rezgui/objects/LoadPackagesThread.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore
 from rez.packages import iter_packages
 
@@ -41,19 +56,3 @@ def run(self):
 
         if not self.stopped:
             self.finished.emit(packages)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/objects/ProcessTrackerThread.py b/src/rezgui/objects/ProcessTrackerThread.py
index bdeb42c18..0099db396 100644
--- a/src/rezgui/objects/ProcessTrackerThread.py
+++ b/src/rezgui/objects/ProcessTrackerThread.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore
 from threading import Lock
 import time
@@ -95,19 +110,3 @@ def _remove_proc(self, context_id, process_name, pid):
         if not procs:
             del self.processes[handle]
         return nprocs
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/objects/ResolveThread.py b/src/rezgui/objects/ResolveThread.py
index a0bf867b7..380907204 100644
--- a/src/rezgui/objects/ResolveThread.py
+++ b/src/rezgui/objects/ResolveThread.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 from Qt import QtCore
@@ -55,19 +70,3 @@ def _callback(self, solver_state):
     def _package_load_callback(self, package):
         if self.buf:
             print("loading %s..." % str(package), file=self.buf)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/objects/__init__.py b/src/rezgui/objects/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/objects/__init__.py
+++ b/src/rezgui/objects/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezgui/util.py b/src/rezgui/util.py
index c634bdd0e..31c0b78e1 100644
--- a/src/rezgui/util.py
+++ b/src/rezgui/util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets, QtGui
 from rez.utils.formatting import readable_time_duration
 import os.path
@@ -148,19 +163,3 @@ def update_font(widget, italic=None, bold=None, underline=None):
     if underline is not None:
         font.setUnderline(underline)
     widget.setFont(font)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/BrowsePackagePane.py b/src/rezgui/widgets/BrowsePackagePane.py
index b19f0ad9b..551eb9327 100644
--- a/src/rezgui/widgets/BrowsePackagePane.py
+++ b/src/rezgui/widgets/BrowsePackagePane.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.widgets.BrowsePackageWidget import BrowsePackageWidget
 from rezgui.widgets.ContextSettingsWidget import ContextSettingsWidget
@@ -25,19 +40,3 @@ def __init__(self, context_model=None, parent=None):
         self.addTab(self.browse, icon, "packages")
         icon = get_icon("cog", as_qicon=True)
         self.addTab(self.settings, icon, "settings")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/BrowsePackageWidget.py b/src/rezgui/widgets/BrowsePackageWidget.py
index 79bf42d9f..84863a71f 100644
--- a/src/rezgui/widgets/BrowsePackageWidget.py
+++ b/src/rezgui/widgets/BrowsePackageWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.widgets.ConfiguredSplitter import ConfiguredSplitter
 from rezgui.widgets.PackageLineEdit import PackageLineEdit
@@ -68,19 +83,3 @@ def _set_package(self):
         package = self.versions_table.current_package()
         self.package_tab.set_package(package)
         self.packageSelected.emit()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ChangelogEdit.py b/src/rezgui/widgets/ChangelogEdit.py
index cfb1e91a1..1da4a8961 100644
--- a/src/rezgui/widgets/ChangelogEdit.py
+++ b/src/rezgui/widgets/ChangelogEdit.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 import cgi
 
@@ -52,19 +67,3 @@ def set_variant(self, variant):
             self.set_packages([variant])
 
         self.variant = variant
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ConfiguredSplitter.py b/src/rezgui/widgets/ConfiguredSplitter.py
index 810b22cfc..cb8bf9ff4 100644
--- a/src/rezgui/widgets/ConfiguredSplitter.py
+++ b/src/rezgui/widgets/ConfiguredSplitter.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 
 
@@ -30,19 +45,3 @@ def _splitterMoved(self, pos, index):
         for i, size in enumerate(sizes):
             key = "%s/size_%d" % (self.config_key, i)
             self.config.setValue(key, size)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextDetailsWidget.py b/src/rezgui/widgets/ContextDetailsWidget.py
index 5fe5c8e9a..af9b770de 100644
--- a/src/rezgui/widgets/ContextDetailsWidget.py
+++ b/src/rezgui/widgets/ContextDetailsWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets, QtGui
 from rezgui.util import create_pane
 from rezgui.widgets.ContextEnvironWidget import ContextEnvironWidget
@@ -96,19 +111,3 @@ def _update_code(self):
         self.code_edit.insertPlainText(code)
         self.code_edit.moveCursor(QtGui.QTextCursor.Start)
         self.code_pending = False
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextEnvironTable.py b/src/rezgui/widgets/ContextEnvironTable.py
index 994c3019a..0eb70623a 100644
--- a/src/rezgui/widgets/ContextEnvironTable.py
+++ b/src/rezgui/widgets/ContextEnvironTable.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets
 
 
@@ -71,19 +86,3 @@ def set_context(self, context):
         hh.setStretchLastSection(True)
         hh.setVisible(True)
         self.setEnabled(True)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextEnvironWidget.py b/src/rezgui/widgets/ContextEnvironWidget.py
index 6c8c8236f..789d384be 100644
--- a/src/rezgui/widgets/ContextEnvironWidget.py
+++ b/src/rezgui/widgets/ContextEnvironWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.widgets.ContextEnvironTable import ContextEnvironTable
 from rezgui.util import create_pane
@@ -38,19 +53,3 @@ def _set_split_char(self):
         index = self.split_combo.currentIndex()
         ch = self.split_entries[index][1]
         self.table.set_split_character(ch)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextManagerWidget.py b/src/rezgui/widgets/ContextManagerWidget.py
index ff294b0d0..7efd40ed8 100644
--- a/src/rezgui/widgets/ContextManagerWidget.py
+++ b/src/rezgui/widgets/ContextManagerWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import create_pane, get_icon, add_menu_action
 from rezgui.widgets.ContextToolsWidget import ContextToolsWidget
@@ -357,19 +372,3 @@ def _search_variant(self):
         self.popup = FindPopup(self.find_tbtn, "bottomLeft", words, parent=self)
         self.popup.find.connect(self.context_table.select_variant)
         self.popup.show()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextResolveTimeLabel.py b/src/rezgui/widgets/ContextResolveTimeLabel.py
index e3ec1bcda..6d16cfc83 100644
--- a/src/rezgui/widgets/ContextResolveTimeLabel.py
+++ b/src/rezgui/widgets/ContextResolveTimeLabel.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.models.ContextModel import ContextModel
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -34,19 +49,3 @@ def refresh(self):
     def _contextChanged(self, flags=0):
         if flags & ContextModel.CONTEXT_CHANGED:
             self.refresh()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextSettingsWidget.py b/src/rezgui/widgets/ContextSettingsWidget.py
index 24a53bce7..5da557b46 100644
--- a/src/rezgui/widgets/ContextSettingsWidget.py
+++ b/src/rezgui/widgets/ContextSettingsWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.util import create_pane
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -167,19 +182,3 @@ def _set_text(self, data):
     def _settingsChanged(self):
         self.discard_btn.setEnabled(True)
         self.apply_btn.setEnabled(True)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextTableWidget.py b/src/rezgui/widgets/ContextTableWidget.py
index 7dc15e952..b479d9ad7 100644
--- a/src/rezgui/widgets/ContextTableWidget.py
+++ b/src/rezgui/widgets/ContextTableWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets, QtGui
 from rezgui.util import update_font, create_pane, interp_color
 from rezgui.widgets.EffectivePackageCellWidget import EffectivePackageCellWidget
@@ -726,19 +741,3 @@ def _set_current_cell(self, row, column):
         edit = self.cellWidget(row, column)
         if edit:
             edit.setFocus()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ContextToolsWidget.py b/src/rezgui/widgets/ContextToolsWidget.py
index ee3f7de02..64de08b9a 100644
--- a/src/rezgui/widgets/ContextToolsWidget.py
+++ b/src/rezgui/widgets/ContextToolsWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets
 from rezgui.widgets.ToolWidget import ToolWidget
 from rezgui.models.ContextModel import ContextModel
@@ -93,19 +108,3 @@ def _instanceCountChanged(self, context_id, tool_name, num_procs):
         widget = self.tool_widgets.get(str(tool_name))
         if widget:
             widget.set_instance_count(num_procs)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/EffectivePackageCellWidget.py b/src/rezgui/widgets/EffectivePackageCellWidget.py
index 71b2110bb..79a650825 100644
--- a/src/rezgui/widgets/EffectivePackageCellWidget.py
+++ b/src/rezgui/widgets/EffectivePackageCellWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.util import create_pane, get_icon_widget, update_font
 from rez.resolved_context import PatchLock
@@ -21,19 +36,3 @@ def __init__(self, request, type_, parent=None):
         create_pane([icon_widget, (label, 1)], True, parent_widget=self,
                     compact=True)
         self.setEnabled(False)  # this widget always disabled by design
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/FindPopup.py b/src/rezgui/widgets/FindPopup.py
index 902ce8de1..6e30c0975 100644
--- a/src/rezgui/widgets/FindPopup.py
+++ b/src/rezgui/widgets/FindPopup.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import create_pane
 
@@ -49,19 +64,3 @@ def _find(self):
 
     def _find_again(self):
         self.edit.selectAll()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/IconButton.py b/src/rezgui/widgets/IconButton.py
index 17132da9f..b8abacbe6 100644
--- a/src/rezgui/widgets/IconButton.py
+++ b/src/rezgui/widgets/IconButton.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import get_icon
 
@@ -16,19 +31,3 @@ def __init__(self, icon_name, tooltip=None, parent=None):
 
     def mousePressEvent(self, event):
         self.clicked.emit(event.button())
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ImageViewerWidget.py b/src/rezgui/widgets/ImageViewerWidget.py
index 02fb3fd89..5833a7830 100644
--- a/src/rezgui/widgets/ImageViewerWidget.py
+++ b/src/rezgui/widgets/ImageViewerWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import create_pane
 
@@ -103,19 +118,3 @@ def fit_to_window(self, enabled):
 
     def _fit_in_view(self):
         self.view.fitInView(self.image_item, QtCore.Qt.KeepAspectRatio)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/PackageLineEdit.py b/src/rezgui/widgets/PackageLineEdit.py
index 46f1ad593..62cf584f9 100644
--- a/src/rezgui/widgets/PackageLineEdit.py
+++ b/src/rezgui/widgets/PackageLineEdit.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.models.ContextModel import ContextModel
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -149,19 +164,3 @@ def _err(msg, color="red"):
 
             if pkg.description:
                 self.setToolTip(pkg.description)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/PackageLoadingWidget.py b/src/rezgui/widgets/PackageLoadingWidget.py
index b99a677a3..2e0c9e709 100644
--- a/src/rezgui/widgets/PackageLoadingWidget.py
+++ b/src/rezgui/widgets/PackageLoadingWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import create_pane
 from rezgui.objects.LoadPackagesThread import LoadPackagesThread
@@ -119,19 +134,3 @@ def _packagesLoaded(self, id_, packages):
         if self.main_widget is not None:
             self.main_widget.show()
             self.loading_widget.hide()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/PackageSelectWidget.py b/src/rezgui/widgets/PackageSelectWidget.py
index 05cb864d0..54c34b133 100644
--- a/src/rezgui/widgets/PackageSelectWidget.py
+++ b/src/rezgui/widgets/PackageSelectWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import update_font, create_pane
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -72,19 +87,3 @@ def _browse_package(self, button):
             txt = dlg.package.qualified_name
             self.setText(txt)
         self.setFocus()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/PackageTabWidget.py b/src/rezgui/widgets/PackageTabWidget.py
index e350d5f38..70ba0347d 100644
--- a/src/rezgui/widgets/PackageTabWidget.py
+++ b/src/rezgui/widgets/PackageTabWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.util import get_icon
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -127,19 +142,3 @@ def _tabChanged(self, index):
         widget = self.widget(index)
         if widget.variant != self.variant:
             widget.set_variant(self.variant)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/PackageVersionsTable.py b/src/rezgui/widgets/PackageVersionsTable.py
index 213f7a3ff..196137f69 100644
--- a/src/rezgui/widgets/PackageVersionsTable.py
+++ b/src/rezgui/widgets/PackageVersionsTable.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets, QtGui
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
 from rezgui.models.ContextModel import ContextModel
@@ -130,19 +145,3 @@ def set_package_name(self, package_name):
     def _contextChanged(self, flags=0):
         if flags & ContextModel.PACKAGES_PATH_CHANGED:
             self.refresh()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/SearchableTextEdit.py b/src/rezgui/widgets/SearchableTextEdit.py
index 4704f6f32..b5443a8b2 100644
--- a/src/rezgui/widgets/SearchableTextEdit.py
+++ b/src/rezgui/widgets/SearchableTextEdit.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets, QtGui
 from rezgui.widgets.FindPopup import FindPopup
 
@@ -33,19 +48,3 @@ def _find_text(self, word):
             # search from top
             self.moveCursor(QtGui.QTextCursor.Start)
             self.find(word)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/StreamableTextEdit.py b/src/rezgui/widgets/StreamableTextEdit.py
index ffa3065bb..a67886531 100644
--- a/src/rezgui/widgets/StreamableTextEdit.py
+++ b/src/rezgui/widgets/StreamableTextEdit.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtGui
 from rezgui.widgets.SearchableTextEdit import SearchableTextEdit
 import threading
@@ -50,19 +65,3 @@ def _write(self, txt):
         self.moveCursor(QtGui.QTextCursor.End)
         self.insertPlainText(txt)
         self.moveCursor(QtGui.QTextCursor.End)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/TimeSelecterPopup.py b/src/rezgui/widgets/TimeSelecterPopup.py
index ff0924526..b0fadb09f 100644
--- a/src/rezgui/widgets/TimeSelecterPopup.py
+++ b/src/rezgui/widgets/TimeSelecterPopup.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets, QtGui
 from rezgui.util import update_font, create_pane
 from rez.utils.formatting import readable_time_duration
@@ -126,19 +141,3 @@ def _secondsHover(self, seconds):
     def _secondsClicked(self, seconds):
         self.secondsClicked.emit(seconds)
         self.close()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/TimestampWidget.py b/src/rezgui/widgets/TimestampWidget.py
index ed8c64285..f01789cac 100644
--- a/src/rezgui/widgets/TimestampWidget.py
+++ b/src/rezgui/widgets/TimestampWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import create_pane
 from rezgui.widgets.IconButton import IconButton
@@ -75,19 +90,3 @@ def _selectTime(self):
     def _secondsClicked(self, seconds):
         now = int(time.time())
         self.set_time(now - seconds)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ToolWidget.py b/src/rezgui/widgets/ToolWidget.py
index 767b8a983..7786f0f85 100644
--- a/src/rezgui/widgets/ToolWidget.py
+++ b/src/rezgui/widgets/ToolWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.dialogs.ProcessDialog import ProcessDialog
 from rezgui.objects.App import app
@@ -108,19 +123,3 @@ def set_instance_count(self, nprocs):
         else:
             txt = ""
         self.instances_label.setText(txt)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantCellWidget.py b/src/rezgui/widgets/VariantCellWidget.py
index 3e3f2dbe1..2c966a5f9 100644
--- a/src/rezgui/widgets/VariantCellWidget.py
+++ b/src/rezgui/widgets/VariantCellWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.util import create_pane, get_icon_widget, add_menu_action, update_font
 from rezgui.models.ContextModel import ContextModel
@@ -312,19 +327,3 @@ def _set_lock_icon(self, name, tooltip):
         widget = get_icon_widget(name, tooltip)
         layout.insertWidget(0, widget)
         self.lock_icon = (widget, name, tooltip)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantDetailsWidget.py b/src/rezgui/widgets/VariantDetailsWidget.py
index c0f15a5c2..5d8d132d7 100644
--- a/src/rezgui/widgets/VariantDetailsWidget.py
+++ b/src/rezgui/widgets/VariantDetailsWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets, QtGui
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
 from rezgui.widgets.StreamableTextEdit import StreamableTextEdit
@@ -44,19 +59,3 @@ def _update_graph_btn_visibility(self):
 
     def _contextChanged(self, flags=0):
         self._update_graph_btn_visibility()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantHelpWidget.py b/src/rezgui/widgets/VariantHelpWidget.py
index 778dbd5d5..fc4a145bd 100644
--- a/src/rezgui/widgets/VariantHelpWidget.py
+++ b/src/rezgui/widgets/VariantHelpWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import create_pane, get_icon_widget
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -135,19 +150,3 @@ def _helpClicked(self, tab_index):
     @classmethod
     def _load_packages_callback(cls, package):
         return (not package.help)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantSummaryWidget.py b/src/rezgui/widgets/VariantSummaryWidget.py
index 4737909c4..40c5dc984 100644
--- a/src/rezgui/widgets/VariantSummaryWidget.py
+++ b/src/rezgui/widgets/VariantSummaryWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets
 from rezgui.util import create_pane, get_timestamp_str
 from rez.packages import Package, Variant
@@ -99,19 +114,3 @@ def set_variant(self, variant):
             self.table.resizeRowsToContents()
 
         self.variant = variant
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantToolsList.py b/src/rezgui/widgets/VariantToolsList.py
index 6b39e80b5..058899d8c 100644
--- a/src/rezgui/widgets/VariantToolsList.py
+++ b/src/rezgui/widgets/VariantToolsList.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.objects.App import app
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
@@ -65,19 +80,3 @@ def _instanceCountChanged(self, context_id, tool_name, num_procs):
         widget = self.tool_widgets.get(str(tool_name))
         if widget:
             widget.set_instance_count(num_procs)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantVersionsTable.py b/src/rezgui/widgets/VariantVersionsTable.py
index ab610b251..6a40541ea 100644
--- a/src/rezgui/widgets/VariantVersionsTable.py
+++ b/src/rezgui/widgets/VariantVersionsTable.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets, QtGui
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
 from rez.package_filter import PackageFilterList
@@ -164,19 +179,3 @@ def _item():
             self.allow_selection = False
 
         self.variant = variant
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantVersionsWidget.py b/src/rezgui/widgets/VariantVersionsWidget.py
index 9589e166c..feb83852c 100644
--- a/src/rezgui/widgets/VariantVersionsWidget.py
+++ b/src/rezgui/widgets/VariantVersionsWidget.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.util import create_pane
 from rezgui.widgets.VariantVersionsTable import VariantVersionsTable
@@ -172,19 +187,3 @@ def _browseVersions(self):
 
     def _close_window(self):
         self.closeWindow.emit()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/VariantsList.py b/src/rezgui/widgets/VariantsList.py
index f80864979..7c70cdd38 100644
--- a/src/rezgui/widgets/VariantsList.py
+++ b/src/rezgui/widgets/VariantsList.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCompat, QtCore, QtWidgets
 from rez.packages import Package
 
@@ -54,19 +69,3 @@ def set_variant(self, variant):
     def selectionCommand(self, index, event=None):
         return QtCore.QItemSelectionModel.ClearAndSelect if self.allow_selection \
             else QtCore.QItemSelectionModel.NoUpdate
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/ViewGraphButton.py b/src/rezgui/widgets/ViewGraphButton.py
index 019f7203b..5c02a06bd 100644
--- a/src/rezgui/widgets/ViewGraphButton.py
+++ b/src/rezgui/widgets/ViewGraphButton.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.mixins.ContextViewMixin import ContextViewMixin
 from rezgui.models.ContextModel import ContextModel
@@ -56,19 +71,3 @@ def _view_dependency_graph(self):
         graph = self.context().get_dependency_graph()
         graph_str = write_dot(graph)
         view_graph(graph_str, self.window(), prune_to=self.package_name)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/widgets/__init__.py b/src/rezgui/widgets/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/widgets/__init__.py
+++ b/src/rezgui/widgets/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezgui/windows/BrowsePackageSubWindow.py b/src/rezgui/windows/BrowsePackageSubWindow.py
index 0f1abf3bc..87f41922a 100644
--- a/src/rezgui/windows/BrowsePackageSubWindow.py
+++ b/src/rezgui/windows/BrowsePackageSubWindow.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.objects.App import app
 from rezgui.widgets.BrowsePackagePane import BrowsePackagePane
@@ -18,19 +33,3 @@ def __init__(self, parent=None):
     def closeEvent(self, event):
         super(BrowsePackageSubWindow, self).closeEvent(event)
         StoreSizeMixin.closeEvent(self, event)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/windows/ContextSubWindow.py b/src/rezgui/windows/ContextSubWindow.py
index d9f87ede6..a5688b010 100644
--- a/src/rezgui/windows/ContextSubWindow.py
+++ b/src/rezgui/windows/ContextSubWindow.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtCore, QtWidgets
 from rezgui.objects.App import app
 from rezgui.widgets.ContextManagerWidget import ContextManagerWidget
@@ -144,19 +159,3 @@ def _diffModeChanged(self):
     def _update_window_title(self):
         title = self.widget().get_title()
         self.setWindowTitle(title)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/windows/MainWindow.py b/src/rezgui/windows/MainWindow.py
index d6306d096..1c5ce340a 100644
--- a/src/rezgui/windows/MainWindow.py
+++ b/src/rezgui/windows/MainWindow.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from Qt import QtWidgets
 from rezgui.objects.App import app
 from rezgui.util import add_menu_action
@@ -157,19 +172,3 @@ def _update_edit_menu(self):
 
         self.copy_request_action.setEnabled(copy_request)
         self.copy_resolve_action.setEnabled(copy_resolve)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezgui/windows/__init__.py b/src/rezgui/windows/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezgui/windows/__init__.py
+++ b/src/rezgui/windows/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezplugins/__init__.py b/src/rezplugins/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rezplugins/__init__.py
+++ b/src/rezplugins/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezplugins/build_process/__init__.py b/src/rezplugins/build_process/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/build_process/__init__.py
+++ b/src/rezplugins/build_process/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/build_process/local.py b/src/rezplugins/build_process/local.py
index c174b9549..579ddeef9 100644
--- a/src/rezplugins/build_process/local.py
+++ b/src/rezplugins/build_process/local.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Builds packages on local host
 """
@@ -494,19 +509,3 @@ def _run_tests(self, variant, run_on, package_install_path):
 
 def register_plugin():
     return LocalBuildProcess
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/build_process/remote.py b/src/rezplugins/build_process/remote.py
index adcb7b2d3..efda2eece 100644
--- a/src/rezplugins/build_process/remote.py
+++ b/src/rezplugins/build_process/remote.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Builds packages on remote hosts
 """
@@ -22,19 +37,3 @@ def release(self, release_message=None, variants=None):
 
 def register_plugin():
     return RemoteBuildProcess
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/build_system/__init__.py b/src/rezplugins/build_system/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/build_system/__init__.py
+++ b/src/rezplugins/build_system/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/build_system/cmake.py b/src/rezplugins/build_system/cmake.py
index fb557d3d8..02ab9cbf7 100644
--- a/src/rezplugins/build_system/cmake.py
+++ b/src/rezplugins/build_system/cmake.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 CMake-based build system
 """
@@ -312,19 +327,3 @@ def _FWD__spawn_build_shell(working_dir, build_path, variant_index, install,
 
 def register_plugin():
     return CMakeBuildSystem
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/build_system/cmake_files/Colorize.cmake b/src/rezplugins/build_system/cmake_files/Colorize.cmake
index 1cbe39014..debafbac2 100644
--- a/src/rezplugins/build_system/cmake_files/Colorize.cmake
+++ b/src/rezplugins/build_system/cmake_files/Colorize.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 # Convenience variables to add colour to the MESSAGE output provided by CMake.
 # These variables make use of standard terminal escape sequences.  This only
 # affects the output during the cmake configuration step, and not execution of
diff --git a/src/rezplugins/build_system/cmake_files/FindStaticLibs.cmake b/src/rezplugins/build_system/cmake_files/FindStaticLibs.cmake
index a4d0dd796..d249f55e8 100644
--- a/src/rezplugins/build_system/cmake_files/FindStaticLibs.cmake
+++ b/src/rezplugins/build_system/cmake_files/FindStaticLibs.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # This is a utility function to get around problems when using pkg-config in combination with static
 # library linking. Cmake has a 'pkg_check_modules' function, which runs pkgconfig and returns the
diff --git a/src/rezplugins/build_system/cmake_files/InstallDirs.cmake b/src/rezplugins/build_system/cmake_files/InstallDirs.cmake
index 21475ee9f..55f5325eb 100644
--- a/src/rezplugins/build_system/cmake_files/InstallDirs.cmake
+++ b/src/rezplugins/build_system/cmake_files/InstallDirs.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # install_dirs_
 # rez_install_dirs
diff --git a/src/rezplugins/build_system/cmake_files/InstallFiles.cmake b/src/rezplugins/build_system/cmake_files/InstallFiles.cmake
index dfdeec2b6..c74ce4525 100644
--- a/src/rezplugins/build_system/cmake_files/InstallFiles.cmake
+++ b/src/rezplugins/build_system/cmake_files/InstallFiles.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # install_files_
 # rez_install_files
diff --git a/src/rezplugins/build_system/cmake_files/InstallPython.cmake b/src/rezplugins/build_system/cmake_files/InstallPython.cmake
index 31d030509..3498fc7dd 100644
--- a/src/rezplugins/build_system/cmake_files/InstallPython.cmake
+++ b/src/rezplugins/build_system/cmake_files/InstallPython.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # install_python
 #
diff --git a/src/rezplugins/build_system/cmake_files/LICENSE_1_0.txt b/src/rezplugins/build_system/cmake_files/LICENSE_1_0.txt
new file mode 100644
index 000000000..1bf65c7d9
--- /dev/null
+++ b/src/rezplugins/build_system/cmake_files/LICENSE_1_0.txt
@@ -0,0 +1,29 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+END OF TERMS AND CONDITIONS
+
+This license is provided for and applies to the following files:
+
+* Utils.cmake
diff --git a/src/rezplugins/build_system/cmake_files/RezBuild.cmake b/src/rezplugins/build_system/cmake_files/RezBuild.cmake
index 0173177b9..7e08d772e 100644
--- a/src/rezplugins/build_system/cmake_files/RezBuild.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezBuild.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # This module should be included for projects built within a rez-build context. Several macros are made
 # available (see those cmake filse for details): rez_find_packages, rez_install_cmake and rez_install_python.
diff --git a/src/rezplugins/build_system/cmake_files/RezFindPackages.cmake b/src/rezplugins/build_system/cmake_files/RezFindPackages.cmake
index 9a78d0289..d6957e05d 100644
--- a/src/rezplugins/build_system/cmake_files/RezFindPackages.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezFindPackages.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # macro:
 # rez_find_packages
diff --git a/src/rezplugins/build_system/cmake_files/RezInstallCMake.cmake b/src/rezplugins/build_system/cmake_files/RezInstallCMake.cmake
index 45d3cccbc..87b930918 100644
--- a/src/rezplugins/build_system/cmake_files/RezInstallCMake.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezInstallCMake.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # rez_install_cmake
 #
diff --git a/src/rezplugins/build_system/cmake_files/RezInstallContext.cmake b/src/rezplugins/build_system/cmake_files/RezInstallContext.cmake
index 077300227..f19284bd7 100644
--- a/src/rezplugins/build_system/cmake_files/RezInstallContext.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezInstallContext.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # rez_install_context
 #
diff --git a/src/rezplugins/build_system/cmake_files/RezInstallDoxygen.cmake b/src/rezplugins/build_system/cmake_files/RezInstallDoxygen.cmake
index f8138cefe..7032ac194 100644
--- a/src/rezplugins/build_system/cmake_files/RezInstallDoxygen.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezInstallDoxygen.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # rez_install_doxygen
 #
diff --git a/src/rezplugins/build_system/cmake_files/RezInstallPython.cmake b/src/rezplugins/build_system/cmake_files/RezInstallPython.cmake
index 6f624ab98..564b54ed0 100644
--- a/src/rezplugins/build_system/cmake_files/RezInstallPython.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezInstallPython.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # rez_install_python
 #
diff --git a/src/rezplugins/build_system/cmake_files/RezPipInstall.cmake b/src/rezplugins/build_system/cmake_files/RezPipInstall.cmake
index eca70c20a..047a27476 100644
--- a/src/rezplugins/build_system/cmake_files/RezPipInstall.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezPipInstall.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # rez_pip_install
 #
@@ -117,4 +132,4 @@ macro (rez_pip_install)
             COMMAND pip install ${pipargs} --no-deps --install-option=--install-scripts=${destbinpath} --install-option=--install-lib=${destpath} --install-option=--install-headers=${destincpath} --install-option=--install-data=${destdatapath} .
     )
 
-endmacro (rez_pip_install)
\ No newline at end of file
+endmacro (rez_pip_install)
diff --git a/src/rezplugins/build_system/cmake_files/RezProject.cmake b/src/rezplugins/build_system/cmake_files/RezProject.cmake
index 54143766a..330dd00ae 100644
--- a/src/rezplugins/build_system/cmake_files/RezProject.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezProject.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # macro:
 # rez_project
diff --git a/src/rezplugins/build_system/cmake_files/RezRepository.cmake b/src/rezplugins/build_system/cmake_files/RezRepository.cmake
index 56ec2006b..36818450e 100644
--- a/src/rezplugins/build_system/cmake_files/RezRepository.cmake
+++ b/src/rezplugins/build_system/cmake_files/RezRepository.cmake
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 #
 # macro:
 # rez_set_archive
diff --git a/src/rezplugins/build_system/custom.py b/src/rezplugins/build_system/custom.py
index 2d8cd876b..acfb668ec 100644
--- a/src/rezplugins/build_system/custom.py
+++ b/src/rezplugins/build_system/custom.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Package-defined build command
 """
diff --git a/src/rezplugins/build_system/make.py b/src/rezplugins/build_system/make.py
index 4098c35fa..df6aad50f 100644
--- a/src/rezplugins/build_system/make.py
+++ b/src/rezplugins/build_system/make.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Make-based build system
 """
@@ -22,19 +37,3 @@ def __init__(self, working_dir, opts=None, package=None, write_build_scripts=Fal
 
 def register_plugin():
     return MakeBuildSystem
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/build_system/rezconfig.py b/src/rezplugins/build_system/rezconfig.py
index bcfb8d756..3749ad92f 100644
--- a/src/rezplugins/build_system/rezconfig.py
+++ b/src/rezplugins/build_system/rezconfig.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 
 
@@ -31,19 +46,3 @@
 
 if os.name != "posix":
     cmake["build_system"] = "nmake"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/command/__init__.py b/src/rezplugins/command/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/command/__init__.py
+++ b/src/rezplugins/command/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/package_repository/__init__.py b/src/rezplugins/package_repository/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/package_repository/__init__.py
+++ b/src/rezplugins/package_repository/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/package_repository/filesystem.py b/src/rezplugins/package_repository/filesystem.py
index aad1e4073..2d0b19589 100644
--- a/src/rezplugins/package_repository/filesystem.py
+++ b/src/rezplugins/package_repository/filesystem.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Filesystem-based package repository
 """
@@ -1494,19 +1509,3 @@ def _delete_stale_build_tagfiles(self, family_path):
 
 def register_plugin():
     return FileSystemPackageRepository
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/package_repository/memory.py b/src/rezplugins/package_repository/memory.py
index 4a18ce1ce..c133ebb1e 100644
--- a/src/rezplugins/package_repository/memory.py
+++ b/src/rezplugins/package_repository/memory.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 In-memory package repository
 """
@@ -195,19 +210,3 @@ def get_parent_package(self, variant_resource):
 
 def register_plugin():
     return MemoryPackageRepository
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_hook/__init__.py b/src/rezplugins/release_hook/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/release_hook/__init__.py
+++ b/src/rezplugins/release_hook/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/release_hook/amqp.py b/src/rezplugins/release_hook/amqp.py
index 1baaa5813..728e380ad 100644
--- a/src/rezplugins/release_hook/amqp.py
+++ b/src/rezplugins/release_hook/amqp.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Publishes a message to the broker.
 """
@@ -100,19 +115,3 @@ def publish_message(self, data):
 
 def register_plugin():
     return AmqpReleaseHook
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_hook/command.py b/src/rezplugins/release_hook/command.py
index ef392981f..81c5538b0 100644
--- a/src/rezplugins/release_hook/command.py
+++ b/src/rezplugins/release_hook/command.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Executes pre- and post-release shell commands
 """
@@ -210,19 +225,3 @@ def _execute_commands(self, commands, install_path, package, errors=None,
 
 def register_plugin():
     return CommandReleaseHook
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_hook/emailer.py b/src/rezplugins/release_hook/emailer.py
index bd669e7c1..f01dc0235 100644
--- a/src/rezplugins/release_hook/emailer.py
+++ b/src/rezplugins/release_hook/emailer.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Sends a post-release email
 """
@@ -156,19 +171,3 @@ def test(value, type_):
 
 def register_plugin():
     return EmailReleaseHook
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_vcs/__init__.py b/src/rezplugins/release_vcs/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/release_vcs/__init__.py
+++ b/src/rezplugins/release_vcs/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/release_vcs/git.py b/src/rezplugins/release_vcs/git.py
index 201d2eb3d..d56759a90 100644
--- a/src/rezplugins/release_vcs/git.py
+++ b/src/rezplugins/release_vcs/git.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Git version control
 """
@@ -237,19 +252,3 @@ def export(cls, revision, path):
 
 def register_plugin():
     return GitReleaseVCS
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_vcs/hg.py b/src/rezplugins/release_vcs/hg.py
index 3ef681552..ec3b38067 100644
--- a/src/rezplugins/release_vcs/hg.py
+++ b/src/rezplugins/release_vcs/hg.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Mercurial version control
 """
@@ -275,19 +290,3 @@ def create_release_tag(self, tag_name, message=None):
 
 def register_plugin():
     return HgReleaseVCS
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_vcs/stub.py b/src/rezplugins/release_vcs/stub.py
index 5a41bffa5..7ca98c8ff 100644
--- a/src/rezplugins/release_vcs/stub.py
+++ b/src/rezplugins/release_vcs/stub.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Stub version control system, for testing purposes
 """
@@ -76,19 +91,3 @@ def _write_stub(self, data):
 
 def register_plugin():
     return StubReleaseVCS
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/release_vcs/svn.py b/src/rezplugins/release_vcs/svn.py
index 3759b7823..3a4a557ff 100644
--- a/src/rezplugins/release_vcs/svn.py
+++ b/src/rezplugins/release_vcs/svn.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Svn version control
 """
@@ -135,19 +150,3 @@ def create_release_tag(self, tag_name, message=None):
 
 def register_plugin():
     return SvnReleaseVCS
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/__init__.py b/src/rezplugins/shell/__init__.py
index 6dab8423a..e088cad17 100644
--- a/src/rezplugins/shell/__init__.py
+++ b/src/rezplugins/shell/__init__.py
@@ -1,18 +1,17 @@
-from rez.plugin_managers import extend_path
-__path__ = extend_path(__path__, __name__)
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from rez.plugin_managers import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git a/src/rezplugins/shell/_utils/__init__.py b/src/rezplugins/shell/_utils/__init__.py
index e69de29bb..582e11b0a 100644
--- a/src/rezplugins/shell/_utils/__init__.py
+++ b/src/rezplugins/shell/_utils/__init__.py
@@ -0,0 +1,13 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rezplugins/shell/_utils/powershell_base.py b/src/rezplugins/shell/_utils/powershell_base.py
index 484863d0e..8c697385f 100644
--- a/src/rezplugins/shell/_utils/powershell_base.py
+++ b/src/rezplugins/shell/_utils/powershell_base.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os
 import re
 from subprocess import PIPE
diff --git a/src/rezplugins/shell/bash.py b/src/rezplugins/shell/bash.py
index d6b89a20b..e064157b6 100644
--- a/src/rezplugins/shell/bash.py
+++ b/src/rezplugins/shell/bash.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Bash shell
 """
@@ -89,19 +104,3 @@ def _bind_interactive_rez(self):
 def register_plugin():
     if platform_.name != "windows":
         return Bash
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/cmd.py b/src/rezplugins/shell/cmd.py
index b2ac8a8e3..3e6a7cd61 100644
--- a/src/rezplugins/shell/cmd.py
+++ b/src/rezplugins/shell/cmd.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Windows Command Prompt (DOS) shell.
 """
@@ -387,19 +402,3 @@ def _expand_alias(self, command):
 def register_plugin():
     if platform_.name == "windows":
         return CMD
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/csh.py b/src/rezplugins/shell/csh.py
index a7ee87543..796dd3837 100644
--- a/src/rezplugins/shell/csh.py
+++ b/src/rezplugins/shell/csh.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 CSH shell
 """
@@ -168,19 +183,3 @@ def source(self, value):
 def register_plugin():
     if platform_.name != "windows":
         return CSH
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/powershell.py b/src/rezplugins/shell/powershell.py
index 5430df75c..7593f61c1 100644
--- a/src/rezplugins/shell/powershell.py
+++ b/src/rezplugins/shell/powershell.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """Windows PowerShell 5"""
 
 from rez.utils.platform_ import platform_
@@ -18,19 +33,3 @@ def file_extension(cls):
 def register_plugin():
     if platform_.name == "windows":
         return PowerShell
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/pwsh.py b/src/rezplugins/shell/pwsh.py
index 1181dff6f..ccdb97a9c 100644
--- a/src/rezplugins/shell/pwsh.py
+++ b/src/rezplugins/shell/pwsh.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """PowerShell Core 6+"""
 
 from rez.utils.platform_ import platform_
@@ -31,19 +46,3 @@ def get_syspaths(cls):
 def register_plugin():
     # Platform independent
     return PowerShellCore
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/sh.py b/src/rezplugins/shell/sh.py
index c5cbe8796..50a250b95 100644
--- a/src/rezplugins/shell/sh.py
+++ b/src/rezplugins/shell/sh.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 SH shell
 """
@@ -139,19 +154,3 @@ def _saferefenv(self, key):
 def register_plugin():
     if platform_.name != "windows":
         return SH
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/tcsh.py b/src/rezplugins/shell/tcsh.py
index aaf6fbfb6..1ccee154d 100644
--- a/src/rezplugins/shell/tcsh.py
+++ b/src/rezplugins/shell/tcsh.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 TCSH shell
 """
@@ -41,19 +56,3 @@ def _bind_interactive_rez(self):
 def register_plugin():
     if platform_.name != "windows":
         return TCSH
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rezplugins/shell/zsh.py b/src/rezplugins/shell/zsh.py
index 4f489684a..f1fde28e4 100644
--- a/src/rezplugins/shell/zsh.py
+++ b/src/rezplugins/shell/zsh.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Zsh shell
 """
@@ -78,19 +93,3 @@ def _bind_interactive_rez(self):
 def register_plugin():
     if platform_.name != "windows":
         return Zsh
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/support/package_utils/set_authors.py b/src/support/package_utils/set_authors.py
index f79c494ad..c9423606b 100644
--- a/src/support/package_utils/set_authors.py
+++ b/src/support/package_utils/set_authors.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 import os.path
 import subprocess
 


Test patch:
diff --git a/src/rez/cli/selftest.py b/src/rez/cli/selftest.py
index 9ea7f4207..71c31b802 100644
--- a/src/rez/cli/selftest.py
+++ b/src/rez/cli/selftest.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Run unit tests. Use pytest if available.
 '''
@@ -126,19 +141,3 @@ def run_pytest(module_tests, tests, verbosity, extra_arg_groups):
 
     exitcode = main(args=argv)
     sys.exit(exitcode)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/cli/test.py b/src/rez/cli/test.py
index 18badd069..8bf07cbd7 100644
--- a/src/rez/cli/test.py
+++ b/src/rez/cli/test.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 '''
 Run tests listed in a package's definition file.
 '''
diff --git a/src/rez/data/tests/builds/packages/anti/1.0.0/build.py b/src/rez/data/tests/builds/packages/anti/1.0.0/build.py
index efc55a13b..0bffaa1ea 100644
--- a/src/rez/data/tests/builds/packages/anti/1.0.0/build.py
+++ b/src/rez/data/tests/builds/packages/anti/1.0.0/build.py
@@ -27,19 +27,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/anti/1.0.0/package.py b/src/rez/data/tests/builds/packages/anti/1.0.0/package.py
index 096d5a098..253997d26 100644
--- a/src/rez/data/tests/builds/packages/anti/1.0.0/package.py
+++ b/src/rez/data/tests/builds/packages/anti/1.0.0/package.py
@@ -12,19 +12,3 @@ def commands():
     env.PYTHONPATH.append('{root}/python')
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/bah/2.1/bah/__init__.py b/src/rez/data/tests/builds/packages/bah/2.1/bah/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/builds/packages/bah/2.1/bah/__init__.py
+++ b/src/rez/data/tests/builds/packages/bah/2.1/bah/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/builds/packages/bah/2.1/build.py b/src/rez/data/tests/builds/packages/bah/2.1/build.py
index a63ae6cbf..ef57ca999 100644
--- a/src/rez/data/tests/builds/packages/bah/2.1/build.py
+++ b/src/rez/data/tests/builds/packages/bah/2.1/build.py
@@ -37,19 +37,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/bah/2.1/package.py b/src/rez/data/tests/builds/packages/bah/2.1/package.py
index 9364cbaa9..d830ac843 100644
--- a/src/rez/data/tests/builds/packages/bah/2.1/package.py
+++ b/src/rez/data/tests/builds/packages/bah/2.1/package.py
@@ -13,19 +13,3 @@
 hashed_variants = True
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/build_util/1/build.py b/src/rez/data/tests/builds/packages/build_util/1/build.py
index e739b04fa..d64a1e1e5 100644
--- a/src/rez/data/tests/builds/packages/build_util/1/build.py
+++ b/src/rez/data/tests/builds/packages/build_util/1/build.py
@@ -34,19 +34,3 @@ def _copy(src, dest):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/build_util/1/build_util/__init__.py b/src/rez/data/tests/builds/packages/build_util/1/build_util/__init__.py
index fb6d19e71..6a630e625 100644
--- a/src/rez/data/tests/builds/packages/build_util/1/build_util/__init__.py
+++ b/src/rez/data/tests/builds/packages/build_util/1/build_util/__init__.py
@@ -34,19 +34,3 @@ def check_visible(module, try_module):
     except ImportError as e:
         raise Exception(("%s's rezbuild.py should have been able to access "
                         "%s! Error: %s") % (module, try_module, str(e)))
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/build_util/1/package.py b/src/rez/data/tests/builds/packages/build_util/1/package.py
index 2d688333b..5d3c567b3 100644
--- a/src/rez/data/tests/builds/packages/build_util/1/package.py
+++ b/src/rez/data/tests/builds/packages/build_util/1/package.py
@@ -8,19 +8,3 @@ def commands():
     env.PYTHONPATH.append('{root}/python')
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/floob/build.py b/src/rez/data/tests/builds/packages/floob/build.py
index c2c2f365a..1bf65031c 100644
--- a/src/rez/data/tests/builds/packages/floob/build.py
+++ b/src/rez/data/tests/builds/packages/floob/build.py
@@ -22,19 +22,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/floob/floob/__init__.py b/src/rez/data/tests/builds/packages/floob/floob/__init__.py
index 43b32ef9f..035c723a1 100644
--- a/src/rez/data/tests/builds/packages/floob/floob/__init__.py
+++ b/src/rez/data/tests/builds/packages/floob/floob/__init__.py
@@ -1,19 +1,2 @@
-
 def hello():
     return "yes this is floob"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/floob/package.py b/src/rez/data/tests/builds/packages/floob/package.py
index 5c8b47491..cde376101 100644
--- a/src/rez/data/tests/builds/packages/floob/package.py
+++ b/src/rez/data/tests/builds/packages/floob/package.py
@@ -1,4 +1,3 @@
-
 # make sure imported modules don't break package installs
 import os
 
@@ -14,19 +13,3 @@ def commands():
     env.PYTHONPATH.append('{root}/python')
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.0.0/build.py b/src/rez/data/tests/builds/packages/foo/1.0.0/build.py
index 82ee50e7c..6b4ffa5b8 100644
--- a/src/rez/data/tests/builds/packages/foo/1.0.0/build.py
+++ b/src/rez/data/tests/builds/packages/foo/1.0.0/build.py
@@ -35,19 +35,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.0.0/foo/__init__.py b/src/rez/data/tests/builds/packages/foo/1.0.0/foo/__init__.py
index 8b771451b..12039d6c6 100644
--- a/src/rez/data/tests/builds/packages/foo/1.0.0/foo/__init__.py
+++ b/src/rez/data/tests/builds/packages/foo/1.0.0/foo/__init__.py
@@ -4,19 +4,3 @@
 
 def report():
     return "hello from foo-%s" % __version__
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.0.0/package.py b/src/rez/data/tests/builds/packages/foo/1.0.0/package.py
index 511e251dd..6f1772423 100644
--- a/src/rez/data/tests/builds/packages/foo/1.0.0/package.py
+++ b/src/rez/data/tests/builds/packages/foo/1.0.0/package.py
@@ -15,19 +15,3 @@ def commands():
     env.PYTHONPATH.append('{root}/python')
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.1.0/build.py b/src/rez/data/tests/builds/packages/foo/1.1.0/build.py
index fae116fa9..9503672aa 100644
--- a/src/rez/data/tests/builds/packages/foo/1.1.0/build.py
+++ b/src/rez/data/tests/builds/packages/foo/1.1.0/build.py
@@ -30,19 +30,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.1.0/foo/__init__.py b/src/rez/data/tests/builds/packages/foo/1.1.0/foo/__init__.py
index 8b771451b..12039d6c6 100644
--- a/src/rez/data/tests/builds/packages/foo/1.1.0/foo/__init__.py
+++ b/src/rez/data/tests/builds/packages/foo/1.1.0/foo/__init__.py
@@ -4,19 +4,3 @@
 
 def report():
     return "hello from foo-%s" % __version__
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/foo/1.1.0/package.py b/src/rez/data/tests/builds/packages/foo/1.1.0/package.py
index 218b325c4..7565ba6bb 100644
--- a/src/rez/data/tests/builds/packages/foo/1.1.0/package.py
+++ b/src/rez/data/tests/builds/packages/foo/1.1.0/package.py
@@ -16,19 +16,3 @@ def commands():
     late_utils.add_eek_var(env)
 
 build_command = 'python {root}/build.py {install}'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/hello/1.0/package.py b/src/rez/data/tests/builds/packages/hello/1.0/package.py
index f144ce5c3..cbbd0403c 100644
--- a/src/rez/data/tests/builds/packages/hello/1.0/package.py
+++ b/src/rez/data/tests/builds/packages/hello/1.0/package.py
@@ -1,4 +1,3 @@
-
 name = 'hello'
 version = '1.0'
 authors = ["dr.foo"]
diff --git a/src/rez/data/tests/builds/packages/loco/3/build.py b/src/rez/data/tests/builds/packages/loco/3/build.py
index b56c0c2ab..636bc1a8a 100644
--- a/src/rez/data/tests/builds/packages/loco/3/build.py
+++ b/src/rez/data/tests/builds/packages/loco/3/build.py
@@ -1,2 +1,1 @@
-
 # intentionally empty
diff --git a/src/rez/data/tests/builds/packages/loco/3/package.py b/src/rez/data/tests/builds/packages/loco/3/package.py
index 489718659..1ce2a6578 100644
--- a/src/rez/data/tests/builds/packages/loco/3/package.py
+++ b/src/rez/data/tests/builds/packages/loco/3/package.py
@@ -8,19 +8,3 @@
 requires = ["foo-1.0", "foo-1.1"]
 
 build_command = "python {root}/build.py {install}"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/sup_world/3.8/package.py b/src/rez/data/tests/builds/packages/sup_world/3.8/package.py
index 42dec1c66..93b8c7017 100644
--- a/src/rez/data/tests/builds/packages/sup_world/3.8/package.py
+++ b/src/rez/data/tests/builds/packages/sup_world/3.8/package.py
@@ -11,19 +11,3 @@
 
 def commands():
     env.PATH.append('{root}/bin')
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/translate_lib/2.2.0/package.py b/src/rez/data/tests/builds/packages/translate_lib/2.2.0/package.py
index 384794944..05e89d831 100644
--- a/src/rez/data/tests/builds/packages/translate_lib/2.2.0/package.py
+++ b/src/rez/data/tests/builds/packages/translate_lib/2.2.0/package.py
@@ -17,19 +17,3 @@ def commands():
         env.LD_LIBRARY_PATH.append("{root}/lib")
 
 uuid = "38eda6e8-f162-11e0-9de0-0023ae79d988"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/whack/build.py b/src/rez/data/tests/builds/packages/whack/build.py
index 642d518ae..9dd9db762 100644
--- a/src/rez/data/tests/builds/packages/whack/build.py
+++ b/src/rez/data/tests/builds/packages/whack/build.py
@@ -13,19 +13,3 @@ def build(source_path, build_path, install_path, targets):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/builds/packages/whack/package.py b/src/rez/data/tests/builds/packages/whack/package.py
index 90a35e0dd..6976c161e 100644
--- a/src/rez/data/tests/builds/packages/whack/package.py
+++ b/src/rez/data/tests/builds/packages/whack/package.py
@@ -5,19 +5,3 @@
 description = "a deliberately broken package"
 
 build_command = "python {root}/build.py {install}"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/commands/packages/rextest/1.3/package.py b/src/rez/data/tests/commands/packages/rextest/1.3/package.py
index beff55eba..cc062fe1f 100644
--- a/src/rez/data/tests/commands/packages/rextest/1.3/package.py
+++ b/src/rez/data/tests/commands/packages/rextest/1.3/package.py
@@ -8,19 +8,3 @@ def commands():
     # prepend to non-existent var
     env.REXTEST_DIRS.prepend('{root}/data')
     alias('rextest', 'foobar')
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/commands/packages/rextest2/2/package.py b/src/rez/data/tests/commands/packages/rextest2/2/package.py
index 154b1e335..8f4a9032c 100644
--- a/src/rez/data/tests/commands/packages/rextest2/2/package.py
+++ b/src/rez/data/tests/commands/packages/rextest2/2/package.py
@@ -8,19 +8,3 @@ def commands():
     env.REXTEST_DIRS.append('{root}/data2')
     setenv("REXTEST2_REXTEST_VER", '{resolve.rextest.version}')
     env.REXTEST2_REXTEST_BASE = resolve.rextest.base
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/config/test2.py b/src/rez/data/tests/config/test2.py
index 1b9d53dc3..efed9b97b 100644
--- a/src/rez/data/tests/config/test2.py
+++ b/src/rez/data/tests/config/test2.py
@@ -1,4 +1,3 @@
-
 release_hooks = ["foo"]
 
 plugins = {
diff --git a/src/rez/data/tests/extensions/bar/__init__.py b/src/rez/data/tests/extensions/bar/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/bar/__init__.py
+++ b/src/rez/data/tests/extensions/bar/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/bar/rezplugins/__init__.py b/src/rez/data/tests/extensions/bar/rezplugins/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/bar/rezplugins/__init__.py
+++ b/src/rez/data/tests/extensions/bar/rezplugins/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/bar/rezplugins/package_repository/__init__.py b/src/rez/data/tests/extensions/bar/rezplugins/package_repository/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/bar/rezplugins/package_repository/__init__.py
+++ b/src/rez/data/tests/extensions/bar/rezplugins/package_repository/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/bar/rezplugins/package_repository/memory.py b/src/rez/data/tests/extensions/bar/rezplugins/package_repository/memory.py
index 4a0a72437..db9805e2a 100644
--- a/src/rez/data/tests/extensions/bar/rezplugins/package_repository/memory.py
+++ b/src/rez/data/tests/extensions/bar/rezplugins/package_repository/memory.py
@@ -1,4 +1,3 @@
-
 from rez.package_repository import PackageRepository
 
 
diff --git a/src/rez/data/tests/extensions/foo/__init__.py b/src/rez/data/tests/extensions/foo/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/foo/__init__.py
+++ b/src/rez/data/tests/extensions/foo/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/foo/rezplugins/__init__.py b/src/rez/data/tests/extensions/foo/rezplugins/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/foo/rezplugins/__init__.py
+++ b/src/rez/data/tests/extensions/foo/rezplugins/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/foo/rezplugins/package_repository/__init__.py b/src/rez/data/tests/extensions/foo/rezplugins/package_repository/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/foo/rezplugins/package_repository/__init__.py
+++ b/src/rez/data/tests/extensions/foo/rezplugins/package_repository/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/foo/rezplugins/package_repository/cloud.py b/src/rez/data/tests/extensions/foo/rezplugins/package_repository/cloud.py
index f5729a185..4e7fea636 100644
--- a/src/rez/data/tests/extensions/foo/rezplugins/package_repository/cloud.py
+++ b/src/rez/data/tests/extensions/foo/rezplugins/package_repository/cloud.py
@@ -1,4 +1,3 @@
-
 from rez.package_repository import PackageRepository
 
 
diff --git a/src/rez/data/tests/extensions/non-mod/rezplugins/__init__.py b/src/rez/data/tests/extensions/non-mod/rezplugins/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/non-mod/rezplugins/__init__.py
+++ b/src/rez/data/tests/extensions/non-mod/rezplugins/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/__init__.py b/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/__init__.py
+++ b/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/memory.py b/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/memory.py
index 263081007..ccc3079a5 100644
--- a/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/memory.py
+++ b/src/rez/data/tests/extensions/non-mod/rezplugins/package_repository/memory.py
@@ -1,4 +1,3 @@
-
 from rez.package_repository import PackageRepository
 
 
diff --git a/src/rez/data/tests/packages/developer_dynamic_global_preprocess/package.py b/src/rez/data/tests/packages/developer_dynamic_global_preprocess/package.py
index 65a241b27..f36c4b9ee 100644
--- a/src/rez/data/tests/packages/developer_dynamic_global_preprocess/package.py
+++ b/src/rez/data/tests/packages/developer_dynamic_global_preprocess/package.py
@@ -1,4 +1,3 @@
-
 name = "developer_dynamic_global_preprocess"
 
 @early()
diff --git a/src/rez/data/tests/packages/developer_dynamic_local_preprocess/package.py b/src/rez/data/tests/packages/developer_dynamic_local_preprocess/package.py
index 5db08c6e3..bb35f2a5c 100644
--- a/src/rez/data/tests/packages/developer_dynamic_local_preprocess/package.py
+++ b/src/rez/data/tests/packages/developer_dynamic_local_preprocess/package.py
@@ -1,4 +1,3 @@
-
 name = "developer_dynamic_local_preprocess"
 
 @early()
diff --git a/src/rez/data/tests/packages/py_packages/late_binding/1.0/package.py b/src/rez/data/tests/packages/py_packages/late_binding/1.0/package.py
index a74b55511..4919d68e9 100644
--- a/src/rez/data/tests/packages/py_packages/late_binding/1.0/package.py
+++ b/src/rez/data/tests/packages/py_packages/late_binding/1.0/package.py
@@ -8,19 +8,3 @@ def tools():
 
 def commands():
     env.PATH.append("{root}/bin")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/multi.py b/src/rez/data/tests/packages/py_packages/multi.py
index e6d584f50..f4ebbf57a 100644
--- a/src/rez/data/tests/packages/py_packages/multi.py
+++ b/src/rez/data/tests/packages/py_packages/multi.py
@@ -9,19 +9,3 @@
 with scope("version_overrides"):
     with scope("1.1+"):
         tools = ["twerk"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/single_unversioned.py b/src/rez/data/tests/packages/py_packages/single_unversioned.py
index 2578831fe..c9d11b2d3 100644
--- a/src/rez/data/tests/packages/py_packages/single_unversioned.py
+++ b/src/rez/data/tests/packages/py_packages/single_unversioned.py
@@ -1,17 +1,1 @@
 name = 'single_unversioned'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/single_versioned.py b/src/rez/data/tests/packages/py_packages/single_versioned.py
index c4cce362c..f2e7df8ce 100644
--- a/src/rez/data/tests/packages/py_packages/single_versioned.py
+++ b/src/rez/data/tests/packages/py_packages/single_versioned.py
@@ -1,18 +1,2 @@
 name = 'single_versioned'
 versions = ["3.5"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/unversioned_py/package.py b/src/rez/data/tests/packages/py_packages/unversioned_py/package.py
index 13d84f457..3f1045959 100644
--- a/src/rez/data/tests/packages/py_packages/unversioned_py/package.py
+++ b/src/rez/data/tests/packages/py_packages/unversioned_py/package.py
@@ -1,17 +1,1 @@
 name = 'unversioned_py'
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/variants_py/2.0/package.py b/src/rez/data/tests/packages/py_packages/variants_py/2.0/package.py
index b5b914c8a..930d32a9b 100644
--- a/src/rez/data/tests/packages/py_packages/variants_py/2.0/package.py
+++ b/src/rez/data/tests/packages/py_packages/variants_py/2.0/package.py
@@ -13,19 +13,3 @@
 
 def commands():
     env.PATH.append("{root}/bin")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/versioned/2.0/package.py b/src/rez/data/tests/packages/py_packages/versioned/2.0/package.py
index fbdeab1bc..adb9aa889 100644
--- a/src/rez/data/tests/packages/py_packages/versioned/2.0/package.py
+++ b/src/rez/data/tests/packages/py_packages/versioned/2.0/package.py
@@ -1,19 +1,3 @@
 # This deliberately raises an exception, because we do not expect it to be
 # loaded in the unit test - yaml_packages/versioned/2.0 will take precedence.
 raise Exception("This package.py should never be loaded")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/packages/py_packages/versioned/3.0/package.py b/src/rez/data/tests/packages/py_packages/versioned/3.0/package.py
index a1420c72a..fb7e11406 100644
--- a/src/rez/data/tests/packages/py_packages/versioned/3.0/package.py
+++ b/src/rez/data/tests/packages/py_packages/versioned/3.0/package.py
@@ -3,19 +3,3 @@
 
 def commands():
     env.PATH.append("{root}/bin")
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/python/early_bind/__init__.py b/src/rez/data/tests/python/early_bind/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/python/early_bind/__init__.py
+++ b/src/rez/data/tests/python/early_bind/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/python/early_bind/early_utils.py b/src/rez/data/tests/python/early_bind/early_utils.py
index 7414ef04d..d2a4873da 100644
--- a/src/rez/data/tests/python/early_bind/early_utils.py
+++ b/src/rez/data/tests/python/early_bind/early_utils.py
@@ -1,4 +1,3 @@
-
 def get_authors():
     return [
         "tweedle-dee",
diff --git a/src/rez/data/tests/python/late_bind/late_utils.py b/src/rez/data/tests/python/late_bind/late_utils.py
index ee89faadf..63378de7e 100644
--- a/src/rez/data/tests/python/late_bind/late_utils.py
+++ b/src/rez/data/tests/python/late_bind/late_utils.py
@@ -1,4 +1,2 @@
-
-
 def add_eek_var(env):
     env.EEK = "2"
diff --git a/src/rez/data/tests/python/preprocess/__init__.py b/src/rez/data/tests/python/preprocess/__init__.py
index e69de29bb..8b1378917 100644
--- a/src/rez/data/tests/python/preprocess/__init__.py
+++ b/src/rez/data/tests/python/preprocess/__init__.py
@@ -0,0 +1,1 @@
+
diff --git a/src/rez/data/tests/python/preprocess/global_preprocess.py b/src/rez/data/tests/python/preprocess/global_preprocess.py
index d5b149238..bdab125c0 100644
--- a/src/rez/data/tests/python/preprocess/global_preprocess.py
+++ b/src/rez/data/tests/python/preprocess/global_preprocess.py
@@ -1,3 +1,2 @@
-
 def inject_data(this, data):
     data['added_by_global_preprocess'] = True
diff --git a/src/rez/data/tests/release/build.py b/src/rez/data/tests/release/build.py
index 0b7b0df59..45c09877f 100644
--- a/src/rez/data/tests/release/build.py
+++ b/src/rez/data/tests/release/build.py
@@ -35,19 +35,3 @@ def _copy(src, dest):
         install_path=os.environ['REZ_BUILD_INSTALL_PATH'],
         targets=sys.argv[1:]
     )
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/release/variants/build.py b/src/rez/data/tests/release/variants/build.py
index b56c0c2ab..636bc1a8a 100644
--- a/src/rez/data/tests/release/variants/build.py
+++ b/src/rez/data/tests/release/variants/build.py
@@ -1,2 +1,1 @@
-
 # intentionally empty
diff --git a/src/rez/data/tests/solver/packages/bahish/1/package.py b/src/rez/data/tests/solver/packages/bahish/1/package.py
index dac9885e8..1795123ca 100644
--- a/src/rez/data/tests/solver/packages/bahish/1/package.py
+++ b/src/rez/data/tests/solver/packages/bahish/1/package.py
@@ -2,19 +2,3 @@
 version = "1"
 
 requires = ["!pybah-4"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/bahish/2/package.py b/src/rez/data/tests/solver/packages/bahish/2/package.py
index efc95ff66..892e72107 100644
--- a/src/rez/data/tests/solver/packages/bahish/2/package.py
+++ b/src/rez/data/tests/solver/packages/bahish/2/package.py
@@ -2,19 +2,3 @@
 version = "2"
 
 requires = ["pybah-5"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/nada/package.py b/src/rez/data/tests/solver/packages/nada/package.py
index e8ba1144b..061cd48a2 100644
--- a/src/rez/data/tests/solver/packages/nada/package.py
+++ b/src/rez/data/tests/solver/packages/nada/package.py
@@ -1,17 +1,1 @@
 name = "nada"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/nopy/2.1/package.py b/src/rez/data/tests/solver/packages/nopy/2.1/package.py
index bb1279889..3a183da48 100644
--- a/src/rez/data/tests/solver/packages/nopy/2.1/package.py
+++ b/src/rez/data/tests/solver/packages/nopy/2.1/package.py
@@ -2,19 +2,3 @@
 version = "2.1"
 
 requires = ["!python-2.5"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pybah/4/package.py b/src/rez/data/tests/solver/packages/pybah/4/package.py
index cdeebfb71..30fdc87bc 100644
--- a/src/rez/data/tests/solver/packages/pybah/4/package.py
+++ b/src/rez/data/tests/solver/packages/pybah/4/package.py
@@ -2,19 +2,3 @@
 version = "4"
 
 requires = ["python-2.6", ".eek-1"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pybah/5/package.py b/src/rez/data/tests/solver/packages/pybah/5/package.py
index 61a16d6d3..59d2673e6 100644
--- a/src/rez/data/tests/solver/packages/pybah/5/package.py
+++ b/src/rez/data/tests/solver/packages/pybah/5/package.py
@@ -2,19 +2,3 @@
 version = "5"
 
 requires = ["python-2.5"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pydad/1/package.py b/src/rez/data/tests/solver/packages/pydad/1/package.py
index bdbb21e5c..d601bce3d 100644
--- a/src/rez/data/tests/solver/packages/pydad/1/package.py
+++ b/src/rez/data/tests/solver/packages/pydad/1/package.py
@@ -2,19 +2,3 @@
 version = "1"
 
 requires = ["pyson-1"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pydad/2/package.py b/src/rez/data/tests/solver/packages/pydad/2/package.py
index f67ed0fa0..62d1cb9c9 100644
--- a/src/rez/data/tests/solver/packages/pydad/2/package.py
+++ b/src/rez/data/tests/solver/packages/pydad/2/package.py
@@ -2,19 +2,3 @@
 version = "2"
 
 requires = ["pyson-2"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pydad/3/package.py b/src/rez/data/tests/solver/packages/pydad/3/package.py
index 70e7bebb9..8b53cb2fd 100644
--- a/src/rez/data/tests/solver/packages/pydad/3/package.py
+++ b/src/rez/data/tests/solver/packages/pydad/3/package.py
@@ -2,19 +2,3 @@
 version = "3"
 
 requires = ["pymum-3"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyfoo/3.0.0/package.py b/src/rez/data/tests/solver/packages/pyfoo/3.0.0/package.py
index 49d42256c..99157c41f 100644
--- a/src/rez/data/tests/solver/packages/pyfoo/3.0.0/package.py
+++ b/src/rez/data/tests/solver/packages/pyfoo/3.0.0/package.py
@@ -2,19 +2,3 @@
 version = "3.0.0"
 
 requires = ["python-2.5", ".eek-3+"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyfoo/3.1.0/package.py b/src/rez/data/tests/solver/packages/pyfoo/3.1.0/package.py
index 4c519cd4c..67513cb18 100644
--- a/src/rez/data/tests/solver/packages/pyfoo/3.1.0/package.py
+++ b/src/rez/data/tests/solver/packages/pyfoo/3.1.0/package.py
@@ -2,19 +2,3 @@
 version = "3.1.0"
 
 requires = ["python-2.6"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pymum/1/package.py b/src/rez/data/tests/solver/packages/pymum/1/package.py
index 6a1d2ace3..daee515f9 100644
--- a/src/rez/data/tests/solver/packages/pymum/1/package.py
+++ b/src/rez/data/tests/solver/packages/pymum/1/package.py
@@ -2,19 +2,3 @@
 version = "1"
 
 requires = ["pydad-1"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pymum/2/package.py b/src/rez/data/tests/solver/packages/pymum/2/package.py
index bfad565f8..69b588848 100644
--- a/src/rez/data/tests/solver/packages/pymum/2/package.py
+++ b/src/rez/data/tests/solver/packages/pymum/2/package.py
@@ -2,19 +2,3 @@
 version = "2"
 
 requires = ["pydad-2"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pymum/3/package.py b/src/rez/data/tests/solver/packages/pymum/3/package.py
index 5f81e73c8..d323f7396 100644
--- a/src/rez/data/tests/solver/packages/pymum/3/package.py
+++ b/src/rez/data/tests/solver/packages/pymum/3/package.py
@@ -2,19 +2,3 @@
 version = "3"
 
 requires = ["pydad-3"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyodd/1/package.py b/src/rez/data/tests/solver/packages/pyodd/1/package.py
index f9cdbe905..e3fe176eb 100644
--- a/src/rez/data/tests/solver/packages/pyodd/1/package.py
+++ b/src/rez/data/tests/solver/packages/pyodd/1/package.py
@@ -2,19 +2,3 @@
 version = "1"
 
 requires = ["pyfoo"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyodd/2/package.py b/src/rez/data/tests/solver/packages/pyodd/2/package.py
index 158e7cc14..4040a622e 100644
--- a/src/rez/data/tests/solver/packages/pyodd/2/package.py
+++ b/src/rez/data/tests/solver/packages/pyodd/2/package.py
@@ -2,19 +2,3 @@
 version = "2"
 
 requires = ["pybah"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyson/1/package.py b/src/rez/data/tests/solver/packages/pyson/1/package.py
index fa001ec9c..4e0ac0a8e 100644
--- a/src/rez/data/tests/solver/packages/pyson/1/package.py
+++ b/src/rez/data/tests/solver/packages/pyson/1/package.py
@@ -2,19 +2,3 @@
 version = "1"
 
 requires = ["pymum-1"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyson/2/package.py b/src/rez/data/tests/solver/packages/pyson/2/package.py
index 4a4718854..2863c49c8 100644
--- a/src/rez/data/tests/solver/packages/pyson/2/package.py
+++ b/src/rez/data/tests/solver/packages/pyson/2/package.py
@@ -2,19 +2,3 @@
 version = "2"
 
 requires = ["pymum-3"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pysplit/5/package.py b/src/rez/data/tests/solver/packages/pysplit/5/package.py
index 6aadb751d..7c0bfb8aa 100644
--- a/src/rez/data/tests/solver/packages/pysplit/5/package.py
+++ b/src/rez/data/tests/solver/packages/pysplit/5/package.py
@@ -1,18 +1,2 @@
 name = "pysplit"
 version = "5"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pysplit/6/package.py b/src/rez/data/tests/solver/packages/pysplit/6/package.py
index 58fcd1213..cdb8b5afe 100644
--- a/src/rez/data/tests/solver/packages/pysplit/6/package.py
+++ b/src/rez/data/tests/solver/packages/pysplit/6/package.py
@@ -2,19 +2,3 @@
 version = "6"
 
 requires = ["python-2.6"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pysplit/7/package.py b/src/rez/data/tests/solver/packages/pysplit/7/package.py
index a98c30930..48d472705 100644
--- a/src/rez/data/tests/solver/packages/pysplit/7/package.py
+++ b/src/rez/data/tests/solver/packages/pysplit/7/package.py
@@ -2,19 +2,3 @@
 version = "7"
 
 requires = ["python-2.7"]
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/python/2.5.2/package.py b/src/rez/data/tests/solver/packages/python/2.5.2/package.py
index 2d4663ae2..095df1544 100644
--- a/src/rez/data/tests/solver/packages/python/2.5.2/package.py
+++ b/src/rez/data/tests/solver/packages/python/2.5.2/package.py
@@ -1,18 +1,2 @@
 name = "python"
 version = "2.5.2"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/python/2.6.0/package.py b/src/rez/data/tests/solver/packages/python/2.6.0/package.py
index 7202d985a..a8074a538 100644
--- a/src/rez/data/tests/solver/packages/python/2.6.0/package.py
+++ b/src/rez/data/tests/solver/packages/python/2.6.0/package.py
@@ -1,18 +1,2 @@
 name = "python"
 version = "2.6.0"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/python/2.6.8/package.py b/src/rez/data/tests/solver/packages/python/2.6.8/package.py
index 03b48c0b1..35d2d28f3 100644
--- a/src/rez/data/tests/solver/packages/python/2.6.8/package.py
+++ b/src/rez/data/tests/solver/packages/python/2.6.8/package.py
@@ -1,18 +1,2 @@
 name = "python"
 version = "2.6.8"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/python/2.7.0/package.py b/src/rez/data/tests/solver/packages/python/2.7.0/package.py
index 6779233ea..526c4a745 100644
--- a/src/rez/data/tests/solver/packages/python/2.7.0/package.py
+++ b/src/rez/data/tests/solver/packages/python/2.7.0/package.py
@@ -1,18 +1,2 @@
 name = "python"
 version = "2.7.0"
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/data/tests/solver/packages/pyvariants/2/package.py b/src/rez/data/tests/solver/packages/pyvariants/2/package.py
index 253470537..ed06df9da 100644
--- a/src/rez/data/tests/solver/packages/pyvariants/2/package.py
+++ b/src/rez/data/tests/solver/packages/pyvariants/2/package.py
@@ -1,4 +1,4 @@
 name = "pyvariants"
 version = "2"
 
-variants = [["python-2.7.0"], ["python-2.6.8", "nada"]]
\ No newline at end of file
+variants = [["python-2.7.0"], ["python-2.6.8", "nada"]]
diff --git a/src/rez/data/tests/solver/packages/test_variant_split_end/1.0/package.py b/src/rez/data/tests/solver/packages/test_variant_split_end/1.0/package.py
index 74214eacb..49cac0b07 100644
--- a/src/rez/data/tests/solver/packages/test_variant_split_end/1.0/package.py
+++ b/src/rez/data/tests/solver/packages/test_variant_split_end/1.0/package.py
@@ -2,4 +2,3 @@
 version = "1.0"
 
 variants = [["!test_variant_split_mid2"], ["!test_variant_split_start-2"]]
-
diff --git a/src/rez/package_test.py b/src/rez/package_test.py
index 9678ba404..50b790e63 100644
--- a/src/rez/package_test.py
+++ b/src/rez/package_test.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.config import config
 from rez.resolved_context import ResolvedContext
 from rez.packages import get_latest_package_from_string
diff --git a/src/rez/tests/__init__.py b/src/rez/tests/__init__.py
index f49e68d05..582e11b0a 100644
--- a/src/rez/tests/__init__.py
+++ b/src/rez/tests/__init__.py
@@ -1,16 +1,13 @@
-
-
-# Copyright 2013-2016 Allan Johns.
+# Copyright Contributors to the Rez project
 #
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
 #
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
+#     http://www.apache.org/licenses/LICENSE-2.0
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/rez/tests/test_build.py b/src/rez/tests/test_build.py
index 0791ecdff..49ffa3e2a 100644
--- a/src/rez/tests/test_build.py
+++ b/src/rez/tests/test_build.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test the build system
 """
@@ -179,19 +194,3 @@ def test_build_custom(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_cli.py b/src/rez/tests/test_cli.py
index d7d3b87f4..34f46434e 100644
--- a/src/rez/tests/test_cli.py
+++ b/src/rez/tests/test_cli.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test running of all commandline tools (just -h on each)
 """
@@ -28,19 +43,3 @@ def test_1(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_commands.py b/src/rez/tests/test_commands.py
index b3d83a3a5..d70d0650f 100644
--- a/src/rez/tests/test_commands.py
+++ b/src/rez/tests/test_commands.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test package commands
 """
@@ -150,19 +165,3 @@ def test_2(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_completion.py b/src/rez/tests/test_completion.py
index d99f82d8c..3dd3491ab 100644
--- a/src/rez/tests/test_completion.py
+++ b/src/rez/tests/test_completion.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test completions
 """
@@ -59,19 +74,3 @@ def _eq(prefix, expected_completions):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_config.py b/src/rez/tests/test_config.py
index 8ad8d349b..0bdee7dfc 100644
--- a/src/rez/tests/test_config.py
+++ b/src/rez/tests/test_config.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test configuration settings
 """
@@ -291,19 +306,3 @@ def test_8(self):
 
 if __name__ == "__main__":
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_context.py b/src/rez/tests/test_context.py
index 5f2f89c6d..05961d1f9 100644
--- a/src/rez/tests/test_context.py
+++ b/src/rez/tests/test_context.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test resolved contexts
 """
@@ -181,19 +196,3 @@ def _test_bundle(path):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_copy_package.py b/src/rez/tests/test_copy_package.py
index d1d0689d0..3eedc040d 100644
--- a/src/rez/tests/test_copy_package.py
+++ b/src/rez/tests/test_copy_package.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test package copying
 """
diff --git a/src/rez/tests/test_formatter.py b/src/rez/tests/test_formatter.py
index f9ab24a9c..a0944455b 100644
--- a/src/rez/tests/test_formatter.py
+++ b/src/rez/tests/test_formatter.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test rex string formatting
 """
@@ -283,19 +298,3 @@ def test_formatter_recurse(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_imports.py b/src/rez/tests/test_imports.py
index e8bea99ce..3c399d878 100644
--- a/src/rez/tests/test_imports.py
+++ b/src/rez/tests/test_imports.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test importing of all source
 """
@@ -60,19 +75,3 @@ def test_1(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_package_cache.py b/src/rez/tests/test_package_cache.py
index 7a67078f5..b4b37bd1f 100644
--- a/src/rez/tests/test_package_cache.py
+++ b/src/rez/tests/test_package_cache.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Test package caching.
 """
diff --git a/src/rez/tests/test_packages.py b/src/rez/tests/test_packages.py
index a03b1b48d..ef1d35e2f 100644
--- a/src/rez/tests/test_packages.py
+++ b/src/rez/tests/test_packages.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test package iteration, serialization etc
 """
@@ -580,19 +595,3 @@ def test_1_memory_variant_parent(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_packages_order.py b/src/rez/tests/test_packages_order.py
index d1e3fd5a1..382e9e4c8 100644
--- a/src/rez/tests/test_packages_order.py
+++ b/src/rez/tests/test_packages_order.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 Test cases for package_order.py (package ordering)
 """
@@ -349,18 +364,3 @@ def test_from_pod_old_style(self):
             VersionSplitPackageOrder(first_version=Version("1.2.3")),
             from_pod(("version_split", {"first_version": "1.2.3"}))
         )
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_pip_utils.py b/src/rez/tests/test_pip_utils.py
index 201949639..93b13cf91 100644
--- a/src/rez/tests/test_pip_utils.py
+++ b/src/rez/tests/test_pip_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test the pip utilities
 """
diff --git a/src/rez/tests/test_plugin_manager.py b/src/rez/tests/test_plugin_manager.py
index 9ae6d6ced..de3e219d5 100644
--- a/src/rez/tests/test_plugin_manager.py
+++ b/src/rez/tests/test_plugin_manager.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test rezplugins manager behaviors
 """
diff --git a/src/rez/tests/test_release.py b/src/rez/tests/test_release.py
index 61240abe4..d563834c6 100644
--- a/src/rez/tests/test_release.py
+++ b/src/rez/tests/test_release.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test the release system
 """
@@ -234,19 +249,3 @@ def test_2_variant_add(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_resources_.py b/src/rez/tests/test_resources_.py
index ee706fed3..438a4e7e7 100644
--- a/src/rez/tests/test_resources_.py
+++ b/src/rez/tests/test_resources_.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test core resource system
 """
@@ -305,19 +320,3 @@ def _validate(resource, expected_data):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_rex.py b/src/rez/tests/test_rex.py
index 3253ffdf3..6348eb8ea 100644
--- a/src/rez/tests/test_rex.py
+++ b/src/rez/tests/test_rex.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test the rex command generator API
 """
@@ -546,19 +561,3 @@ def test_intersects_ephemerals(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_schema.py b/src/rez/tests/test_schema.py
index 3ae4f9fc6..814931bff 100644
--- a/src/rez/tests/test_schema.py
+++ b/src/rez/tests/test_schema.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 unit tests for 'schema' module
 """
@@ -7,19 +22,3 @@
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_shells.py b/src/rez/tests/test_shells.py
index dc7ea8843..b70d4ee48 100644
--- a/src/rez/tests/test_shells.py
+++ b/src/rez/tests/test_shells.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test shell invocation
 """
@@ -451,19 +466,3 @@ def _make_alias(ex):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_solver.py b/src/rez/tests/test_solver.py
index a35a3cf3d..ab00e9226 100644
--- a/src/rez/tests/test_solver.py
+++ b/src/rez/tests/test_solver.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test dependency resolving algorithm
 """
@@ -247,19 +262,3 @@ def test_11_variant_splitting(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_suites.py b/src/rez/tests/test_suites.py
index fcd5a8a93..bb6edd14e 100644
--- a/src/rez/tests/test_suites.py
+++ b/src/rez/tests/test_suites.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 test suites
 """
@@ -179,19 +194,3 @@ def test_executable(self):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_utils.py b/src/rez/tests/test_utils.py
index c79721e76..63dfdbb3e 100644
--- a/src/rez/tests/test_utils.py
+++ b/src/rez/tests/test_utils.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 unit tests for 'utils.filesystem' module
 """
@@ -44,19 +59,3 @@ def test_unix_case_insensistive_platform(self):
         path = filesystem.canonical_path('/a/b/File.txt', platform)
         expects = '/a/b/file.txt'.replace('\\', os.sep)
         self.assertEqual(path, expects)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/test_version.py b/src/rez/tests/test_version.py
index a84e4df1c..044d36243 100644
--- a/src/rez/tests/test_version.py
+++ b/src/rez/tests/test_version.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 """
 unit tests for 'version' module
 """
@@ -11,19 +26,3 @@ class TestVersions(TestVersionSchema):
 
 if __name__ == '__main__':
     unittest.main()
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/tests/util.py b/src/rez/tests/util.py
index 42c988fa9..92efa23bf 100644
--- a/src/rez/tests/util.py
+++ b/src/rez/tests/util.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from __future__ import print_function
 
 import unittest
@@ -320,19 +335,3 @@ def restore_os_environ():
 
         os.environ.clear()
         os.environ.update(original)
-
-
-# Copyright 2013-2016 Allan Johns.
-#
-# This library is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/src/rez/vendor/version/test.py b/src/rez/vendor/version/test.py
index 616cdca21..c63ac7394 100644
--- a/src/rez/vendor/version/test.py
+++ b/src/rez/vendor/version/test.py
@@ -1,3 +1,18 @@
+# Copyright Contributors to the Rez project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
 from rez.vendor.version.version import Version, AlphanumericVersionToken, \
     VersionRange, reverse_sort_key, _ReversedComparable
 from rez.vendor.version.requirement import Requirement, RequirementList