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.
