=======================================================================
License information for Linux binary test jar distribution dependencies
=======================================================================

In addition to dependencies described elsewhere, the below dependencies are
distributed with the Linux version of the Kudu binary test jar.

--------------------------------------------------------------------------------
OpenSSL: OpenSSL software license
libraries: libssl, libcrypto
Source: Centos 7 yum repository

--------------------------------------------------------------------------------
MIT Kerberos Version 5: MIT license
libraries: libgssapi_krb5, libkrb5, libkrb5support, libk5crypto
Source: Centos 7 yum repository

  Copyright (C) 1985-2013 by the Massachusetts Institute of Technology.

  All rights reserved.

      Export of software employing encryption from the United States of
      America may require a specific license from the United States
      Government.  It is the responsibility of any person or organization
      contemplating export to obtain such a license before exporting.

  WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute
  this software for any purpose and without fee is hereby granted,
  provided that the above copyright notice appear in all copies and that
  both that copyright notice and this permission notice appear in
  supporting documentation, and that the name of M.I.T. not be used in
  advertising or publicity pertaining to distribution of the software
  without specific, written prior permission.  Furthermore if you modify
  this software you must label your software as modified software and not
  distribute it in such a fashion that it might be confused with the
  original MIT software.  M.I.T. makes no representations about the
  suitability of this software for any purpose.  It is provided "as is"
  without express or implied warranty.

  Documentation components of this software distribution are licensed
  under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
  (`http://creativecommons.org/licenses/by-sa/3.0/')

  Individual source code files are copyright MIT, Cygnus Support, Novell,
  OpenVision Technologies, Oracle, Red Hat, Sun Microsystems,
  FundsXpress, and others.

  Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,
  and Zephyr are trademarks of the Massachusetts Institute of Technology
  (MIT).  No commercial use of these trademarks may be made without prior
  written permission of MIT.

  "Commercial use" means use of a name in a product or other for-profit
  manner.  It does NOT prevent a commercial firm from referring to the
  MIT trademarks in order to convey information (although in doing so,
  recognition of their trademark status should be given).

--------------------------------------------------------------------------------
curl: MIT/X derivative license
libraries: libcurl
Source: http://curl.haxx.se/

  Copyright (c) 1996 - 2020, Daniel Stenberg, daniel@haxx.se, and many
  contributors, see the THANKS file.

  All rights reserved.

  Permission to use, copy, modify, and distribute this software for any purpose
  with or without fee is hereby granted, provided that the above copyright
  notice and this permission notice appear in all copies.

  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 OF THIRD PARTY RIGHTS.
  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.

  Except as contained in this notice, the name of a copyright holder shall not
  be used in advertising or otherwise to promote the sale, use or other
  dealings in this Software without prior written authorization of the
  copyright holder.

--------------------------------------------------------------------------------
Cyrus SASL: BSD license
libraries: libsasl2, libanonymous, libgssapiv2, liblogin, libplain, libsasldb
libraries: libgs2, libdigestmd5, libcrammd5, libscram, libntlm, libpcre2
Source: Centos 7 yum repository

  Copyright (c) 1998-2003 Carnegie Mellon University.  All rights reserved.

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

  1. Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

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

  3. The name "Carnegie Mellon University" must not be used to
    endorse or promote products derived from this software without
    prior written permission. For permission or any other legal
    details, please contact
      Office of Technology Transfer
      Carnegie Mellon University
      5000 Forbes Avenue
      Pittsburgh, PA  15213-3890
      (412) 268-4387, fax: (412) 268-7395
      tech-transfer@andrew.cmu.edu

  4. Redistributions of any form whatsoever must retain the following
    acknowledgment:
    "This product includes software developed by Computing Services
      at Carnegie Mellon University (http://www.cmu.edu/computing/)."

  CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
  THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

--------------------------------------------------------------------------------
yaml-cpp: BSD license
libraries: libyaml-cpp
Source: yaml-cpp-yaml-cpp-0.6.2 source tarball

  Copyright (c) 2008-2015 Jesse Beder.

  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.

--------------------------------------------------------------------------------
NSS Softokn Cryptographic Module Freebl Library: MPL 2.0 license
libraries: libfreebl3
Source: Centos 7 yum repository

  NSS is available under the Mozilla Public License, version 2, a copy of which
  is below.

  Mozilla Public License Version 2.0
  ==================================

  1. Definitions
  --------------

  1.1. "Contributor"
      means each individual or legal entity that creates, contributes to
      the creation of, or owns Covered Software.

  1.2. "Contributor Version"
      means the combination of the Contributions of others (if any) used
      by a Contributor and that particular Contributor's Contribution.

  1.3. "Contribution"
      means Covered Software of a particular Contributor.

  1.4. "Covered Software"
      means Source Code Form to which the initial Contributor has attached
      the notice in Exhibit A, the Executable Form of such Source Code
      Form, and Modifications of such Source Code Form, in each case
      including portions thereof.

  1.5. "Incompatible With Secondary Licenses"
      means

      (a) that the initial Contributor has attached the notice described
          in Exhibit B to the Covered Software; or

      (b) that the Covered Software was made available under the terms of
          version 1.1 or earlier of the License, but not also under the
          terms of a Secondary License.

  1.6. "Executable Form"
      means any form of the work other than Source Code Form.

  1.7. "Larger Work"
      means a work that combines Covered Software with other material, in
      a separate file or files, that is not Covered Software.

  1.8. "License"
      means this document.

  1.9. "Licensable"
      means having the right to grant, to the maximum extent possible,
      whether at the time of the initial grant or subsequently, any and
      all of the rights conveyed by this License.

  1.10. "Modifications"
      means any of the following:

      (a) any file in Source Code Form that results from an addition to,
          deletion from, or modification of the contents of Covered
          Software; or

      (b) any new file in Source Code Form that contains any Covered
          Software.

  1.11. "Patent Claims" of a Contributor
      means any patent claim(s), including without limitation, method,
      process, and apparatus claims, in any patent Licensable by such
      Contributor that would be infringed, but for the grant of the
      License, by the making, using, selling, offering for sale, having
      made, import, or transfer of either its Contributions or its
      Contributor Version.

  1.12. "Secondary License"
      means either the GNU General Public License, Version 2.0, the GNU
      Lesser General Public License, Version 2.1, the GNU Affero General
      Public License, Version 3.0, or any later versions of those
      licenses.

  1.13. "Source Code Form"
      means the form of the work preferred for making modifications.

  1.14. "You" (or "Your")
      means an individual or a legal entity exercising rights under this
      License. For legal entities, "You" includes any entity that
      controls, is controlled by, or is under common control with You. For
      purposes of this definition, "control" means (a) the power, direct
      or indirect, to cause the direction or management of such entity,
      whether by contract or otherwise, or (b) ownership of more than
      fifty percent (50%) of the outstanding shares or beneficial
      ownership of such entity.

  2. License Grants and Conditions
  --------------------------------

  2.1. Grants

  Each Contributor hereby grants You a world-wide, royalty-free,
  non-exclusive license:

  (a) under intellectual property rights (other than patent or trademark)
      Licensable by such Contributor to use, reproduce, make available,
      modify, display, perform, distribute, and otherwise exploit its
      Contributions, either on an unmodified basis, with Modifications, or
      as part of a Larger Work; and

  (b) under Patent Claims of such Contributor to make, use, sell, offer
      for sale, have made, import, and otherwise transfer either its
      Contributions or its Contributor Version.

  2.2. Effective Date

  The licenses granted in Section 2.1 with respect to any Contribution
  become effective for each Contribution on the date the Contributor first
  distributes such Contribution.

  2.3. Limitations on Grant Scope

  The licenses granted in this Section 2 are the only rights granted under
  this License. No additional rights or licenses will be implied from the
  distribution or licensing of Covered Software under this License.
  Notwithstanding Section 2.1(b) above, no patent license is granted by a
  Contributor:

  (a) for any code that a Contributor has removed from Covered Software;
      or

  (b) for infringements caused by: (i) Your and any other third party's
      modifications of Covered Software, or (ii) the combination of its
      Contributions with other software (except as part of its Contributor
      Version); or

  (c) under Patent Claims infringed by Covered Software in the absence of
      its Contributions.

  This License does not grant any rights in the trademarks, service marks,
  or logos of any Contributor (except as may be necessary to comply with
  the notice requirements in Section 3.4).

  2.4. Subsequent Licenses

  No Contributor makes additional grants as a result of Your choice to
  distribute the Covered Software under a subsequent version of this
  License (see Section 10.2) or under the terms of a Secondary License (if
  permitted under the terms of Section 3.3).

  2.5. Representation

  Each Contributor represents that the Contributor believes its
  Contributions are its original creation(s) or it has sufficient rights
  to grant the rights to its Contributions conveyed by this License.

  2.6. Fair Use

  This License is not intended to limit any rights You have under
  applicable copyright doctrines of fair use, fair dealing, or other
  equivalents.

  2.7. Conditions

  Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
  in Section 2.1.

  3. Responsibilities
  -------------------

  3.1. Distribution of Source Form

  All distribution of Covered Software in Source Code Form, including any
  Modifications that You create or to which You contribute, must be under
  the terms of this License. You must inform recipients that the Source
  Code Form of the Covered Software is governed by the terms of this
  License, and how they can obtain a copy of this License. You may not
  attempt to alter or restrict the recipients' rights in the Source Code
  Form.

  3.2. Distribution of Executable Form

  If You distribute Covered Software in Executable Form then:

  (a) such Covered Software must also be made available in Source Code
      Form, as described in Section 3.1, and You must inform recipients of
      the Executable Form how they can obtain a copy of such Source Code
      Form by reasonable means in a timely manner, at a charge no more
      than the cost of distribution to the recipient; and

  (b) You may distribute such Executable Form under the terms of this
      License, or sublicense it under different terms, provided that the
      license for the Executable Form does not attempt to limit or alter
      the recipients' rights in the Source Code Form under this License.

  3.3. Distribution of a Larger Work

  You may create and distribute a Larger Work under terms of Your choice,
  provided that You also comply with the requirements of this License for
  the Covered Software. If the Larger Work is a combination of Covered
  Software with a work governed by one or more Secondary Licenses, and the
  Covered Software is not Incompatible With Secondary Licenses, this
  License permits You to additionally distribute such Covered Software
  under the terms of such Secondary License(s), so that the recipient of
  the Larger Work may, at their option, further distribute the Covered
  Software under the terms of either this License or such Secondary
  License(s).

  3.4. Notices

  You may not remove or alter the substance of any license notices
  (including copyright notices, patent notices, disclaimers of warranty,
  or limitations of liability) contained within the Source Code Form of
  the Covered Software, except that You may alter any license notices to
  the extent required to remedy known factual inaccuracies.

  3.5. Application of Additional Terms

  You may choose to offer, and to charge a fee for, warranty, support,
  indemnity or liability obligations to one or more recipients of Covered
  Software. However, You may do so only on Your own behalf, and not on
  behalf of any Contributor. You must make it absolutely clear that any
  such warranty, support, indemnity, or liability obligation is offered by
  You alone, and You hereby agree to indemnify every Contributor for any
  liability incurred by such Contributor as a result of warranty, support,
  indemnity or liability terms You offer. You may include additional
  disclaimers of warranty and limitations of liability specific to any
  jurisdiction.

  4. Inability to Comply Due to Statute or Regulation
  ---------------------------------------------------

  If it is impossible for You to comply with any of the terms of this
  License with respect to some or all of the Covered Software due to
  statute, judicial order, or regulation then You must: (a) comply with
  the terms of this License to the maximum extent possible; and (b)
  describe the limitations and the code they affect. Such description must
  be placed in a text file included with all distributions of the Covered
  Software under this License. Except to the extent prohibited by statute
  or regulation, such description must be sufficiently detailed for a
  recipient of ordinary skill to be able to understand it.

  5. Termination
  --------------

  5.1. The rights granted under this License will terminate automatically
  if You fail to comply with any of its terms. However, if You become
  compliant, then the rights granted under this License from a particular
  Contributor are reinstated (a) provisionally, unless and until such
  Contributor explicitly and finally terminates Your grants, and (b) on an
  ongoing basis, if such Contributor fails to notify You of the
  non-compliance by some reasonable means prior to 60 days after You have
  come back into compliance. Moreover, Your grants from a particular
  Contributor are reinstated on an ongoing basis if such Contributor
  notifies You of the non-compliance by some reasonable means, this is the
  first time You have received notice of non-compliance with this License
  from such Contributor, and You become compliant prior to 30 days after
  Your receipt of the notice.

  5.2. If You initiate litigation against any entity by asserting a patent
  infringement claim (excluding declaratory judgment actions,
  counter-claims, and cross-claims) alleging that a Contributor Version
  directly or indirectly infringes any patent, then the rights granted to
  You by any and all Contributors for the Covered Software under Section
  2.1 of this License shall terminate.

  5.3. In the event of termination under Sections 5.1 or 5.2 above, all
  end user license agreements (excluding distributors and resellers) which
  have been validly granted by You or Your distributors under this License
  prior to termination shall survive termination.

  ************************************************************************
  *                                                                      *
  *  6. Disclaimer of Warranty                                           *
  *  -------------------------                                           *
  *                                                                      *
  *  Covered Software is provided under this License on an "as is"       *
  *  basis, without warranty of any kind, either expressed, implied, or  *
  *  statutory, including, without limitation, warranties that the       *
  *  Covered Software is free of defects, merchantable, fit for a        *
  *  particular purpose or non-infringing. The entire risk as to the     *
  *  quality and performance of the Covered Software is with You.        *
  *  Should any Covered Software prove defective in any respect, You     *
  *  (not any Contributor) assume the cost of any necessary servicing,   *
  *  repair, or correction. This disclaimer of warranty constitutes an   *
  *  essential part of this License. No use of any Covered Software is   *
  *  authorized under this License except under this disclaimer.         *
  *                                                                      *
  ************************************************************************

  ************************************************************************
  *                                                                      *
  *  7. Limitation of Liability                                          *
  *  --------------------------                                          *
  *                                                                      *
  *  Under no circumstances and under no legal theory, whether tort      *
  *  (including negligence), contract, or otherwise, shall any           *
  *  Contributor, or anyone who distributes Covered Software as          *
  *  permitted above, be liable to You for any direct, indirect,         *
  *  special, incidental, or consequential damages of any character      *
  *  including, without limitation, damages for lost profits, loss of    *
  *  goodwill, work stoppage, computer failure or malfunction, or any    *
  *  and all other commercial damages or losses, even if such party      *
  *  shall have been informed of the possibility of such damages. This   *
  *  limitation of liability shall not apply to liability for death or   *
  *  personal injury resulting from such party's negligence to the       *
  *  extent applicable law prohibits such limitation. Some               *
  *  jurisdictions do not allow the exclusion or limitation of           *
  *  incidental or consequential damages, so this exclusion and          *
  *  limitation may not apply to You.                                    *
  *                                                                      *
  ************************************************************************

  8. Litigation
  -------------

  Any litigation relating to this License may be brought only in the
  courts of a jurisdiction where the defendant maintains its principal
  place of business and such litigation shall be governed by laws of that
  jurisdiction, without reference to its conflict-of-law provisions.
  Nothing in this Section shall prevent a party's ability to bring
  cross-claims or counter-claims.

  9. Miscellaneous
  ----------------

  This License represents the complete agreement concerning the subject
  matter hereof. If any provision of this License is held to be
  unenforceable, such provision shall be reformed only to the extent
  necessary to make it enforceable. Any law or regulation which provides
  that the language of a contract shall be construed against the drafter
  shall not be used to construe this License against a Contributor.

  10. Versions of the License
  ---------------------------

  10.1. New Versions

  Mozilla Foundation is the license steward. Except as provided in Section
  10.3, no one other than the license steward has the right to modify or
  publish new versions of this License. Each version will be given a
  distinguishing version number.

  10.2. Effect of New Versions

  You may distribute the Covered Software under the terms of the version
  of the License under which You originally received the Covered Software,
  or under the terms of any subsequent version published by the license
  steward.

  10.3. Modified Versions

  If you create software not governed by this License, and you want to
  create a new license for such software, you may create and use a
  modified version of this License if you rename the license and remove
  any references to the name of the license steward (except to note that
  such modified license differs from this License).

  10.4. Distributing Source Code Form that is Incompatible With Secondary
  Licenses

  If You choose to distribute Source Code Form that is Incompatible With
  Secondary Licenses under the terms of this version of the License, the
  notice described in Exhibit B of this License must be attached.

  Exhibit A - Source Code Form License Notice
  -------------------------------------------

    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    file, You can obtain one at http://mozilla.org/MPL/2.0/.

  If it is not possible or desirable to put the notice in a particular
  file, then You may include the notice in a location (such as a LICENSE
  file in a relevant directory) where a recipient would be likely to look
  for such a notice.

  You may add additional accurate notices of copyright ownership.

  Exhibit B - "Incompatible With Secondary Licenses" Notice
  ---------------------------------------------------------

    This Source Code Form is "Incompatible With Secondary Licenses", as
    defined by the Mozilla Public License, v. 2.0.
