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

General
*******

Who is using Traffic Control?
=============================
	`Comcast Cable <http://www.comcast.com/>`_
		Comcast is the original developer of Traffic Control and is using it for all it's IP video delivery, delivering images and software to it's X1 platform, and for `delivering third party content <https://www.comcastwholesale.com/products-services/content-delivery-network>`_ to it's footprint.

	`Cox Communications <http://www.cox.com/>`_
		
	`Cisco <http://www.cisco.com/>`_
		Cisco has a product called `Open Media Distribution <http://www.cisco.com/c/en/us/products/video/open-media-distribution/index.html>`_ that is based on Traffic Control. 

	`Concurrent <https://www.ccur.com/>`_ 
		Concurrent has a product that uses Traffic Control, see their `github page <https://github.com/concurrentlabs/laguna>`_ for more info.

	`Augere Pakistan / QUBEE <http://www.qubee.com.pk>`_

	`Qwilt <https://www.qwilt.com/>`_
		Qwilt has a product called `Open Edge CDN <https://qwilt.com/solutions/edge-cloud-cdn/>`_ that is based on Traffic Control.

How do I get help with Traffic Control?
=======================================
	Hop on to our Slack Channel by filling out `this form <https://goo.gl/Suzakj>`_, or send a question to our mailing list `here <mailto:users@trafficcontrol.incubator.apache.org>`_.
	
What is Rascal?
===============
	Rascal was the original name for Traffic Monitor. You will sometimes still see this name in the source, or in older documents.

What is the CCR?
================
	Comcast Content Router was the original name for Traffic Router. You will sometimes still see this name in the source, or in older documents.

What is Twelve Monkeys?
=======================
	Twelve Monkeys was the the original internal name for Traffic Ops. You will sometimes still see this name in the source, or in older documents. It's also a good movie.

What license is Traffic Control released under?
===============================================
	See the `LICENSE file <https://github.com/apache/incubator-trafficcontrol/blob/master/LICENSE>`_
