EFF Open Audio License:

Version 1.0.1

Changes from ver. 1.0[.0]: Typo corrections; no substantive changes. 
	1.  I. Preamble 
	2.  II. Terms of Use 
	3.  III. How to Use this License 

I. PREAMBLE

PRINCIPLES

Digital technology and the Internet can eMPOWER ARTISTS TO REACH A
WORldwide audience and to build upon each other's ideas and imagination
with extremely low production and distribution costs. Many software
developers, through both the open source software initiative and the
free software movement, have long taken advantage of these facts to
create a vibrant community of shared software that benefits creators and
the public.

EFF's Open Audio License provides a legal tool that borrows from both
movements providing freedom and openness to use music and other
expressive works in new ways. It allows artists to grant the public
permission to copy, distribute, adapt, and publicly perform their works
royalty-free as long as credit is given to the creator as the Original
Author.

As in the software communities, this license is intended to help foster
a community of creators and performers who are free to share and build
on each others' work. This also frees their audience to share works that
they enjoy with others, all for the purpose of creating a rich and
vibrant public commons.

More specifically, this license is designed to serve as a tool of
freedom for artists who wish to reach one another and new fans with
their original works. It allows musicians to collaborate in creating a
pool of "open audio" that can be freely modified, exchanged, and
utilized in new ways. Artists can use this license to promote themselves
and take advantage of the new possibilities for empowerment and
independence that technology provides. It also allows the public to
experience new music, and connect directly with artists, as well as
enable "super distribution" where the public is encouraged to copy and
distribute a work, adding value to the artist's reputation while
experiencing a world of new music never before available.

Why is the EFF advocating a license?

Because, despite the fact that we are uneasy with the licensing, as
opposed to sale, of both music and software, we see this particular
license as a tool of freedom. Our goal is to use the tools of copyright
to free artists and audiences from the portion of current copyright law
that seems, to us, to be getting in the way of copyright's original
purpose -- the creation of a vibrant public commons of music that we all
can enjoy and that artists can build upon. As part of it, we hope to
demonstrate some of what we believe should be the best practices in
licenses, including respect for the rights and limitations of copyright
law including fair use, first sale rights, as well as consumer
protection laws and of course freedom of speech. The aim of this license
is to use copyright tools to achieve copyright's stated objectives of
spreading knowledge and culture while preserving incentives for the
author.

For legal purposes, this document is the official license under which
Open Audio is made available for public use. The original version of
this document may be found at:
http://www.eff.org/IP/Open_licenses/eff_oal.html

Specific terms and conditions for accessing, copying, distribution,
adaptation, public performance, and attribution follow.

II. TERMS AND CONDITIONS FOR USE:

Access, Copying, Distribution, Public Performance, Adaptation, and Attribution

This license applies to any work offered by the Original Author(s) with
a notice indicating that it is released under the terms of the EFF Open
Audio License, "(O)". If used in conjunction with a sound recording
(whether in digital or analog form), this license encompasses the
copyright in both the sound recording (the "master" rights) and the
underlying musical composition (the "songwriter" rights).

The Original Author retains the copyrights to works released under this
license, but grants the worldwide public permission to use the work in
the ways authorized herein. Activities other than those specifically
addressed below are outside the scope of this license.

	1.  Access, Reproduction, Distribution, Modification, and
	Performance Rights. Subject to the terms and conditions of this
	license, the Original Author irrevocably and perpetually grants to
	the public authorization to freely access, copy, distribute, modify,
	create derivative works from, and publicly perform the work released
	under this license in any medium or format, provided that Original
	Author attribution be included with any copies distributed or public
	performances of the work, as well as any derivative works based on
	the work, as further described below.

	2.  Original Author Attribution Requirement. Original Author
	attribution is generally defined as a method in the regular course
	of dealing that reasonably conveys to the recipient of a copy or
	performance the following information: (1) The notice "(O)" that
	indicates the work is released under the EFF Open Audio license; (2)
	the identity of the Original Author; (3) the title of the work (at
	Original Author's option); and (4) how the first listed Original
	Author may be contacted (at Original Author's option).
Ê
	Where a common, widely-adopted method for attribution is available
	(such as ID3 tagging for MP3 files), Original Author attribution
	should be implemented using the common, widely-adopted method. In
	other circumstances, Original Author attribution may be implemented
	in any reasonable fashion, such as by including attribution in the
	public performance, or affixing it to the physical media, or
	embedding it in the digital file. See the Suggested Guidelines for
	general attribution requirements for giving proper credit to the
	work's Original Author in differing circumstances.

	3.  Agree Not to Limit Others' Use. Any new work that in whole or in
	part contains or is derived from a work (or part thereof) made
	available under this license, must itself be licensed as a whole
	under the terms of this license.

	Notwithstanding the foregoing, mere aggregation on a volume of a
	storage or distribution medium of an independently created work with
	one that is made available under this license does not bring the
	other work under the scope of this license. It is not the intent of
	this section to contest the rights of others in works created
	entirely by them; rather, the intent is to exercise the right to
	control the distribution of derivative or collective works based
	upon a work subject to this license.

	4.   Acceptance of Terms. Because you have not signed this license,
	you cannot be required to accept it. But nothing besides this
	license grants you authorization to copy, distribute, adapt, or
	publicly perform royalty-free the copyrighted works released under
	it. These activities are prohibited by law without a license or
	other contractual right granted by the copyright owner. By
	exercising one of the rights granted herein you indicate your
	acceptance of this license and agree to be bound by all its terms
	and conditions.

	5.  License Version. This license is Version 1.0. New versions of
	this license will be published from time to time at:
	http://www.eff.org/IP/Open_licenses/eff_oal.html

	Anyone who releases a work under the license without specifying a
	version number allows the recipient to use the work subject to the
	then-current version of this license.

	6.  Civil Liberties Unrestricted. Nothing in this license is
	intended to reduce, limit, or restrict any fair use, the first sale
	doctrine, or the public side of the copyright bargain under
	copyright law, or to in any other way limit any rights bestowed
	under consumer protection or other applicable laws.

	7.  Warranty. By offering an original work for public release under
	this license, the Original Author warrants that (i) s/he has the
	power and authority to grant the rights conveyed herein, and (ii)
	use of the work within the scope of this license will not infringe
	the copyright of any third party.

III. HOW TO USE THIS LICENSE

If you are a musician, band, or other artist and you want your creative
works to be experienced by the widest audience possible and touch the
hearts and minds of the greatest number of people around the world, the
EFF Open Audio License allows your fans and supporters to market and
distribute your work through viral marketing that creates attention and
adds value to your identity. You can also help build a common pool of
creative expression that can be accessed and improved upon by all of
society.

To do so, convey or affix the following information to or about the copy
or performance of the work:


The designation "(O)", representing "open" which indicates that the
Original Author(s) have released the work subject to the terms and
conditions of this public license;

	Name of work's Original Author(s) (both the performer and the song
	writer);

	Name or title of work (at option of author);

	First Original Author's specified contact means usually an email or
	Internet address (at option of author);

	notice, year created; and license version number.


	Examples: (O) Future Tribe "Gaian Smile" www.VirtualRecordings.com
	2001 V.1.0


	or (O) Future Tribe "Imitatio Mundi" future@virtualrecordings.com
	2001 V.1.0


This license is designed to provide artists with a mechanism to promote
their creative talents and identity to millions of people through
releasing certain recordings to the public. It is also designed to serve
as a tool to allow musicians to experiment with new business models that
do not depend solely on a payment of fee-per-copy. Changing times
require artists be creative in devising new business models for assuring
payment and adequate compensation for their important contributions to
society.
