<!--

    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.

-->
# 成为开发者
## 开发人员
### Project PMC
|       id       |    githubUsername     |    public name    | starting date |
| :------------: | :-------------------: | :---------------: | :-----------: |
|     chaow      |        mychaow        |     Chao Wang     |   2023/11/15   |                                 
|  wangchao316   |      wangchao316      |     Chao Wang     |   2023/11/15   |                                 
|     cdutz      |       chrisdutz       |  Christofer Dutz  |   2023/11/15   |                                 
|     liudw      |       liutaohua       |     Dawei Liu     |   2023/11/15   |                                 
|   caogaofei    |        Beyyes         |    Gaofei Cao     |   2023/11/15   |                                 
|     haonan     |         HTHou         |    Haonan Hou     |   2023/11/15   |                                 
|    neuyilan    |       neuyilan        |    Houliang Qi    |   2023/11/15   |                                 
|   qiaojialin   |      qiaojialin       |    Jialin Qiao    |   2023/11/15   |
|  jimwang (*)   |                       |   Jianmin Wang    |   2023/11/15   |
| xingtanzjr     |      xingtanzjr       |   Jinrui Zhang    |   2023/11/15   |                                 
|     liukun     |      liukun4515       |      Kun Liu      |   2023/11/15   |                                 
|   shuozhang    |                       |    Shuo Zhang     |   2023/11/15   |                                 
| zhaoxinyi (*)  |     StefanieZhao7     |   Stefanie Zhao   |   2023/11/15   |                                 
|      rong      |     SteveYurongSu     |  Steve Yurong Su  |   2023/11/15   |   
|   jiangtian    |       jt2594838       |    Tian Jiang     |   2023/11/15   |                                 
|      hxd       |      jixuan1989       |  Xiangdong Huang  |   2023/11/15   |                         
|   jackietien   |     JackieTien97      |     Yuan Tian     |   2023/11/15   |                                 
|    tanxinyu    |   OneSizeFitsQuorum   |     Xinyu Tan     |   2023/11/15   |                                 


### Project Committers   
|    **id**    | **githubUsername** | **public name** |
| :----------: | :----------------: | :-------------: |
|     chaow      |        mychaow        |     Chao Wang     |                                
|  wangchao316   |      wangchao316      |     Chao Wang     |                             
|     cdutz      |       chrisdutz       |  Christofer Dutz  |                               
|     liudw      |       liutaohua       |     Dawei Liu     |                               
|   caogaofei    |        Beyyes         |    Gaofei Cao     |                               
|     haonan     |         HTHou         |    Haonan Hou     |                               
|    neuyilan    |       neuyilan        |    Houliang Qi    |                                
|   qiaojialin   |      qiaojialin       |    Jialin Qiao    |
|  jimwang       |                       |   Jianmin Wang    |
|  xingtanzjr    |      xingtanzjr       |   Jinrui Zhang    |                                 
|     liukun     |      liukun4515       |      Kun Liu      |                                  
|   shuozhang    |                       |    Shuo Zhang     |                                  
| zhaoxinyi      |     StefanieZhao7     |   Stefanie Zhao   |                                
|      rong      |     SteveYurongSu     |  Steve Yurong Su  |  
|   jiangtian    |       jt2594838       |    Tian Jiang     |                                 
|      hxd       |      jixuan1989       |  Xiangdong Huang  |                        
|   jackietien   |     JackieTien97      |     Yuan Tian     |                                
|    tanxinyu    |   OneSizeFitsQuorum   |     Xinyu Tan     |


## 如何成为项目成员

我们的社区存在以下四种身份

- PMC
- Committe
- Contributor
- User

详细说明：

- 若想了解四种身份的详细内容，请查看[社区组织架构](../Community/About.md)
- 若想成为 PMC ，请查看：[社区评选规章](../Community/About.md#pmc)
- 若想成为 Committe ，请查看：[社区评选规章](../Community/About.md#committe)
- 若想成为 Contributor ，请查看：[社区评选规章](../Community/About.md#contributor)