Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: rdma-core
Upstream-Contact: Doug Ledford <dledford@redhat.com>,
                  Leon Romanovsky <Leon@kernel.org>
Source: https://github.com/linux-rdma/rdma-core

Files: *
Copyright: disclaimed
License: BSD-MIT or GPL-2

Files: debian/*
Copyright: 2008, Genome Research Ltd
           2014, Ana Beatriz Guerrero Lopez <ana@debian.org>
           2015-2016, Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
           2016-2024, Benjamin Drung <bdrung@ubuntu.com>
           2016-2017, Talat Batheesh <talatb@mellanox.com>
License: GPL-2+
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 .
 On Debian systems, the full text of the GNU General Public License
 version 2 can be found in the file `/usr/share/common-licenses/GPL-2'.

Files: CMakeLists.txt
Copyright: 2015-2017, Obsidian Research Corporation.
License: BSD-MIT or GPL-2

Files: buildlib/*
Copyright: 2015-2017, Obsidian Research Corporation.
           2016-2017 Mellanox Technologies, Inc
License: BSD-MIT or GPL-2

Files: buildlib/fixup-include/stdatomic.h
Copyright: 2011 Ed Schouten <ed@FreeBSD.org>
                David Chisnall <theraven@FreeBSD.org>
License: BSD-2-clause

Files: ccan/*
Copyright: unspecified
License: CC0

Files: ccan/list.*
Copyright: unspecified
License: MIT

Files: ibacm/*
Copyright: 2009-2014, Intel Corporation.
           2013, Mellanox Technologies LTD.
License: BSD-MIT

Files: ibacm/man/*
       ibacm/ibacm.init.in
Copyright: disclaimed
License: BSD-2-clause

Files: ibacm/CMakeLists.txt
       ibacm/ibacm_hosts.data
Copyright: disclaimed
License: BSD-MIT or GPL-2

Files: iwpmd/*
Copyright: 2013-2016, Intel Corporation.
License: BSD-MIT or GPL-2

Files: kernel-headers/*
Copyright: disclaimed
License: GPL-2 or BSD-2-clause

Files: kernel-headers/rdma/rdma_netlink.h
Copyright: disclaimed
License: GPL-2

Files: kernel-headers/rdma/hfi/*
Copyright: disclaimed
License: GPL-2 or BSD-3-clause

Files: libibumad/*
Copyright: 2004-2017, Mellanox Technologies Ltd.
           2004, Infinicon Corporation.
           2004-2014, Intel Corporation.
           2004, Topspin Corporation.
           2004-2009, Voltaire Inc.
           2013 Lawrence Livermore National Security
           2013, Oracle and/or its affiliates.
License: BSD-MIT or GPL-2

Files: libibumad/man/*
Copyright: disclaimed
License: BSD-2-clause

Files: libibverbs/*
Copyright: 2004-2012, Intel Corporation.
           2004-2005, Topspin Communications.
           2005-2007, Cisco Systems, Inc.
           2005, PathScale, Inc.
           2005, Mellanox Technologies Ltd.
           2005, Voltaire, Inc.
           2008, Lawrence Livermore National Laboratory.
License: BSD-MIT or GPL-2

Files: libibverbs/man/*
       libibverbs/neigh.h
       libibverbs/neigh.c
Copyright: disclaimed
License: BSD-2-clause

Files: librdmacm/*
Copyright: 2005-2014, Intel Corporation.
           2005, Ammasso, Inc.
           2005, Voltaire Inc.
           2006, Open Grid Computing, Inc.
           2014-2015, Mellanox Technologies LTD.
License: BSD-MIT or GPL-2

Files: librdmacm/examples/cmtime.c
       librdmacm/examples/rcopy.c
       librdmacm/examples/rdma_client.c
       librdmacm/examples/rdma_server.c
       librdmacm/examples/rdma_xclient.c
       librdmacm/examples/rdma_xserver.c
       librdmacm/examples/riostream.c
       librdmacm/examples/rstream.c
       librdmacm/examples/udpong.c
Copyright: 2005-2014, Intel Corporation.
           2014-2015, Mellanox Technologies LTD.
License: BSD-MIT

Files: librdmacm/docs/rsocket
Copyright: disclaimed
License: BSD-2-clause

Files: librdmacm/man/*
Copyright: disclaimed
License: BSD-2-clause

Files: providers/bnxt_re/*
Copyright: 2015-2017, Broadcom Limited and/or its subsidiaries
License: BSD-2-clause or GPL-2

Files: providers/cxgb4/*
Copyright: 2003-2016, Chelsio Communications, Inc.
License: BSD-MIT or GPL-2

Files: providers/efa/*
       pyverbs/providers/efa/*
Copyright: 2019-2024 Amazon.com, Inc. or its affiliates.
License: BSD-2-clause or GPL-2

Files: providers/erdma/*
Copyright: 2020-2021, Alibaba Group
License: BSD-MIT or GPL-2

Files: providers/hfi1verbs/*
Copyright: 2005 PathScale, Inc.
           2006-2009 QLogic Corporation
           2015 Intel Corporation
License: BSD-3-clause or GPL-2

Files: providers/hns/*
Copyright: 2016, Hisilicon Limited.
License: BSD-MIT or GPL-2

Files: providers/ipathverbs/*
Copyright: 2006-2010, QLogic Corp.
           2005, PathScale, Inc.
           2013, Intel Corporation
License: BSD-MIT or GPL-2

Files: providers/ionic/*
Copyright: 2018-2025, Advanced Micro Devices, Inc.
License: BSD-MIT or GPL-2

Files: providers/irdma/*
Copyright: 2015-2023, Intel Corporation.
License: BSD-MIT or GPL-2

Files: providers/mana/*
Copyright: 2022, Microsoft Corporation.
License: BSD-MIT or GPL-2

Files: providers/mlx4/*
Copyright: 2004-2005, Topspin Communications.
           2005-2007, Cisco, Inc.
           2005-2017, Mellanox Technologies Ltd.
License: BSD-MIT or GPL-2

Files: providers/mlx5/*
Copyright: 2019, Mellanox Technologies, Inc.
           2020-2024 Nvidia, Inc.
License: BSD-MIT or GPL-2

Files: providers/mlx5/man/*.3
       providers/mlx5/man/*.7
Copyright: disclaimed
License: BSD-MIT

Files: providers/mthca/*
Copyright: 2004-2005, Topspin Communications.
           2005-2006, Cisco Systems.
           2005, Mellanox Technologies Ltd.
License: BSD-MIT or GPL-2

Files: providers/ocrdma/*
Copyright: 2008-2013, Emulex.
License: BSD-2-clause or GPL-2

Files: providers/qedr/*
Copyright: 2015-2016, QLogic Corporation.
License: BSD-MIT or GPL-2

Files: providers/rxe/*
Copyright: 2009-2011, System Fabric Works, Inc.
           2009-2011, Mellanox Technologies Ltd.
           2006-2007, QLogic Corporation.
           2005, PathScale, Inc.
License: BSD-MIT or GPL-2

Files: providers/siw/*
Copyright: 2008-2019, IBM Corporation.
License: BSD-3-clause or GPL-2

Files: providers/vmw_pvrdma/*
Copyright: 2012-2016 VMware, Inc.
License: BSD-2-clause or GPL-2

Files: rdma-ndd/*
Copyright: 2004-2016, Intel Corporation.
License: BSD-MIT or GPL-2

Files: redhat/*
Copyright: 1996-2013, Red Hat, Inc.
License: GPL-2

Files: srp_daemon/*
Copyright: 2005, Topspin Communications.
           2006, Cisco Systems, Inc.
           2006, Mellanox Technologies Ltd.
License: BSD-MIT or GPL-2

Files: srp_daemon/srp_daemon.8.in
Copyright: 2006 Mellanox Technologies.
License: CPL-1.0 or BSD-2-clause or GPL-2

Files: srp_daemon/srpd.in
       srp_daemon/ibsrpdm.8
Copyright: disclaimed
License: BSD-2-clause

Files: util/udma_barrier.h
Copyright: 2005 Topspin Communications.
License: BSD-MIT or GPL-2

License: BSD-MIT
              OpenIB.org BSD license (MIT variant)
 .
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 .
   - Redistributions of source code must retain the above copyright notice,
     this list of conditions and the following disclaimer.
 .
   - Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
 .
 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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

License: BSD-2-clause
            OpenIB.org BSD license (FreeBSD Variant)
 .
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 .
   - Redistributions of source code must retain the above copyright notice,
     this list of conditions and the following disclaimer.
 .
   - Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
 .
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

License: BSD-3-clause
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
 .
   * Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in
     the documentation and/or other materials provided with the
     distribution.
   * Neither the name of Intel Corporation nor the names of its
     contributors may be used to endorse or promote products derived
     from this software without specific prior written permission.
 .
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

License: GPL-2
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; version 2 of the License.
 .
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 .
 On Debian systems, the full text of the GNU General Public License
 version 2 can be found in the file `/usr/share/common-licenses/GPL-2'.

License: CC0
 The laws of most jurisdictions throughout the world automatically confer
 exclusive Copyright and Related Rights (defined below) upon the creator and
 subsequent owner(s) (each and all, an "owner") of an original work of
 authorship and/or a database (each, a "Work").
 .
 Certain owners wish to permanently relinquish those rights to a Work for the
 purpose of contributing to a commons of creative, cultural and scientific works
 ("Commons") that the public can reliably and without fear of later claims of
 infringement build upon, modify, incorporate in other works, reuse and
 redistribute as freely as possible in any form whatsoever and for any purposes,
 including without limitation commercial purposes. These owners may contribute
 to the Commons to promote the ideal of a free culture and the further
 production of creative, cultural and scientific works, or to gain reputation or
 greater distribution for their Work in part through the use and efforts of
 others.
 .
 For these and/or other purposes and motivations, and without any expectation of
 additional consideration or compensation, the person associating CC0 with a
 Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
 and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and
 publicly distribute the Work under its terms, with knowledge of his or her
 Copyright and Related Rights in the Work and the meaning and intended legal
 effect of CC0 on those rights.
 .
 1. Copyright and Related Rights. A Work made available under CC0 may be
 protected by copyright and related or neighboring rights ("Copyright and
 Related Rights"). Copyright and Related Rights include, but are not limited to,
 the following:
 .
     the right to reproduce, adapt, distribute, perform, display, communicate,
 and translate a Work; moral rights retained by the original author(s) and/or
 performer(s); publicity and privacy rights pertaining to a person's image or
 likeness depicted in a Work; rights protecting against unfair competition in
 regards to a Work, subject to the limitations in paragraph 4(a), below; rights
 protecting the extraction, dissemination, use and reuse of data in a Work;
 database rights (such as those arising under Directive 96/9/EC of the European
 Parliament and of the Council of 11 March 1996 on the legal protection of
 databases, and under any national implementation thereof, including any amended
 or successor version of such directive); and other similar, equivalent or
 corresponding rights throughout the world based on applicable law or treaty,
 and any national implementations thereof.
 .
 2. Waiver. To the greatest extent permitted by, but not in contravention of,
 applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
 unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
 and Related Rights and associated claims and causes of action, whether now
 known or unknown (including existing as well as future claims and causes of
 action), in the Work (i) in all territories worldwide, (ii) for the maximum
 duration provided by applicable law or treaty (including future time
 extensions), (iii) in any current or future medium and for any number of
 copies, and (iv) for any purpose whatsoever, including without limitation
 commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
 the Waiver for the benefit of each member of the public at large and to the
 detriment of Affirmer's heirs and successors, fully intending that such Waiver
 shall not be subject to revocation, rescission, cancellation, termination, or
 any other legal or equitable action to disrupt the quiet enjoyment of the Work
 by the public as contemplated by Affirmer's express Statement of Purpose.
 .
 3. Public License Fallback. Should any part of the Waiver for any reason be
 judged legally invalid or ineffective under applicable law, then the Waiver
 shall be preserved to the maximum extent permitted taking into account
 Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
 is so judged Affirmer hereby grants to each affected person a royalty-free, non
 transferable, non sublicensable, non exclusive, irrevocable and unconditional
 license to exercise Affirmer's Copyright and Related Rights in the Work (i) in
 all territories worldwide, (ii) for the maximum duration provided by applicable
 law or treaty (including future time extensions), (iii) in any current or
 future medium and for any number of copies, and (iv) for any purpose
 whatsoever, including without limitation commercial, advertising or promotional
 purposes (the "License"). The License shall be deemed effective as of the date
 CC0 was applied by Affirmer to the Work. Should any part of the License for any
 reason be judged legally invalid or ineffective under applicable law, such
 partial invalidity or ineffectiveness shall not invalidate the remainder of the
 License, and in such case Affirmer hereby affirms that he or she will not (i)
 exercise any of his or her remaining Copyright and Related Rights in the Work
 or (ii) assert any associated claims and causes of action with respect to the
 Work, in either case contrary to Affirmer's express Statement of Purpose.
 .
 4. Limitations and Disclaimers.
 .
     No trademark or patent rights held by Affirmer are waived, abandoned,
 surrendered, licensed or otherwise affected by this document.  Affirmer offers
 the Work as-is and makes no representations or warranties of any kind
 concerning the Work, express, implied, statutory or otherwise, including
 without limitation warranties of title, merchantability, fitness for a
 particular purpose, non infringement, or the absence of latent or other
 defects, accuracy, or the present or absence of errors, whether or not
 discoverable, all to the greatest extent permissible under applicable law.
 Affirmer disclaims responsibility for clearing rights of other persons that may
 apply to the Work or any use thereof, including without limitation any person's
 Copyright and Related Rights in the Work. Further, Affirmer disclaims
 responsibility for obtaining any necessary consents, permissions or other
 rights required for any use of the Work.  Affirmer understands and acknowledges
 that Creative Commons is not a party to this document and has no duty or
 obligation with respect to this CC0 or use of the Work.

License: MIT
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
 .
 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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.

License: CPL-1.0
 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
 LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
 CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
 .
 1. DEFINITIONS
 .
 "Contribution" means:
 .
 a) in the case of the initial Contributor, the initial code and
 documentation distributed under this Agreement, and
 .
 b) in the case of each subsequent Contributor:
 .
 i) changes to the Program, and
 .
 ii) additions to the Program;
 .
 where such changes and/or additions to the Program originate from and are
 distributed by that particular Contributor. A Contribution 'originates' from a
 Contributor if it was added to the Program by such Contributor itself or anyone
 acting on such Contributor's behalf. Contributions do not include additions to
 the Program which: (i) are separate modules of software distributed in
 conjunction with the Program under their own license agreement, and (ii) are not
 derivative works of the Program.
 .
 "Contributor" means any person or entity that distributes the Program.
 .
 "Licensed Patents " mean patent claims licensable by a Contributor which are
 necessarily infringed by the use or sale of its Contribution alone or when
 combined with the Program.
 .
 "Program" means the Contributions distributed in accordance with this Agreement.
 .
 "Recipient" means anyone who receives the Program under this Agreement,
 including all Contributors.
 .
 2. GRANT OF RIGHTS
 .
 a) Subject to the terms of this Agreement, each Contributor hereby grants
 Recipient a non-exclusive, worldwide, royalty-free copyright license to
 reproduce, prepare derivative works of, publicly display, publicly perform,
 distribute and sublicense the Contribution of such Contributor, if any, and such
 derivative works, in source code and object code form.
 .
 b) Subject to the terms of this Agreement, each Contributor hereby grants
 Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
 Patents to make, use, sell, offer to sell, import and otherwise transfer the
 Contribution of such Contributor, if any, in source code and object code form.
 This patent license shall apply to the combination of the Contribution and the
 Program if, at the time the Contribution is added by the Contributor, such
 addition of the Contribution causes such combination to be covered by the
 Licensed Patents. The patent license shall not apply to any other combinations
 which include the Contribution. No hardware per se is licensed hereunder.
 .
 c) Recipient understands that although each Contributor grants the licenses
 to its Contributions set forth herein, no assurances are provided by any
 Contributor that the Program does not infringe the patent or other intellectual
 property rights of any other entity. Each Contributor disclaims any liability to
 Recipient for claims brought by any other entity based on infringement of
 intellectual property rights or otherwise. As a condition to exercising the
 rights and licenses granted hereunder, each Recipient hereby assumes sole
 responsibility to secure any other intellectual property rights needed, if any.
 For example, if a third party patent license is required to allow Recipient to
 distribute the Program, it is Recipient's responsibility to acquire that license
 before distributing the Program.
 .
 d) Each Contributor represents that to its knowledge it has sufficient
 copyright rights in its Contribution, if any, to grant the copyright license set
 forth in this Agreement.
 .
 3. REQUIREMENTS
 .
 A Contributor may choose to distribute the Program in object code form under its
 own license agreement, provided that:
 .
 a) it complies with the terms and conditions of this Agreement; and
 .
 b) its license agreement:
 .
 i) effectively disclaims on behalf of all Contributors all warranties and
 conditions, express and implied, including warranties or conditions of title and
 non-infringement, and implied warranties or conditions of merchantability and
 fitness for a particular purpose;
 .
 ii) effectively excludes on behalf of all Contributors all liability for
 damages, including direct, indirect, special, incidental and consequential
 damages, such as lost profits;
 .
 iii) states that any provisions which differ from this Agreement are offered
 by that Contributor alone and not by any other party; and
 .
 iv) states that source code for the Program is available from such
 Contributor, and informs licensees how to obtain it in a reasonable manner on or
 through a medium customarily used for software exchange.
 .
 When the Program is made available in source code form:
 .
 a) it must be made available under this Agreement; and
 .
 b) a copy of this Agreement must be included with each copy of the Program.
 .
 Contributors may not remove or alter any copyright notices contained within the
 Program.
 .
 Each Contributor must identify itself as the originator of its Contribution, if
 any, in a manner that reasonably allows subsequent Recipients to identify the
 originator of the Contribution.
 .
 4. COMMERCIAL DISTRIBUTION
 .
 Commercial distributors of software may accept certain responsibilities with
 respect to end users, business partners and the like. While this license is
 intended to facilitate the commercial use of the Program, the Contributor who
 includes the Program in a commercial product offering should do so in a manner
 which does not create potential liability for other Contributors. Therefore, if
 a Contributor includes the Program in a commercial product offering, such
 Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
 every other Contributor ("Indemnified Contributor") against any losses, damages
 and costs (collectively "Losses") arising from claims, lawsuits and other legal
 actions brought by a third party against the Indemnified Contributor to the
 extent caused by the acts or omissions of such Commercial Contributor in
 connection with its distribution of the Program in a commercial product
 offering. The obligations in this section do not apply to any claims or Losses
 relating to any actual or alleged intellectual property infringement. In order
 to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
 Contributor in writing of such claim, and b) allow the Commercial Contributor to
 control, and cooperate with the Commercial Contributor in, the defense and any
 related settlement negotiations. The Indemnified Contributor may participate in
 any such claim at its own expense.
 .
 For example, a Contributor might include the Program in a commercial product
 offering, Product X. That Contributor is then a Commercial Contributor. If that
 Commercial Contributor then makes performance claims, or offers warranties
 related to Product X, those performance claims and warranties are such
 Commercial Contributor's responsibility alone. Under this section, the
 Commercial Contributor would have to defend claims against the other
 Contributors related to those performance claims and warranties, and if a court
 requires any other Contributor to pay any damages as a result, the Commercial
 Contributor must pay those damages.
 .
 5. NO WARRANTY
 .
 EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED 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. Each
 Recipient is solely responsible for determining the appropriateness of using and
 distributing the Program and assumes all risks associated with its exercise of
 rights under this Agreement, including but not limited to the risks and costs of
 program errors, compliance with applicable laws, damage to or loss of data,
 programs or equipment, and unavailability or interruption of operations.
 .
 6. DISCLAIMER OF LIABILITY
 .
 EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
 CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
 PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
 GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 .
 7. GENERAL
 .
 If any provision of this Agreement is invalid or unenforceable under applicable
 law, it shall not affect the validity or enforceability of the remainder of the
 terms of this Agreement, and without further action by the parties hereto, such
 provision shall be reformed to the minimum extent necessary to make such
 provision valid and enforceable.
 .
 If Recipient institutes patent litigation against a Contributor with respect to
 a patent applicable to software (including a cross-claim or counterclaim in a
 lawsuit), then any patent licenses granted by that Contributor to such Recipient
 under this Agreement shall terminate as of the date such litigation is filed. In
 addition, if Recipient institutes patent litigation against any entity
 (including a cross-claim or counterclaim in a lawsuit) alleging that the Program
 itself (excluding combinations of the Program with other software or hardware)
 infringes such Recipient's patent(s), then such Recipient's rights granted under
 Section 2(b) shall terminate as of the date such litigation is filed.
 .
 All Recipient's rights under this Agreement shall terminate if it fails to
 comply with any of the material terms or conditions of this Agreement and does
 not cure such failure in a reasonable period of time after becoming aware of
 such noncompliance. If all Recipient's rights under this Agreement terminate,
 Recipient agrees to cease use and distribution of the Program as soon as
 reasonably practicable. However, Recipient's obligations under this Agreement
 and any licenses granted by Recipient relating to the Program shall continue and
 survive.
 .
 Everyone is permitted to copy and distribute copies of this Agreement, but in
 order to avoid inconsistency the Agreement is copyrighted and may only be
 modified in the following manner. The Agreement Steward reserves the right to
 publish new versions (including revisions) of this Agreement from time to time.
 No one other than the Agreement Steward has the right to modify this Agreement.
 IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
 as the Agreement Steward to a suitable separate entity. Each new version of the
 Agreement will be given a distinguishing version number. The Program (including
 Contributions) may always be distributed subject to the version of the Agreement
 under which it was received. In addition, after a new version of the Agreement
 is published, Contributor may elect to distribute the Program (including its
 Contributions) under the new version. Except as expressly stated in Sections
 2(a) and 2(b) above, Recipient receives no rights or licenses to the
 intellectual property of any Contributor under this Agreement, whether
 expressly, by implication, estoppel or otherwise. All rights in the Program not
 expressly granted under this Agreement are reserved.
 .
 This Agreement is governed by the laws of the State of New York and the
 intellectual property laws of the United States of America. No party to this
 Agreement will bring a legal action under this Agreement more than one year
 after the cause of action arose. Each party waives its rights to a jury trial in
 any resulting litigation.
