Day Specification License

Day Management AG ("Licensor") is willing to license this specification to you #
ONLY UPON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS LICENSE AGREEMENT ("Agreement"). 
Please read the terms and conditions of this Agreement carefully.

Content Repository for JavaTM Technology API Specification ("Specification") 

Version: 1.0 
Status: FCS 
Release: 11 May 2005
Copyright 2005 Day Management AG
Barfüsserplatz 6, 4001 Basel, Switzerland.
All rights reserved.

NOTICE; LIMITED LICENSE GRANTS

1. License for Purposes of Evaluation and Developing Applications. Licensor hereby grants you 
   a fully-paid, non-exclusive, non-transferable, worldwide, limited license (without the right 
   to sublicense), under Licensor's applicable intellectual property rights to view, download, 
   use and reproduce the Specification only for the purpose of internal evaluation. This includes 
   developing applications intended to run on an implementation of the Specification provided that 
   such applications do not themselves implement any portion(s) of the Specification.
2. License for the Distribution of Compliant Implementations. Licensor also grants you a perpetual, 
   non-exclusive, non-transferable, worldwide, fully paid-up, royalty free, limited license (without 
   the right to sublicense) under any applicable copyrights or, subject to the provisions of subsection 
   4 below, patent rights it may have covering the Specification to create and/or distribute an 
   Independent Implementation of the Specification that: (a) fully implements the Specification including 
   all its required interfaces and functionality; (b) does not modify, subset, superset or otherwise extend 
   the Licensor Name Space, or include any public or protected packages, classes, Java interfaces, fields
   or methods within the Licensor Name Space other than those required/authorized by the Specification or 
   Specifications being implemented; and (c) passes the Technology Compatibility Kit (including satisfying 
   the requirements of the applicable TCK Users Guide) for such Specification ("Compliant Implementation"). 
   In addition, the foregoing license is expressly conditioned on your not acting outside its scope. 
   No license is granted hereunder for any other purpose (including, for example, modifying the Specification, 
   other than to the extent of your fair use rights, or distributing the Specification to third parties).
3. Pass-through Conditions. You need not include limitations (a)-(c) from the previous paragraph or any other 
   particular "pass through" requirements in any license You grant concerning the use of your Independent 
   Implementation or products derived from it. However, except with respect to Independent Implementations 
   (and products derived from them) that satisfy limitations (a)-(c) from the previous paragraph, 
   You may neither: 
      (a) grant or otherwise pass through to your licensees any licenses under Licensor's applicable 
	      intellectual property rights; nor 
	  (b) authorize your licensees to make any claims concerning their implementation's compliance with the Specification.
	  
4. Reciprocity Concerning Patent Licenses. With respect to any patent claims covered by the license granted 
   under subparagraph 2 above that would be infringed by all technically feasible implementations of the 
   Specification, such license is conditioned upon your offering on fair, reasonable and non-discriminatory 
   terms, to any party seeking it from You, a perpetual, non-exclusive, non-transferable, worldwide license 
   under Your patent rights that are or would be infringed by all technically feasible implementations of the 
   Specification to develop, distribute and use a Compliant Implementation.
   
5. Definitions. For the purposes of this Agreement: "Independent Implementation" shall mean an implementation
   of the Specification that neither derives from any of Licensor's source code or binary code materials nor, 
   except with an appropriate and separate license from Licensor, includes any of Licensor's source code or 
   binary code materials; "Licensor Name Space" shall mean the public class or interface declarations whose 
   names begin with "java", "javax", "javax.jcr" or their equivalents in any subsequent naming convention 
   adopted by Licensor through the Java Community Process, or any recognized successors or replacements thereof; 
   and "Technology Compatibility Kit" or "TCK" shall mean the test suite and accompanying TCK User's Guide 
   provided by Licensor which corresponds to the particular version of the Specification being tested.
   
6. Termination. This Agreement will terminate immediately without notice from Licensor if you fail to comply 
   with any material provision of or act outside the scope of the licenses granted above.
   
7. Trademarks. No right, title, or interest in or to any trademarks, service marks, or trade names of Licensor 
   is granted hereunder. Java is a registered trademark of Sun Microsystems, Inc. in the United States and 
   other countries.
   
8. Disclaimer of Warranties. The Specification is provided "AS IS". LICENSOR MAKES NO REPRESENTATIONS OR 
   WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, 
   FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT (INCLUDING AS A CONSEQUENCE OF ANY PRACTICE OR 
   IMPLEMENTATION OF THE SPECIFICATION), OR THAT THE CONTENTS OF THE SPECIFICATION ARE SUITABLE FOR ANY 
   PURPOSE. This document does not represent any commitment to release or implement any portion of the 
   Specification in any product.
   
   The Specification could include technical inaccuracies or typographical errors. Changes are periodically 
   added to the information therein; these changes will be incorporated into new versions of the Specification, 
   if any. Licensor may make improvements and/or changes to the product(s) and/or the program(s) described in the 
   Specification at any time. Any use of such changes in the Specification will be governed by the then-current 
   license for the applicable version of the Specification.

9. Limitation of Liability. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY 
   DAMAGES, INCLUDING WITHOUT LIMITATION, LOST REVENUE, PROFITS OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, 
   INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR 
   RELATED TO ANY FURNISHING, PRACTICING, MODIFYING OR ANY USE OF THE SPECIFICATION, EVEN IF LICENSOR HAS BEEN 
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
   
10. Report. If you provide Licensor with any comments or suggestions in connection with your use of the 
   Specification ("Feedback"), you hereby: (i) agree that such Feedback is provided on a non-proprietary 
   and non-confidential basis, and (ii) grant Licensor a perpetual, non-exclusive, worldwide, fully paid-up, 
   irrevocable license, with the right to sublicense through multiple levels of sublicensees, to incorporate, 
   disclose, and use without limitation the Feedback for any purpose related to the Specification and future 
   versions, implementations, and test suites thereof.
   
Day JCR License
---------------
In addition to the permissions granted under the Specification License, Day Management AG hereby grants to 
You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable license to reproduce, publicly 
display, publicly perform, sublicense, and distribute unmodified copies of the Content Repository for 
Java Technology API (JCR 2.0) Java Archive (JAR) file ("jcr-2.0.jar") and to make, have made, use, offer to sell, 
sell, import, and otherwise transfer said file on its own or as part of a larger work that makes use of the 
JCR API. With respect to any patent claims covered by this license that would be infringed by all technically 
feasible implementations of the Specification, such license is conditioned upon your offering on fair, reasonable
and non-discriminatory terms, to any party seeking it from You, a perpetual, non-exclusive, non-transferable, 
worldwide license under Your patent rights that are or would be infringed by all technically feasible implementations 
of the Specification to develop, distribute and use a Compliant Implementation.