Apache Kvrocks
Copyright 2022-2025 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

================================================================

Thanks to designers Lingyu Tian and Shili Fan for contributing the logo of Kvrocks.

================================================================

This product includes a number of Dependencies with separate copyright notices
and license terms. Your use of these submodules is subject to the terms and
conditions of the following licenses.

================================================================

================================================================
Apache-2.0 licenses
================================================================
The following components are provided under the Apache-2.0 License.See project link for details.
The text of each license is the standard Apache 2.0 license.

* rocksdb(https://github.com/facebook/rocksdb)

NB: RocksDB is dual-licensed under both the GPLv2 and Apache 2.0 License.
This product uses it under the Apache 2.0 License.

* oneTBB(https://github.com/oneapi-src/oneTBB)

Files src/common/rocksdb_crc32c.h and src/storage/batch_debugger.h are modified from RocksDB.
Files src/types/bloom_filter.* are modified from Apache Arrow.
The text of the license is the standard Apache 2.0 license.

================================================================
BSD-2-Clause licenses
================================================================
The following components are provided under the BSD-2-Clause License. See project link for details.
The text of each license is also included in licenses/LICENSE-[project].txt.

* lz4(https://github.com/lz4/lz4)
* xxHash(https://github.com/Cyan4973/xxHash)

NB: This product only uses the source code in `lib` directory which is under the BSD 2-Clause.

================================================================
BSD-3-Clause licenses
================================================================
The following components are provided under the BSD-3-Clause License. See project link for details.
The text of each license is also included in licenses/LICENSE-[project].txt.

* googletest(https://github.com/google/googletest)
* libevent(https://github.com/libevent/libevent)
* snappy(https://github.com/google/snappy)

Files src/types/geohash.*, src/vendor/rand.*, src/storage/scripting.*
and some utility functions in src/common are modified from Redis.
The text of the license is included in licenses/LICENSE-redis.txt.

================================================================
MIT licenses
================================================================
The following components are provided under the MIT License. See project link for details.
The text of each license is also included in licenses/LICENSE-[project].txt

* fmt(https://github.com/fmtlib/fmt)
* LuaJIT(https://github.com/KvrocksLabs/LuaJIT)
* lua(https://github.com/KvrocksLabs/lua, alternative to LuaJIT)
* hat-trie(https://github.com/Tessil/hat-trie)
* pegtl(https://github.com/taocpp/PEGTL, NOTE: changed to Boost Software License Version 1.0 in main branch)
* cpptrace(https://github.com/jeremy-rifkin/cpptrace)
* spdlog(https://github.com/gabime/spdlog)

================================================================
Boost Software License Version 1.0
================================================================
The following components are provided under the Boost Software License Version 1.0. See project link for details.
The text of each license is also included in licenses/LICENSE-[project].txt

* jsoncons(https://github.com/danielaparker/jsoncons)
* span-lite(https://github.com/martinmoene/span-lite)
* range-v3(https://github.com/ericniebler/range-v3)

================================================================
zlib/libpng licenses
================================================================
The following components are provided under the zlib/libpng License. See project link for details.
The text of each license is also included in licenses/LICENSE-[project].txt

* zlib-ng(https://github.com/zlib-ng/zlib-ng)

================================================================
Public Domain
================================================================
Files src/vendor/sha1.* are provided in Public Domain by Steve Reid <steve@edmweb.com>.
