<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

# Powered-By

### 使用“TsFile”的项目和产品名称

- 其他组织或企业在使用 Apache TsFile 建立项目或者产品时，应该应该注意尊重“Apache TsFile”的商标。
- 具体事项请参阅 [ASF Trademarks Guidance](https://www.apache.org/foundation/marks/)和 [FAQ](https://www.apache.org/foundation/marks/faq/)。

- 一般来说，我们建议不要仅使用"TsFile"在任何名字中，以避免出现商标风险。
  - 例如，不应该给自己的产品命名为"TsFile 大数据产品"，因为这个名字中包含 TsFile。然而，如果说是命名为"Apache TsFile 赋能的大数据产品"，或者"基于 Apache TsFile 的大数据产品"，这种名字就是被允许的。简单来说，当你想在名字中出现 TsFile 时，应为"Apache TsFile"，而不是仅"TsFile"。
  - 在你（Maven 或者其他模块名中）创建软件标识时，可以命名为例如"tsfile-tool"。在产品描述中明确指出 Apache TsFile 也是可以的，例如"该大数据产品是 Apache TsFile 的一个子产品"。

### 相关贡献或应用的公司和组织
- 要将自己添加到列表中，请给 dev@tsfile.apache.org 发送电子邮件，其中包含您的组织名称，URL，正在使用的 IoTDB 组件列表以及用例的简短描述。
