<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en-US">

  <head>
<title>Common Development and Distribution License (CDDL)</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

	
	
    <STYLE type="text/css">
      li {display: block}
    </STYLE>
  <link rel="stylesheet" type="text/css" href="/css/default.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<!--stopindex-->
<script language="javascript1.2" type="text/javascript" src="/js/sniff.js"></script>
<script language="javascript1.2" type="text/javascript" src="/js/menucontent.js"></script>
<script language="javascript1.2" type="text/javascript" src="/js/menucode.js"></script>
</head>

  <body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0" bgcolor="#ffffff" onload="prepmenus();" class="a0v0">
<a name="top"></a>

    <CENTER>
      <H3>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)<BR>
	Version 1.0</H3>
    </CENTER>
    <UL>
      <LI><P><B>1. Definitions.</B></P>
	<UL>

	  <LI><P> <B>1.1. &ldquo;Contributor&rdquo;</B> means each
	  individual or entity that creates or contributes to the creation of
	  Modifications.</P>
	    
	  <LI><P> <B>1.2. &ldquo;Contributor Version&rdquo;</B> means
	  the combination of the Original Software, prior
	  Modifications used by a Contributor (if any), and the
	  Modifications made by that particular Contributor.</P>

	  <LI><P> <B>1.3. &ldquo;Covered Software&rdquo;</B> means (a)
	  the Original Software, or (b) Modifications, or (c) the
	  combination of files containing Original Software with files
	  containing Modifications, in each case including portions
	  thereof.</P>

	  <LI><P> <B>1.4. &ldquo;Executable&rdquo;</B> means the
	  Covered Software in any form other than Source Code.</P>

	  <LI><P> <B>1.5. &ldquo;Initial Developer&rdquo;</B> means
	  the individual or entity that first makes Original Software
	  available under this License.</P>

	  <LI><P> <B>1.6. &ldquo;Larger Work&rdquo;</B> means a work
	  which combines Covered Software or portions thereof with
	  code not governed by the terms of this License.</P>

	  <LI><P> <B>1.7. &ldquo;License&rdquo;</B> means this
	  document.</P>

	  <LI><P> <B>1.8. &ldquo;Licensable&rdquo;</B> means having
	  the right to grant, to the maximum extent possible, whether
	  at the time of the initial grant or subsequently acquired,
	  any and all of the rights conveyed herein.</P>

	  <LI><P> <B>1.9. &ldquo;Modifications&rdquo;</B> means the
	  Source Code and Executable form of any of the following:</P>
	    <UL>

	      <LI><P><B>A.</B> Any file that results from an addition
	      to, deletion from or modification of the contents of a
	      file containing Original Software or previous
	      Modifications;</P>

	      <LI><P><B>B.</B> Any new file that contains any part of
	      the Original Software or previous Modification; or</P>

	      <LI><P><B>C.</B> Any new file that is contributed or
	      otherwise made available under the terms of this
	      License.</P>
	    </UL>

	  <LI><P> <B>1.10. &ldquo;Original Software&rdquo;</B> means
	  the Source Code and Executable form of computer software
	  code that is originally released under this License.</P>

	  <LI><P> <B>1.11. &ldquo;Patent Claims&rdquo;</B> means any
	  patent claim(s), now owned or hereafter acquired, including
	  without limitation, method, process, and apparatus claims,
	  in any patent Licensable by grantor.</P>

	  <LI><P> <B>1.12. &ldquo;Source Code&rdquo;</B> means (a) the
	  common form of computer software code in which modifications
	  are made and (b) associated documentation included in or
	  with such code.</P>

	  <LI><P> <B>1.13. &ldquo;You&rdquo; (or
	  &ldquo;Your&rdquo;)</B> means an individual or a legal
	  entity exercising rights under, and complying with all of
	  the terms of, this License.  For legal entities,
	  &ldquo;You&rdquo; includes any entity which controls, is
	  controlled by, or is under common control with You.  For
	  purposes of this definition, &ldquo;control&rdquo; means
	  (a)&nbsp;the power, direct or indirect, to cause the
	  direction or management of such entity, whether by contract
	  or otherwise, or (b)&nbsp;ownership of more than fifty
	  percent (50%) of the outstanding shares or beneficial
	  ownership of such entity.</P>
	</UL>

      <LI><P><B>2. License Grants.</B></P>
	<UL>
	  <LI><P> <B>2.1. The Initial Developer Grant.</B></P>

	    <P> Conditioned upon Your compliance with Section 3.1
	    below and subject to third party intellectual property
	    claims, the Initial Developer hereby grants You a
	    world-wide, royalty-free, non-exclusive license:</P>

	    <UL>

	      <LI><P><B>(a)</B> under intellectual property rights
	      (other than patent or trademark) Licensable by Initial
	      Developer, to use, reproduce, modify, display, perform,
	      sublicense and distribute the Original Software (or
	      portions thereof), with or without Modifications, and/or
	      as part of a Larger Work; and</P>

	      <LI><P><B>(b)</B> under Patent Claims infringed by the
	      making, using or selling of Original Software, to make,
	      have made, use, practice, sell, and offer for sale,
	      and/or otherwise dispose of the Original Software (or
	      portions thereof).</P>

	      <LI><P><B>(c)</B> The licenses granted in
	      Sections&nbsp;2.1(a) and (b) are effective on the date
	      Initial Developer first distributes or otherwise makes
	      the Original Software available to a third party under
	      the terms of this License.</P>

	      <LI><P><B>(d)</B> Notwithstanding Section&nbsp;2.1(b)
	      above, no patent license is granted: (1)&nbsp;for code
	      that You delete from the Original Software, or
	      (2)&nbsp;for infringements caused by: (i)&nbsp;the
	      modification of the Original Software, or (ii)&nbsp;the
	      combination of the Original Software with other software
	      or devices.</P>
	    </UL>
	  <LI><P>
		<B>2.2. Contributor Grant.</B></P>

	    <P>Conditioned upon Your compliance with Section 3.1 below
	    and subject to third party intellectual property claims,
	    each Contributor hereby grants You a world-wide,
	    royalty-free, non-exclusive license:</P>

	    <UL>
	      <LI><P><B>(a)</B> under intellectual property rights
	      (other than patent or trademark) Licensable by
	      Contributor to use, reproduce, modify, display, perform,
	      sublicense and distribute the Modifications created by
	      such Contributor (or portions thereof), either on an
	      unmodified basis, with other Modifications, as Covered
	      Software and/or as part of a Larger Work; and</P>

	      <LI><P><B>(b)</B> under Patent Claims infringed by the
	      making, using, or selling of Modifications made by that
	      Contributor either alone and/or in combination with its
	      Contributor Version (or portions of such combination),
	      to make, use, sell, offer for sale, have made, and/or
	      otherwise dispose of: (1)&nbsp;Modifications made by
	      that Contributor (or portions thereof); and (2)&nbsp;the
	      combination of Modifications made by that Contributor
	      with its Contributor Version (or portions of such
	      combination).</P>

	      <LI><P><B>(c)</B> The licenses granted in
	      Sections&nbsp;2.2(a) and 2.2(b) are effective on the
	      date Contributor first distributes or otherwise makes
	      the Modifications available to a third party.</P>

	      <LI><P><B>(d)</B> Notwithstanding Section&nbsp;2.2(b)
	      above, no patent license is granted: (1)&nbsp;for any
	      code that Contributor has deleted from the Contributor
	      Version; (2)&nbsp;for infringements caused by:
	      (i)&nbsp;third party modifications of Contributor
	      Version, or (ii)&nbsp;the combination of Modifications
	      made by that Contributor with other software (except as
	      part of the Contributor Version) or other devices; or
	      (3)&nbsp;under Patent Claims infringed by Covered
	      Software in the absence of Modifications made by that
	      Contributor.</P>
	    </UL>
	</UL>

      <LI><P><B>3. Distribution Obligations.</B></P>
	<UL>

	  <LI><P> <B>3.1. Availability of Source Code.</B></P>

	    <P>Any Covered Software that You distribute or otherwise
	    make available in Executable form must also be made
	    available in Source Code form and that Source Code form
	    must be distributed only under the terms of this License.
	    You must include a copy of this License with every copy of
	    the Source Code form of the Covered Software You
	    distribute or otherwise make available.  You must inform
	    recipients of any such Covered Software in Executable form
	    as to how they can obtain such Covered Software in Source
	    Code form in a reasonable manner on or through a medium
	    customarily used for software exchange.</P>

	  <LI><P> <B>3.2. Modifications.</B></P>

	    <P>The Modifications that You create or to which You
	    contribute are governed by the terms of this License.  You
	    represent that You believe Your Modifications are Your
	    original creation(s) and/or You have sufficient rights to
	    grant the rights conveyed by this License.</P>

	  <LI><P> <B>3.3. Required Notices.</B></P>

	    <P>You must include a notice in each of Your Modifications
	    that identifies You as the Contributor of the
	    Modification.  You may not remove or alter any copyright,
	    patent or trademark notices contained within the Covered
	    Software, or any notices of licensing or any descriptive
	    text giving attribution to any Contributor or the Initial
	    Developer.</P>

	  <LI><P> <B>3.4. Application of Additional Terms.</B></P>

	    <P>You may not offer or impose any terms on any Covered
	    Software in Source Code form that alters or restricts the
	    applicable version of this License or the
	    recipients&rsquo; rights hereunder.  You may choose to
	    offer, and to charge a fee for, warranty, support,
	    indemnity or liability obligations to one or more
	    recipients of Covered Software.  However, you may do so
	    only on Your own behalf, and not on behalf of the Initial
	    Developer or any Contributor.  You must make it absolutely
	    clear that any such warranty, support, indemnity or
	    liability obligation is offered by You alone, and You
	    hereby agree to indemnify the Initial Developer and every
	    Contributor for any liability incurred by the Initial
	    Developer or such Contributor as a result of warranty,
	    support, indemnity or liability terms You offer.</P>

	  <LI><P> <B>3.5. Distribution of Executable Versions.</B></P>

	    <P>You may distribute the Executable form of the Covered
	    Software under the terms of this License or under the
	    terms of a license of Your choice, which may contain terms
	    different from this License, provided that You are in
	    compliance with the terms of this License and that the
	    license for the Executable form does not attempt to limit
	    or alter the recipient&rsquo;s rights in the Source Code
	    form from the rights set forth in this License.  If You
	    distribute the Covered Software in Executable form under a
	    different license, You must make it absolutely clear that
	    any terms which differ from this License are offered by
	    You alone, not by the Initial Developer or Contributor.
	    You hereby agree to indemnify the Initial Developer and
	    every Contributor for any liability incurred by the
	    Initial Developer or such Contributor as a result of any
	    such terms You offer.</P>

	  <LI><P> <B>3.6. Larger Works.</B></P>

	    <P>You may create a Larger Work by combining Covered
	    Software with other code not governed by the terms of this
	    License and distribute the Larger Work as a single
	    product.  In such a case, You must make sure the
	    requirements of this License are fulfilled for the Covered
	    Software.</P>
	</UL>

      <LI><P><B>4. Versions of the License.</B></P>
	<UL>
	  <LI><P>
	      <B>4.1. New Versions.</B></P>

	    <P>Sun Microsystems, Inc. is the initial license steward
	    and may publish revised and/or new versions of this
	    License from time to time.  Each version will be given a
	    distinguishing version number.  Except as provided in
	    Section 4.3, no one other than the license steward has the
	    right to modify this License.</P>

	  <LI><P>
	      <B>4.2. Effect of New Versions.</B></P>

	    <P>You may always continue to use, distribute or otherwise
	    make the Covered Software available under the terms of the
	    version of the License under which You originally received
	    the Covered Software.  If the Initial Developer includes a
	    notice in the Original Software prohibiting it from being
	    distributed or otherwise made available under any
	    subsequent version of the License, You must distribute and
	    make the Covered Software available under the terms of the
	    version of the License under which You originally received
	    the Covered Software.  Otherwise, You may also choose to
	    use, distribute or otherwise make the Covered Software
	    available under the terms of any subsequent version of the
	    License published by the license steward.</P>

	  <LI><P>
	    <B>4.3. Modified Versions.</B></P>

	    <P>When You are an Initial Developer and You want to
	    create a new license for Your Original Software, You may
	    create and use a modified version of this License if You:
	    (a)&nbsp;rename the license and remove any references to
	    the name of the license steward (except to note that the
	    license differs from this License); and (b)&nbsp;otherwise
	    make it clear that the license contains terms which differ
	    from this License.</P>
	</UL>

      <LI><P>
	<B>5. DISCLAIMER OF WARRANTY.</B></P>

	<P>COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN
	&ldquo;AS IS&rdquo; BASIS, WITHOUT WARRANTY OF ANY KIND,
	EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION,
	WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS,
	MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
	THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
	COVERED SOFTWARE IS WITH YOU.  SHOULD ANY COVERED SOFTWARE
	PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER
	OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
	SERVICING, REPAIR OR CORRECTION.  THIS DISCLAIMER OF WARRANTY
	CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.  NO USE OF ANY
	COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
	DISCLAIMER.</P>

      <LI><P>
	<B>6. TERMINATION.</B></P>

	<UL>
	  <LI><P><B>6.1.</B> This License and the rights granted
	  hereunder will terminate automatically if You fail to comply
	  with terms herein and fail to cure such breach within 30
	  days of becoming aware of the breach.  Provisions which, by
	  their nature, must remain in effect beyond the termination
	  of this License shall survive.</P>

	  <LI><P><B>6.2.</B> If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as &ldquo;Participant&rdquo;) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections&nbsp;2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.</P>

	  <LI><P><B>6.3.</B> In the event of termination under
	  Sections&nbsp;6.1 or 6.2 above, all end user licenses
	  that have been
	  validly granted by You or any distributor hereunder prior to
	  termination (excluding licenses granted to You by any
	  distributor) shall survive termination.</P>

	</UL>

      <LI><P>
	<B>7. LIMITATION OF LIABILITY.</B></P>

	<P>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER
	TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL
	YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY
	DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF
	SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT,
	SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
	INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL,
	WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL
	OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL
	HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES.  THIS
	LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH
	OR PERSONAL INJURY RESULTING FROM SUCH PARTY&rsquo;S
	NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
	LIMITATION.  SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
	LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
	EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.</P>

      <LI><P>
	<B>8. U.S. GOVERNMENT END USERS.</B></P>

	<P>The Covered Software is a &ldquo;commercial item,&rdquo; as
	that term is defined in 48&nbsp;C.F.R.&nbsp;2.101 (Oct. 1995),
	consisting of &ldquo;commercial computer software&rdquo; (as
	that term is defined at 48
	C.F.R. &sect;&nbsp;252.227-7014(a)(1)) and &ldquo;commercial
	computer software documentation&rdquo; as such terms are used
	in 48&nbsp;C.F.R.&nbsp;12.212 (Sept. 1995).  Consistent with
	48 C.F.R.  12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4
	(June 1995), all U.S. Government End Users acquire Covered
	Software with only those rights set forth herein.  This
	U.S. Government Rights clause is in lieu of, and supersedes,
	any other FAR, DFAR, or other clause or provision that
	addresses Government rights in computer software under this
	License.</P>

      <LI><P>
	<B>9. MISCELLANEOUS.</B></P>

	<P>This License represents the complete agreement concerning
	subject matter hereof.  If any provision of this License is
	held to be unenforceable, such provision shall be reformed
	only to the extent necessary to make it enforceable.  This
	License shall be governed by the law of the jurisdiction
	specified in a notice contained within the Original Software
	(except to the extent applicable law, if any, provides
	otherwise), excluding such jurisdiction&rsquo;s
	conflict-of-law provisions.  Any
	litigation relating to this License shall be subject to the
	jurisdiction of the courts located in the
	jurisdiction and venue specified in a notice contained within
	the Original Software, with the losing party responsible for
	costs, including, without limitation, court costs and
	reasonable attorneys&rsquo; fees and expenses.  The
	application of the United Nations Convention on Contracts for
	the International Sale of Goods is expressly excluded.  Any
	law or regulation which provides that the language of a
	contract shall be construed against the drafter shall not
	apply to this License.  You agree that You alone are
	responsible for compliance with the United States export
	administration regulations (and the export control laws and
	regulation of any other countries) when You use, distribute or
	otherwise make available any Covered Software.</P>

	<LI><P>
	  <B>10. RESPONSIBILITY FOR CLAIMS.</B></P>

	<P>As between Initial Developer and the Contributors, each
	party is responsible for claims and damages arising, directly
	or indirectly, out of its utilization of rights under this
	License and You agree to work with Initial Developer and
	Contributors to distribute such responsibility on an equitable
	basis.  Nothing herein is intended or shall be deemed to
	constitute any admission of liability.</P>

    </UL>

  </BODY>
</html>
