Apache Uniffle (incubating) is an effort undergoing incubation at The Apache
Software Foundation (ASF), sponsored by the Apache Incubator PMC.

Incubation is required of all newly accepted projects until a further review
indicates that the infrastructure, communications, and decision-making process
have stabilized in a manner consistent with other successful ASF projects.

While incubation status is not necessarily a reflection of the completeness
or stability of the code, it does indicate that the project has yet to be
fully endorsed by the ASF.

Some of the incubating project’s releases may not be fully compliant with ASF policy.
For example, releases may have incomplete or un-reviewed licensing conditions.
What follows is a list of issues the project is currently aware of (this list is likely to be incomplete):

1. Releases may have incomplete licensing conditions

If you are planning to incorporate this work into your product/project,please be aware that
you will need to conduct a thorough licensing review to determine the overall implications of
including this work.For the current status of this project through the Apache Incubator,
visit: https://incubator.apache.org/projects/uniffle.html
