---
layout: default
---
= Trademark Policy
:owner: Garrett D'Amore
:project: NANOMSG
:mark: NANOMSG

== Introduction

This document, the "`Policy`", outlines the {project} project's
(the "`Project`") policy for the use of our trademarks. While our software
is available under a free and open source software license, the copyright
licenses do not include an implied right or license to use our trademarks.

The role of trademarks is to provide assurance about the quality of the
products or services with which the trademark is associated. But because
an open source license allows your unrestricted modification of the copyrighted
software, we cannot be sure that your modifications to the software are ones
that will not be misleading if distributed under the same name. Instead,
this Policy describes the circumstances under which you may use our trademarks.

In this Policy we are not trying to limit the lawful use of our trademarks,
but rather describe for you what we consider the parameters of lawful use to
be. Trademark law can be ambiguous, so we hope to provide enough clarity for
you to understand whether we will consider your use licensed or non-infringing.

The sections that follow describe what trademarks are covered by this Policy,
as well as uses of the trademarks that are allowed without additional
permission from us. If you want to use our trademarks in ways that are not
described in this Policy, please see "Where to get further information" below
for contact information. Any use that does not comply with this Policy or for
which we have not separately provided written permission is not a use that we
have approved, so you must decide for yourself whether the use is nevertheless
lawful.

== Our commitment to open source principles

We want to encourage and facilitate the use of our trademarks by the community,
but do so in a way that still ensures that the trademarks are meaningful as a
source and quality indicator for our software and the associated goods and
services and continue to embody the high reputation of the software and the
community associated with it. This Policy therefore tries to strike the proper
balance between: 1) our need to ensure that our trademarks remain reliable
indicators of the qualities that they are meant to preserve and 2) our
community members' desire to be full participants in the Project.

== Trademarks subject to the guidelines

=== Our trademarks

==== Word Marks

This Policy covers the following word trademarks and
service marks (the "`Word Marks`"):

[%header]
|===
|Mark|Description
|NANOMSG(TM)|Lightweight messaging library
|LIBNANOMSG(TM)|Lightweight messaging library
|NNG(TM)|Next generation of nanomsg
|LIBNNG(TM)|Next generation of nanomsg library
|MANGOS(TM)|Golang implementation of Scalability Protocols
|GOMANGOS(TM)|Golang implementation of Scalability Protocols
|SCALABILITY PROTOCOLS(TM)|Protocols for building scalable applications
|===

In general, except for the SCALABITY PROTOCOLS mark, we prefer to use
these Word Marks combined with the nouns
"`library`", "`API`", "`distribution`", "`project`", "`implementation`".
For the SCALABILITY PROTOCOLS Mark, the preferred nouns are "`specifications`",
"`documents`", "`RFC`", and "`implementation`".

==== Logos

This Policy also covers our logos (the "`Logos`"):

[caption="Figure 1. "]
.The nanomsg double-ended arrow logo.
|===
a|image::http://nanomsg.org/arrows.png[nanomsg,100,100]
|===

+++
<link href="https://fonts.googleapis.com/css?family=Comfortaa" rel="stylesheet">
+++
[caption="Figure 2. "]
.Stylized project name.
|===
|+++
<b><p align=left style="font-family: 'Comfortaa', cursive; font-size: 36px; text-shadow: 4px 4px 4px #aaa">nano<font color="#ba5836">msg</font><sup style="font-family: 'Arial', sans; font-size: 14px; color: #aaa; text-shadow: none">&trade;</sup></p></b>
+++
|===

==== Trade Dress

Finally this Policy covers the unique visual styling of our website and
packaging (the "`Trade Dress`").

==== Covered Marks

This Policy encompasses all trademarks and service marks, whether Word Marks,
Logos or Trade Dress, which are collectively referred to as the "`Marks`".

Some Marks may not be registered, but registration does not equal ownership
of trademarks. This Policy covers our Marks whether they are registered or not.

==== Marks not Covered

The following trademarks are ones that are reserved exclusively to our use
and are not covered by the Policy:

[%header]
|===
|Mark|Description
|NN|colloquial abbreviation of nanomsg (and API prefix)
|===

(The use of "`NN`" by itself to refer to nanomsg is deprecated, and possibly
confusing with an application foreading Usenet postings, so we would
prefer if nobody used it to refer to any of our work.)

