---
title: Apache CloudStack Trademark Guidelines
---

<div class="row">

<div class="col-lg-12">

<div class="page-header">

<h1 id="indicators">Apache CloudStack Trademark Guidelines</h1>

</div>

</div>

</div>

Apache CloudStack, CloudStack, the CloudStack word design, the Apache 
CloudStack word design, the cloud monkey logo, either separately or in 
combination are hereinafter referred to as "CloudStack Trademarks" and 
are trademarks or registered trademarks of the Apache Software 
Foundation. Excepting the provisions outlined below you may not use the 
CloudStack trademarks or any confusingly similar mark as a trademark for 
your product, to imply endorsement by the project, or use the CloudStack 
trademarks in any other manner that might cause confusion in the 
marketplace.

Trademark law dictates that owners must police their marks or risk the 
loss of the marks.

The Apache Software Foundation has an established trademark policy 
([http://www.apache.org/foundation/marks](http://www.apache.org/foundation/marks)) 
that when in conflict should be considered the canonical standard (with one 
exception noted below). 

However, the Apache Software Foundation has given the responsibility for 
brand management to the project's Project Management Committee. Thus 
this document should be taken as additive to the Apache Software 
Foundation's trademark guideline. Nothing contained herein provides an 
exception to those guidelines (again, with one exception below).

*Exception:* The Apache CloudStack PMC is the contact point for all requests
related to the use of the CloudStack Trademarks. In places where the Apache
Software Foundation's formal trademark usage documentation and policies specify
trademarks@apache.org, requesters should use press@cloudstack.apache.org or
private@cloudstack.apache.org.  In places where the Apache Software
Foundation's policies specify that explicit approval must come from the VP
Brand Management, requesters will be given authoritative approval from a
representative of the Apache CloudStack PMC instead.  The Apache Software
Foundation has delegated approval authority to the Apache CloudStack PMC,
specifically related to the CloudStack Trademarks.

## Mark usage

### Wordmark

The word 'CloudStack' is a registered trademark, 
and should use the '&#174;' symbol. In places where that symbol is not 
reasonably used it is acceptable to use '(R)' as an alternative.

### Other CloudStack marks

The CloudStack word design, the Apache CloudStack word design, the
'Apache CloudStack' wordmark  and the 
cloud monkey logo are all trademarks and should not appear without the 
'&#8482;' symbol being present.

### Apache CloudStack Logo (TM)

The Apache CloudStack logo with the "TM" symbol present may be 
downloaded here:

* [Apache CloudStack logo with "open source cloud computing" tagline (.ai file)](http://svn.apache.org/repos/asf/cloudstack/media/ai/apache_cloudstack.ai)
* [Apache CloudStack logo without the tagline (.ai file)](http://svn.apache.org/repos/asf/cloudstack/media/ai/apache_cloudstack_sans_tagline.ai)
* [Apache CloudStack logo with "open source cloud computing" tagline and the Cloud Monkey (.ai file)](http://svn.apache.org/repos/asf/cloudstack/media/ai/apache_cloudstack_with_cloud_monkey.ai)
* [Apache CloudStack logo with "open source cloud computing" tagline (JPEG file)](http://svn.apache.org/repos/asf/cloudstack/media/jpeg/apache_cloudstack.jpg)
* [Apache CloudStack logo without the tagline (JPEG file)](http://svn.apache.org/repos/asf/cloudstack/media/jpeg/apache_cloudstack_sans_tagline.jpg)
* [Apache CloudStack logo with "open source cloud computing" tagline and the Cloud Monkey (JPEG file)](http://svn.apache.org/repos/asf/cloudstack/media/jpeg/apache_cloudstack_with_cloud_monkey.jpg)

## Events

### Exhibiting at Events:

Apache CloudStack committers may, without prior approval, use the 
CloudStack Trademarks to promote exhibits or sessions at events with the 
aim to promote Apache CloudStack, though the general adherence to the 
ASF's trademark guidelines is still required.

### Sponsoring Events:

Sponsoring events can provide good visibility for the project, however 
it frequently requires funds that the project does not have access to. 
Many outside organizations wish to provide this type of visibility.

The following is required:

* Sponsorship discussed and approved on the [press@cloudstack.apache.org](mailto:press@cloudstack.apache.org) mailing list.
* Requests for approval will be acknowledged by a member of the PMC and approved automatically if no issues are raised 72 hours after acknowledgement.
* Sponsorship must be provided with no additional affiliation - and only project provided marks used.
* At least one committer must be planning to represent the project.

### CloudStack Specific Conferences:

The following is required:

* Project approval from the PMC is needed via the [press@cloudstack.apache.org](mailto:press@cloudstack.apache.org) mailing list.
* Requests for approval will be acknowledged by a member of the PMC and approved automatically if no issues are raised 72 hours after acknowledgement.
* Membership on committees deciding content should be open to any Committer.
* At least one committer must be planning to attend the event.

### Meetup groups, hackfests, barcamps, Birds of a Feather, and other small events:

Local area user events are encouraged.

* Events which include the CloudStack name, should be styled: "Apache CloudStack"
* Annotation on the group's web presence should indicate that there is no affiliation between the group and the project.
* A link to the project's website should be present.

## Non-software goods

Creating non-software goods (e.g.: stickers, event give-aways, etc...) to help
promote the Apache CloudStack project is encouraged.  However, there are some
requirements that must be met prior to producing the goods.  Additionally,
goods bearing any of the CloudStack marks may not be sold without explicit
written permission.

The following is required:

* The design (mock-up) must be shared with the CloudStack PMC via [press@cloudstack.apache.org](mailto:press@cloudstack.apache.org).
* Requests for approval will be acknowledged by a member of the PMC and approved automatically if no issues are raised 72 hours after acknowledgement.
* Permission may be granted for requests that are intended to promote the Apache CloudStack project.
* Permission will likely *not* be granted for requests that are indented to, or percieved to by the PMC, reflect negatively on Apache CloudStack.
* Approval may be contingent on specific requested changed in how the mark(s) are applied.

## Websites

No additional guidelines are required above and beyond the 
[Third Party Domain Name Branding Policy](http://www.apache.org/foundation/marks/domains.html). 
In general:

> you may not use Apache marks such as "ApacheFoo" or "Foo" in your own 
> domain names if that use would be likely to confuse a relevant consumer 
> about the source of software or services provided through your domain 
> with products or services provided by the Apache Foo project or the 
> Apache Software Foundation as a whole. You should apply the 
> "likelihood of confusion" test described in our 
> [formal Trademark Policy](http://www.apache.org/foundation/marks/), and 
> please realize that the use of Apache marks in third party domain 
> names is generally not "nominative fair use."
