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

title: FAQ
in_menu: false
sort_info: 41
# FYI:
# The fragments processor allows the TOC to generated by the menu tag.
--- name:overview

# Burning Questions?

This page contains all the frequently asked questions about the
${project_name} project.

--- name:content

{:toc}

## General Questions

General questions on the *${project_name}* project.

### Why the name ${project_name}?


### What is the license?

The license is [Apache 2
License](http://www.apache.org/licenses/LICENSE-2.0)

### How do I get support?

See the [support guide](support.html) for more details.

### How do I build ${project_name}?

First [get the source](source.html) then see the [building
guide](building.html)

### How do I contribute or become a committer?

We love [contributions](contributing.html)! More details on how to
contribute and how to become a committer are in the [contributing
guide](contributing.html).

### How do I register for the issue tracker?

For more detail see the [support page](support.html). If you haven't done
so already you can [register with the issue tracker
here](https://www.assembla.com/user/signup)

### How does the website work?

For details on how to edit the website and how it works see
[How the Site works](site.html)

## Using ${project_name}

### How do I get started?