Contact us as described in <<Where to get further information>> below if you
have questions or want to ask permission to use any of these excluded
trademarks.

== Universal considerations for all uses

Whenever you use one of the Marks, you must always do so in a way that does
not mislead anyone, either directly or by omission, about exactly what they
are getting and from whom. The law reflects this requirement in two major ways
described in more detail below: it prohibits creating a "likelihood of
confusion" but allows for "nominative use." For example, you cannot say you
are distributing the {mark} software when you're distributing a modified
version of it, because people would be confused when they are not getting
the same features and functionality they would get if they downloaded the
software directly from us. You also cannot use our logo on your website in a
way that suggests that your website is an official website or that we endorse
your website. You can, though, say you like the {mark} software, that you
participate in the {mark} community, that you are providing an unmodified
version of the {mark} software, or that you wrote a book describing how to
use the {mark} software.

This fundamental requirement, that it is always clear to people what they are
getting and from whom, is reflected throughout this Policy. It should also
serve as your guide if you are not sure about how you are using the Marks.

In addition:

* You may not use the Marks in association with the use or distribution of
software if you are also not in compliance with the copyright license for
the software.

* You may not use or register, in whole or in part, the Marks as part of your
own trademark, service mark, domain name, company name, trade name,
product name or service name.

* Trademark law does not allow your use of names or trademarks that are too
similar to ours. You therefore may not use an obvious variation of any of
our Marks or any phonetic equivalent, foreign language equivalent, takeoff,
or abbreviation for a similar or compatible product or service. We would
consider the following too similar to one of our Marks:

** Any mark combining NANO and MSG.
** Any mark combining NANO and MESSAGE.

* You agree that you will not acquire any rights in the Marks and that any
goodwill generated by your use of the Marks inures solely to our benefit.

== Use for software
See <<Universal considerations for all uses>>, above, which also apply.

=== Uses we consider non-infringing
==== Distribution of unmodified code (source or executable)

When you redistribute an unmodified copy of our software, you are not changing
the quality or nature of it. Therefore, you may retain the Word Marks and the
Logos we have placed on the software to identify your redistribution -- whether
that redistribution is made by optical media, memory stick or download of
unmodified source and executable code. This kind of use only applied if you
are redistributing an official distribution from this Project that has not
been changed in any way.
// TBD: We need branding standards!
// You can find files for the Logos and approved designs
// for packaging on our <<Brand Standards>> page.

==== Distribution of executable code that you have compiled, or modified code

You may use the Word Marks, but not the Logos, to truthfully describe the
origin of the software that you are providing, that is, that the code you are
distributing is a modification of our software. You may say, for example,
that "this software is derived from the source code for {mark} software."

Of course, you can place your own trademarks or logos on versions of the
software to which you have made substantive modifications, because by
modifying the software you have become the origin of that exact version.
In that case, you should not use our Logos. Our source code version therefore
does not contain our Logo data files.

==== Statements about compatibility, interoperability or derivation

You may use the Word Marks, but not the Logos, to truthfully describe the
relationship between your software and ours. Our Mark should be used after
a verb or preposition that describes the relationship between your software
and ours. So you may say, for example, "Bob's software for the {mark} platform"
but may not say "Bob's {mark} software." Some other examples that may work for
you are:

* [Your software] works with {mark} software
* [Your software] uses {mark} software
* [Your software] is compatible with {mark} software
* [Your software] is powered by {mark} software
* [Your software] runs on {mark} software
* [Your software] for use with {mark} software
* [Your software] for {mark} software

==== Use of trademarks to show community affiliation

This section discusses the use of our Marks for software such an application
themes, skins and personas. The use of our Marks on websites is discussed below.

You may use the Word Marks and the Logos in themes, personas, or skins for
applications to show your support for the Project, provided that the use is
non-commercial and the use is clearly decorative, as contrasted with a use
that appears to be the branding for a website or application.

=== Uses for which we are granting a license

==== Distribution of modified software

* You may use the Word Marks and the Logos for the distribution of code
(source or executable) on the condition that any executable is built from
the official Project source code and that any modifications are limited to
switching on or off features already included in the software,
translations into other languages, and incorporating bug-fix patches.

* You may use the Word Marks and the Logos for the distribution of executable
code on the condition that it is made from official Project source code using
the procedure documented for doing so within the source code itself.

