Guidelines for Use of the SpamAssassin Trademark

The goal of these guidelines is to minimize the likelihood that email
users and other relevant readers will be confused as to the relationship
between the licensees of the SpamAssassin(tm) technology, and the project
itself.  The Apache Software Foundation has acquired the trademark and
will be taking the appropriate steps to protect the valuable goodwill that
has developed under the SpamAssassin mark.

What do these guidelines cover?

These guidelines explain how you can use the trademark SpamAssassin to
refer to the SpamAssassin software as required for reasonable and
customary use in describing the origin of the software and reproducing
the content of the NOTICE file.  All such use is at your own risk.
Without advance written permission from the Apache Software Foundation,
you may not use the SpamAssassin trademark, logos, or artwork for any
other purpose.  Under no circumstances may you use SpamAssassin in or as
part of a product, service, company, domain, or other name, or in any
slogan, tag line, promotional campaign title, advertising hook, or meta
tag.  If you have any concerns about whether your plans might conflict
with these guidelines, please contact the Apache Software Foundation at
<human-response@apache.org>.

What are the rules?

Proper use of the SpamAssassin trademark is simple: (1) stylize the mark
properly, (2) use it in a grammatically appropriate way, (3) use the (tm)
marking and attribute ownership in the fine print, and (4) avoid any
misleading usage.  The following paragraphs provide additional detail on
these four steps.

(1) Stylization of the SpamAssassin mark.

SpamAssassin should always be written in mixed case with the initial S and
the first A in assassin in capital letters, and the other letters in
lowercase type.  There is no space between "Spam" and "Assassin".

(2) Grammatically Appropriate Use of the SpamAssassin mark.

A trademark is used correctly when the word "brand" would comfortably fit
between the mark and the following word.  "SpamAssassin [brand] software"
and "SpamAssassin [brand] technology" are correct uses; "SpamAssassin
[brand] will intercept" is not.  A trademark is an adjective that should
be followed by an appropriate generic term.  It may be cumbersome to
always make technically correct use of the SpamAssassin trademark, but you
should do so the first time you refer to the mark and as often as possible
thereafter.

Because a trademark is an adjective, it should never be used in a
possessive form ("SpamAssassin's") or made plural ("SpamAssassins") or
used as a verb.  You also should not create new forms of the trademark
("SpamAssassinate").  Consistency in repetition helps make a mark more
memorable, and will promote the success of the SpamAssassin project.

(3) Markings and Fine Print.

The appropriate marking to use with SpamAssassin is the (tm) symbol
(&#153;).  At the bottom of the page in which SpamAssassin is referenced,
you should add the statement "SpamAssassin is a trademark of the Apache
Software Foundation".

(4) Avoiding Misleading Use.

The SpamAssassin mark must never be used to imply that the Apache Software
Foundation or the SpamAssassin project wrote, tested, endorses, or
approves any particular third party product.
