OPEN PUBLICATION LICENSE  v1.0, 8 June 1999

I. REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS

The Open Publication works may be reproduced and distributed in whole or in par
t, in any medium physical or electronic, provided that the terms of this licens
e are adhered to, and that this license or an incorporation of it by reference 
(with any options elected by the author(s) and/or publisher) is displayed in th
e reproduction.

Proper form for an incorporation by reference is as follows:

Copyright (c) <year> by <author's name or designee>.  This material may be dist
ributed only subject to the terms and conditions set forth in the Open Publicat
ion License, vX.Y or later (the latest version is presently available at http:/
/www.opencontent.org/openpub/).

The reference must be immediately followed with any options elected by the auth
or(s) and/or publisher of the document (see section VI).

Commercial redistribution of Open Publication-licensed material is permitted.

Any publication in standard (paper) book form shall require the citation of the
 original publisher and author. The publisher and author's names shall appear o
n all outer surfaces of the book. On all outer surfaces of the book the origina
l publisher's name shall be as large as the title of the work and cited as poss
essive with respect to the title.


II. COPYRIGHT

The copyright to each Open Publication is owned by its author(s) or designee.

III. SCOPE OF LICENSE

The following license terms apply to all Open Publication works, unless otherwi
se explicitly stated in the document.

Mere aggregation of Open Publication works or a portion of an Open Publication 
work with other works or programs on the same media shall not cause this licens
e to apply to those other works. The aggregate work shall contain a notice spec
ifying the inclusion of the Open Publication material and appropriate copyright
 notice.

SEVERABILITY. If any part of this license is found to be unenforceable in any j
urisdiction, the remaining portions of the license remain in force.

NO WARRANTY. Open Publication works are licensed and provided "as is" without w
arranty of any kind, express or implied, including, but not limited to, the imp
lied warranties of merchantability and fitness for a particular purpose or a wa
rranty of non-infringement.

IV. REQUIREMENTS ON MODIFIED WORKS

All modified versions of documents covered by this license, including translati
ons, anthologies, compilations and partial documents, must meet the following r
equirements:

1) The modified version must be labeled as such.
2) The person making the modifications must be identified and the modifications
 dated.
3) Acknowledgement of the original author and publisher if applicable must be r
etained according to normal academic citation practices.
4) The location of the original unmodified document must be identified.
5) The original author's (or authors') name(s) may not be used to assert or imp
ly endorsement of the resulting document without the original author's (or auth
ors') permission.

V. GOOD-PRACTICE RECOMMENDATIONS 

In addition to the requirements of this license, it is requested from and stron
gly recommended of redistributors that:

1) If you are distributing Open Publication works on hardcopy or CD-ROM, you pr
ovide email notification to the authors of your intent to redistribute at least
 thirty days before your manuscript or media freeze, to give the authors time t
o provide updated documents. This notification should describe modifications, i
f any, made to the document.

2) All substantive modifications (including deletions) be either clearly marked
 up in the document or else described in an attachment to the document.

Finally, while it is not mandatory under this license, it is considered good fo
rm to offer a free copy of any hardcopy and CD-ROM expression of an Open Public
ation-licensed work to its author(s).

VI. LICENSE OPTIONS

The author(s) and/or publisher of an Open Publication-licensed document may ele
ct certain options by appending language to the reference to or copy of the lic
ense. These options are considered part of the license instance and must be inc
luded with the license (or its incorporation by reference) in derived works.

A. To prohibit distribution of substantively modified versions without the expl
icit permission of the author(s). "Substantive modification" is defined as a ch
ange to the semantic content of the document, and excludes mere changes in form
at or typographical corrections.

To accomplish this, add the phrase `Distribution of substantively modified vers
ions of this document is prohibited without the explicit permission of the copy
right holder.' to the license reference or copy.

B. To prohibit any publication of this work or derivative works in whole or in 
part in standard (paper) book form for commercial purposes is prohibited unless
 prior permission is obtained from the copyright holder.

To accomplish this, add the phrase 'Distribution of the work or derivative of t
he work in any standard (paper) book form is prohibited unless prior permission
 is obtained from the copyright holder.' to the license reference or copy.

OPEN PUBLICATION POLICY APPENDIX:

(This is not considered part of the license.)

Open Publication works are available in source format via the Open Publication 
home page at http://works.opencontent.org/.

Open Publication authors who want to include their own license on Open Publicat
ion works may do so, as long as their terms are not more restrictive than the O
pen Publication license.

If you have questions about the Open Publication License, please contact TBD, a
nd/or the Open Publication Authors' List at opal@opencontent.org, via email.