==== Distribution as part of a larger work

* You may use the Word Marks and the Logos in association with software
  projects on the condition that the software included in the larger work is
  the official source of the Project, or executable code compiled from the
  official source of the Project, and that you do not suggest
  that the Project is the source of the larger work itself but rather than
  the Marks are for the software incorporated into the the larger work.

==== Distribution of software preloaded on hardware

* You may use the Word Marks and the Logos in association with hardware
  devices on the condition that the executable installed on the device is
  the official source executable for the Project, and that you do not suggest
  that the Project is the source of the hardware device itself but rather than
  the Marks are for the software incorporated into the device.

==== Distribution of wrapper libraries and bindings

* Projects which merely adapt our software for use in other environments
  and runtimes (such as providing language bindings for another programming
  language) may use our Word Marks on the condition that the use does not
  suggest that the wrapper library or binding is the work of, or officially
  supported or sanctioned by the Project.

=== Uses we consider infringing without seeking further permission from us

* We will likely consider using the Marks in a software distribution that
  combines our software with any other software program an infringement of
  our Marks, unless the use clearly indicates the marks are for the included
  software from the Project, and not for the result of the combination.

== Use for non-software goods and services

See <<Universal considerations for all uses>>, above, which also apply.

=== Uses we consider non-infringing

==== Websites

You may use the Word Marks and Logos, but not the Trade Dress, on your
webpage to show your support for the Project as long as:

  . The website has branding that is easily distinguished from the Project
    Trade Dress;
  . You own branding or naming is more prominent than any Project Marks;
  . The Logos hyperlink to the Project website;
  . The site does not mislead customers into thinking that either your
    website, service, or product is our website, service, or product; and
  . The site clearly states that you are not affiliated with or endorsed
    by the Project.

==== Publications and presentations

You can use the Word Marks in book and article titles, and the Logo in
illustrations within the document, as long as the use does not suggest that
we have published, endorse, or agree with your work.

==== Events

You may use the Word Marks and Logos to promote the software and Project at
events.

=== Uses for which we are granting a license

==== User groups

You can use the Word Marks as part of your user group name provided that:

  . The main focus of the group is the software;
  . Any software or services the group provides are without cost;
  . The group does not make a profit;
  . Any charge to attend meetings are to cover the cost of the venue,
    food and drink only.

Note that the <<Universal considerations for all uses>>, above, still apply,
specifically, that you may not use or register the Marks as part of your own
trademark, service mark, domain name, company name, trade name, product name or
service name.

==== Promotional goods

"Promotional goods" are non-software goods that use the Marks and that are
intended to advertise the Project, promote the Project, or show membership
in the Project community.

You may make promotional goods for free giveaway at open source conferences and
events using the Word Marks and Logos.

=== Uses we consider infringing without seeking further permission from us

We will likely consider using the Marks as part of a domain name or
subdomain an infringement of our Marks.

We would likely consider using the Marks on promotional goods for sale an
infringement of our Marks.

== General Information

=== Trademark marking and legends

The first or most prominent mention of a Mark on a webpage, document,
packaging, or documentation should be accompanied by a symbol indicating
whether the mark is a registered trademark ("(R)") or an unregistered
trademark ("(TM)"). See <<Our trademarks>> for the correct symbol to use.

Also, if you are using our Marks in a way described in the sections
"Uses for which we are granting a license," please put following notice
at the foot of the page where you have used the Mark (or, if in a book,
on the credits page), on any packaging or labeling, and on advertising or
marketing materials: "{mark} is trademark of {owner}, used with permission."

=== What to do when you see abuse

If you are aware of any confusing use or misuse of the Marks in any way,
we would appreciate you bringing this to our attention. Please contact us
as described below so that we can investigate it further.

=== Where to get further information

If you have any questions about this Policy, would like to speak with us
about the use of our Marks in ways not described in the Policy, or see any
abuse of our Marks, please send an email to mailto:garrett@damore.org[{owner}].

== General considerations about trademarks and their use

=== What trademark law is about

==== What is a trademark?

A trademark is a word, phrase, symbol or design, or a combination of words,
phrases, symbols or designs, that identifies and distinguishes the source of
the goods of one party from those of others. A service mark is the same as a
trademark, except that it identifies and distinguishes the source of a service
rather than a product. "Trade dress" or "get up" refers to the look and feel of
the packaging, which in this context can include the layout, colors, images,
and design choices in a web page. Throughout this Policy, the terms "trademark"
and "mark" refer to both trademarks, service marks and trade dress.

