Historical Permission Notice and Disclaimer
http://opensource.org/licenses/HPND

---

<copyright notice>

Permission to use, copy, modify and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies[,]
[and] that both [that] [the] copyright notice and this permission
notice appear in supporting documentation[, and that the name [of]
<copyright holder> [or <related entities>] not be used in advertising
or publicity pertaining to distribution of the software without
specific, written prior permission]. [<copyright holder> makes
no representations about the suitability of this software for any
purpose. It is provided "as is" without express or implied warranty.]

[<copyright holder> DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS[,][.] IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.]

---

Explanation:

Angle brackets hold "fields", e.g. <copyright holder>.

Square brackets hold optional text, e.g. [or <related entities>].

A license can have variations in capitalization and whitespace, and
still be considered an instance of this template.

It may be possible to construct a grammatically incorrect license from
this template, or one that lacks a disclaimer, or one that includes a
double-disclaimer. That is acceptable, as long as it remains impossible
to construct a non-OSD-compliant license that matches the pattern.