However, the use of a word is "not as a trademark" when it is used functionally
as part of the software program, for example, in a file, folder, directory,
or path name. Use in this way is not a trademark infringement.

==== What is "likelihood of confusion"?

There is trademark infringement if your use of a trademark has created a
"likelihood of confusion." This means using a trademark in a way that will
likely confuse or deceive the relevant consuming public about the source of
a product or service using the mark in question. For example, if the "Foo"
software extension removes all double spaces after periods, but someone else
later creates "Foo" software that adds a third space after periods, consumers
would be confused between the two and the newcomer will likely be a trademark
infringer. As another example, if a company makes "Foobar" software and a third
party offers training called "Foobar Certification," a person is likely to
believe, wrongly, that the certification is being offered by the makers of
Foobar software. The third party has likely misled consumers about the source
of its training and is a trademark infringer.

==== What is "nominative" use?

So-called "nominative use" (or "nominative fair use"), which is the name of the
doctrine under U.S. trademark law, allows the use of another's trademark where
it is necessary for understanding. Other countries' trademark laws also have
similar provisions. For example, a car repair shop that specializes in a
particular brand of automobile, VW for example, must be allowed to say that
they repair VW cars. Here is what you should consider when deciding whether
your use of a trademark is a nominative fair use:

. Whether you can identify the product or service in question without using
  the trademark;
. Whether you are avoiding a likelihood of confusion in the way that you
  have used the trademark; and
. Whether you have used only as much as is necessary to identify the product
  or service.

With our "Foobar Certification" example above, the person offering the
certification would be allowed to say, under the nominative fair use doctrine,
that she is offering "Maude's Certification for Foobar software."

It is almost never the case that using a Logo will be a nominative fair use
since it will be a rare case where the logo is needed for strictly
informational purposes.

=== Proper trademark use

These rules hold true for all trademarks, not just ours, so you should follow
them for our Marks as well as anyone else's.

==== Always distinguish trademarks from surrounding text with capitals.

Either initial capital letters may be used, or all capital letters may be used.

. Unacceptable:: nanomsg
. Acceptable: Nanomsg, NANOMSG

==== Always use trademarks in their exact form with the correct spelling.

Do not appreviate, hyphenate, or combine with any other word or words.

. Unacceptable: nano-msg, nanoMsg
. Acceptable: {mark}

==== Don't pluralize a trademark.

. Unacceptable: I have seventeen {mark}s running in my lab.
. Acceptable: I have seventeen {mark} systems running in my lab.

==== Don't use "a" or "the" to refer to an instance of the trademark.

. Unacceptable: I put a {mark} on my mom's computer.
. Acceptable: I put a {mark} system on my mom's computer.

==== Always use a trademark as an adjective modifying a noun.

You can see the nouns we prefer under <<Our trademarks>>.

. Unacceptable: This is a {mark}. Anyone can install it.
. Acceptable: This is a {mark} application. Anyone can install it.

==== Don't use a trademark as a verb.

Trademarks are products or services, never actions.

. Unacceptable: I {mark}ed my computer today!
. Acceptable: I installed {mark} software on my computer today!

==== Don't use a trademark as a possessive.

Instead, the following noun should be used in possessive form or the
sentence reworded so there is no possessive.

. Unacceptable: {mark}'s library interface is very clean.
. Acceptable: The {mark} library's interface is very clean.

==== Don't translate a trademark into another language.

. Acceptable: Quiero instalar {mark} en mi sistema.
. Unacceptable: Quiero instalar NANOMENSAJE en mi sistema.


==== Do not change any Logo except to scale it.

This means you may not add
decorative elements, change the colors, change the proportions, distort it,
add elements, or combine it with other logos.

However, when the context requires the use of black-and-white graphics and the
logo is color, you may reproduce the logo in a manner that produces a
black-and-white image.

== Attribution

These guidelines are based on the Model Trademark Guidelines, available at
http://www.modeltrademarkguidelines.org., used under a Creative Commons
Attribution 3.0 Unported license:
https://creativecommons.org/licenses/by/3.0/deed.en_US

