Qt Embedded Commercial Developer License Agreement
Agreement version 1.5.1


This Qt Embedded Commercial License Agreement ("Agreement") is a legal agreement between Nokia Corporation ("Nokia"), with its registered office at Keilalahdentie 4, 02150 Espoo, Finland and you (either an individual or a legal entity) ("Licensee") for the Licensed Software (as defined below).


1.	DEFINITIONS

"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly controlling such Party; (ii) which is under the same direct or indirect ownership or control as such Party; or (iii) which is directly or indirectly owned or controlled by such Party.  For these purposes, an entity shall be treated as being controlled by another if that other entity has fifty percent (50 %) or more of the votes in such entity, is able to direct its affairs and/or to control the composition of its board of directors or equivalent body.  

"Applications" shall mean Licensee's software products created using the Licensed Software which may include portions of the Licensed Software.

"Deployment Platforms" shall mean the operating system(s) listed in the License Certificate onto which Licensee is authorized to deploy Applications. 

"Designated User(s)" shall mean the employee(s) of Licensee acting within the scope of their employment or Licensee's consultant(s) or contractor(s) acting within the scope of their services for Licensee and on behalf of Licensee.
 
"Development Platforms" shall mean the operating system(s) listed in the License Certificate on which Licensee may use, develop and modify the Licensed Software. 
 
"Initial Term" shall mean the period of time one (1) year from the later of (a) the Effective Date; or (b) the date the Licensed Software was initially delivered to Licensee by Nokia.  If no specific Effective Date is set forth in the Agreement, the Effective Date shall be deemed to be the date the Licensed Software was initially delivered to Licensee.

"License Certificate" shall mean the document accompanying the Licensed Software which specifies the modules which are licensed under the Agreement, Development Platforms, Deployment Platforms and Designated Users.  

"Licensed Software" shall mean the computer software, "online" or electronic documentation, associated media and printed materials, including the source code, example programs and the documentation delivered by Nokia to Licensee in conjunction with this Agreement.  Licensed Software does not include Third Party Software (as defined in Section 7).

"Modified Software" shall mean modifications made to the Licensed Software by Licensee.

"Party or Parties" shall mean Licensee and/or Nokia.

"Support" shall mean standard developer support that is provided by Nokia to assist eligible Designated Users in using the Licensed Software in accordance with its established standard support procedures listed at:  http:// http://qt.nokia.com/support-services/files/standardsupport-TermsandConditions.pdf.

"Updates" shall mean a release or version of the Licensed Software containing enhancements, new features, bug fixes, error corrections and other changes that are generally made available to users of the Licensed Software that have contracted for maintenance and support.


2.	OWNERSHIP

The Licensed Software is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The Licensed Software is licensed, not sold.

To the extent Licensee submits bug fixes or error corrections, including information related thereto, Licensee hereby grants to Nokia a sublicensable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and fully paid-up copyright and trade secret license to reproduce, adapt, translate, modify, and prepare derivative works of, publicly display, publicly perform, sublicense, make available and distribute error corrections and bug fixes, including derivative works thereof.  All Nokia's and/or its licensors' trademarks, service marks, trade names, logos or other words or symbols are and shall remain the exclusive property of Nokia or its licensors respectively.


3.	MODULES

Some of the files in the Licensed Software have been grouped into modules. These files contain specific notices defining the module of which they are a part. The modules licensed to Licensee are specified in the License Certificate accompanying the Licensed Software. The terms of the License Certificate are considered part of the Agreement. In the event of inconsistency or conflict between the language of this Agreement and the License Certificate, the provisions of this Agreement shall govern.
 

4.	VALIDITY OF THE AGREEMENT

By installing, copying, or otherwise using the Licensed Software, Licensee agrees to be bound by the terms of this Agreement. If Licensee does not agree to the terms of this Agreement, Licensee should not install, copy, or otherwise use the Licensed Software. In addition, by installing, copying, or otherwise using any Updates or other components of the Licensed Software that Licensee receives separately as part of the Licensed Software, Licensee agrees to be bound by any additional license terms that accompany such Updates, if any. If Licensee does not agree to the additional license terms that accompany such Updates, Licensee should not install, copy, or otherwise use such Updates. 

Upon Licensee's acceptance of the terms and conditions of this Agreement, Nokia grants Licensee the right to use the Licensed Software in the manner provided below.


5.	LICENSES

5.1	Using, Modifying and Copying

Nokia grants to Licensee a non-exclusive, non-transferable, perpetual license to use, modify and copy the Licensed Software for Designated Users specified in the License Certificate for the sole purposes of:  

(i) designing, developing, and testing Application(s); 

(ii) modifying the Licensed Software as limited by Section 8 below; and

(iii) compiling the Licensed Software and/or Modified Software source code into object code.  

Licensee may install copies of the Licensed Software on an unlimited number of computers provided that only the Designated Users use the Licensed Software. Licensee may at any time designate another Designated User to replace a then-current Designated User by notifying Nokia, provided that a) the then-current Designated User has not been designated as a replacement during the last six (6) months; and b) there is no more than the specified number of Designated Users at any given time.

5.2	No Distribution and Limited Exception

Licensee may not distribute, transfer, assign or otherwise dispose of the Licensed Software and/or Modified Software, except as provided by a separate distribution agreement with Nokia for the Deployment Platforms that Licensee has licensed from Nokia.  Distribution on Platforms, other than Deployment Platforms is strictly prohibited.

Notwithstanding the above limitation, Licensee may distribute Application(s) in binary/compiled form onto devices running Windows CE/Windows Mobile, Symbian or Maemo/MeeGo, provided the core functionality of the device does not depend on the Application(s).

5.3	Further Requirements

The licenses granted in this Section 5 by Nokia to Licensee are subject to Licensee's compliance with Section 8 of this Agreement.  


6.	VERIFICATION

Nokia or a certified auditor on Nokia's behalf, may, upon its reasonable request and at its expense, audit Licensee with respect to the use of the Licensed Software. Such audit may be conducted by mail, electronic means or through an in-person visit to Licensee's place of business.  Any such in-person audit shall be conducted during regular business hours at Licensee's facilities and shall not unreasonably interfere with Licensee's business activities. Nokia will not remove, copy, or redistribute any electronic material during the course of an audit.  If an audit reveals that Licensee is using the Licensed Software in a way that is in material violation of the terms of the Agreement, then Licensee shall pay Nokia's reasonable costs of conducting the audit. In the case of a material violation, Licensee agrees to pay Nokia any amounts owing that are attributable to the unauthorized use.  In the alternative, Nokia reserves the right, at Nokia's sole option, to terminate the licenses for the Licensed Software.


7.	THIRD PARTY SOFTWARE

The Licensed Software may provide links to third party libraries or code (collectively "Third Party Software") to implement various functions.  Third Party Software does not comprise part of the Licensed Software. In some cases, access to Third Party Software may be included along with the Licensed Software delivery as a convenience for development and testing only. Such source code and libraries may be listed in the ".../src/3rdparty" source tree delivered with the Licensed Software or documented in the Licensed Software where the Third Party Software is used, as may be amended from time to time, do not comprise the Licensed Software.  Licensee acknowledges (i) that some part of Third Party Software may require additional licensing of copyright and patents from the owners of such, and (ii) that distribution of any of the Licensed Software referencing any portion of a Third Party Software may require appropriate licensing from such third parties.  


8.	CONDITIONS FOR CREATING APPLICATIONS

The licenses granted in this Agreement for Licensee to create, modify and distribute Applications is subject to all of the following conditions:  (i) all copies of the Applications Licensee creates must bear a valid copyright notice either Licensee's own or the copyright notice that appears on the Licensed Software;  (ii) Licensee may not remove or alter any copyright, trademark or other proprietary rights notice contained in any portion of the Licensed Software including but not limited to the About Boxes;  (iii) Licensee will indemnify and hold Nokia, its Affiliates, contractors, and its suppliers, harmless from and against any claims or liabilities arising out of the use, reproduction or distribution of Applications; (iv) Applications must be developed using a licensed, registered copy of the Licensed Software; (v) Applications must add primary and substantial functionality to the Licensed Software; (vi) Applications may not pass on functionality which in any way makes it possible for others to create software with the Licensed Software; however Licensee may use the Licensed Software's scripting and QML ("Qt Quick") functionality solely in order to enable scripting, themes and styles that augment the functionality and appearance of the Application(s) without adding primary and substantial functionality to the Application(s); (vii) Licensee may create Modified Software that breaks the source or binary compatibility with the Licensed Software. This includes, but is not limited to, changing the application programming interfaces ("API") by adding, changing or deleting any variable, method, or class signature in the Licensed Software, the inter-process QCop specification, and/or any inter-process protocols, services or standards in the Licensed Software libraries.  To the extent that Licensee breaks source or binary compatibility with the Licensed Software, Licensee acknowledges that Nokia's ability to provide Support may be prevented or limited and Licensee's ability to make use of Updates may be restricted; (viii) Applications may not compete with the Licensed Software; (ix) Licensee may not use Nokia's or any of its suppliers' names, logos, or trademarks to market Applications, except to state that Licensee's Application was developed using the Licensed Software.

NOTE:  The Open Source Editions of Nokia's Qt products and the Qt, Qtopia and Qt Extended versions previously licensed by Trolltech (collectively referred to as "Products") are licensed under the terms of the GNU Lesser General Public License version 2.1 ("LGPL") and/or the GNU General Public License versions 2.0 and 3.0 ("GPL") (as applicable) and not under this Agreement.  If Licensee or another third party, has, at any time, developed all (or any portions of) the Application(s) using a version of one of these Products licensed under the LGPL or the GPL, Licensee may not combine such development work with the Licensed Software and must license such Application(s) (or any portions derived there from) under the terms of the GNU Lesser General Public License version 2.1 (Qt only) or GNU General Public License version 2.0 (Qt, Qtopia and Qt Extended) or version 3 (Qt only) copies of which are located at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html, http://www.fsf.org/licensing/licenses/info/GPLv2.html, and http://www.gnu.org/copyleft/gpl.html.


9.	LIMITED WARRANTY AND WARRANTY DISCLAIMER

Nokia hereby represents and warrants with respect to the Licensed Software that it has the power and authority to grant the rights and licenses granted to Licensee under this Agreement.  Except as set forth above, the Licensed Software is licensed to Licensee "as is".  To the maximum extent permitted by applicable law, Nokia on behalf of itself and its suppliers, disclaims all warranties and conditions, either express or implied, including, but not limited to, implied warranties of merchantability and fitness for a particular purpose, title and non-infringement with regard to the Licensed Software. 


10.	LIMITATION OF LIABILITY

If, Nokia's warranty disclaimer notwithstanding, Nokia is held to be liable to Licensee whether in contract, tort, or any other legal theory, based on the Licensed Software, Nokia's entire liability to Licensee and Licensee's exclusive remedy shall be, at Nokia's option, either (a) return of the price Licensee paid for the Licensed Software, or (b) repair or replacement of the Licensed Software, provided Licensee returns to Nokia all copies of the Licensed Software as originally delivered to Licensee. Nokia shall not under any circumstances be liable to Licensee based on failure of the Licensed Software if the failure resulted from accident, abuse or misapplication, nor shall Nokia, under any circumstances, be liable for special damages, punitive or exemplary damages, damages for loss of profits or interruption of business or for loss or corruption of data. Any award of damages from Nokia to Licensee shall not exceed the total amount Licensee has paid to Nokia in connection with this Agreement.


11.	SUPPORT AND UPDATES

Licensee will be eligible to receive Support and Updates during the Initial Term, in accordance with Nokia's then current policies and procedures, if any. Such policies and procedures may be changed from time to time. Following the Initial Term, Nokia shall no longer make the Licensed Software available to Licensee unless Licensee purchases additional Support and Updates according to this Section 11 below.

Licensee may purchase additional Support and Updates following the Initial Term at Nokia's terms and conditions applicable at the time of renewal.


12.	CONFIDENTIALITY

Each party acknowledges that during the Initial Term of this Agreement it shall have access to information about the other party's business, business methods, business plans, customers, business relations, technology, and other information, including the terms of this Agreement, that is confidential and of great value to the other party, and the value of which would be significantly reduced if disclosed to third parties (the "Confidential Information"). Accordingly, when a party (the "Receiving Party") receives Confidential Information from another party (the "Disclosing Party"), the Receiving Party shall, and shall obligate its employees and agents and employees and agents of its affiliates to: (i) maintain the Confidential Information in strict confidence; (ii) not disclose the Confidential Information to a third party without the Disclosing Party's prior written approval; and (iii) not, directly or indirectly, use the Confidential Information for any purpose other than for exercising its rights and fulfilling its responsibilities pursuant to this Agreement. Each party shall take reasonable measures to protect the Confidential Information of the other party, which measures shall not be less than the measures taken by such party to protect its own confidential and proprietary information. 

"Confidential Information" shall not include information that (a) is or becomes generally known to the public through no act or omission of the Receiving Party; (b) was in the Receiving Party's lawful possession prior to the disclosure hereunder and was not subject to limitations on disclosure or use; (c) is developed by employees of the Receiving Party or other persons working for the Receiving Party who have not had access to the Confidential Information of the Disclosing Party, as proven by the written records of the Receiving Party or by persons who have not had access to the Confidential Information of the Disclosing Party as proven by the written records of the Receiving Party; (d) is lawfully disclosed to the Receiving Party without restrictions, by a third party not under an obligation of confidentiality; or (e) the Receiving Party is legally compelled to disclose the information, in which case the Receiving Party shall assert the privileged and confidential nature of the information and cooperate fully with the Disclosing Party to protect against and prevent disclosure of any Confidential Information and to limit the scope of disclosure and the dissemination of disclosed Confidential Information by all legally available means.

The obligations of the Receiving Party under this Section shall continue during the Initial Term and for a period of five (5) years after expiration or termination of this Agreement.  To the extent that the terms of the Non-Disclosure Agreement between Nokia and Licensee conflict with the terms of this Section 12, this Section 12 shall be controlling over the terms of the Non-Disclosure Agreement.


13.	GENERAL PROVISIONS

13.1. Marketing 

	Nokia may include Licensee's company name and logo in a publicly available list of Nokia customers and in its public communications.

13.2. No Assignment 

Licensee shall not be entitled to assign or transfer all or any of its rights, benefits and obligations under this Agreement without the prior written consent of Nokia, which shall not be unreasonably withheld.  Nokia shall be entitled to assign or transfer any of its rights, benefits or obligations under this Agreement on an unrestricted basis.

13.3. Termination

Nokia may terminate the Agreement at any time immediately upon written notice by Nokia to Licensee if Licensee breaches this Agreement.  

Either party shall have the right to terminate this Agreement immediately upon written notice in the event that the other party becomes insolvent, files for any form of bankruptcy, makes any assignment for the benefit of creditors, has a receiver, administrative receiver or officer appointed over the whole or a substantial part of its assets, ceases to conduct business, or an act equivalent to any of the above occurs under the laws of the jurisdiction of the other party.

Upon termination of the Licenses, Licensee shall return to Nokia all copies of Licensed Software that were supplied by Nokia.  All other copies of Licensed Software in the possession or control of Licensee must be erased or destroyed.  An officer of Licensee must promptly deliver to Nokia a written confirmation that this has occurred.

13.4. Surviving Sections
   
Any terms and conditions that by their nature or otherwise reasonably should survive a cancellation or termination of this Agreement shall also be deemed to survive.  Such terms and conditions include, but are not limited to the following Sections 2, 5.1, 6, 7, 8(iii), 10, 12, 13.5, 13.6, 13.9, 13.10, and 13.11 shall survive the termination of the Agreement.  Notwithstanding the foregoing, Sections 5.1 shall not survive if the Agreement is terminated for material breach.

13.5. Entire Agreement
   
This Agreement constitutes the complete agreement between the parties and supersedes all prior or contemporaneous discussions, representations, and proposals, written or oral, with respect to the subject matters discussed herein, with the exception of the non-disclosure agreement executed by the parties in connection with this Agreement ("Non-Disclosure Agreement"), if any, shall be subject to Section 12. No modification of this Agreement shall be effective unless contained in a writing executed by an authorized representative of each party. No term or condition contained in Licensee's purchase order shall apply unless expressly accepted by Nokia in writing. If any provision of the Agreement is found void or unenforceable, the remainder shall remain valid and enforceable according to its terms. If any remedy provided is determined to have failed for its essential purpose, all limitations of liability and exclusions of damages set forth in this Agreement shall remain in effect.

13.6. Payment and Taxes

If credit has been extended to Licensee by Nokia, all payments under this Agreement are due within thirty (30) days of the date Nokia mails its invoice to Licensee.  If Nokia has not extended credit to Licensee, Licensee shall be required to make payment concurrent with the delivery of the Licensed Software by Nokia.  All amounts payable are gross amounts but exclusive of any value added tax, use tax, sales tax or similar tax. Licensee shall be entitled to withhold from payments any applicable withholding taxes and comply with all applicable tax and employment legislation.  Each party shall pay all taxes (including, but not limited to, taxes based upon its income) or levies imposed on it under applicable laws, regulations and tax treaties as a result of this Agreement and any payments made hereunder (including those required to be withheld or deducted from payments).  Each party shall furnish evidence of such paid taxes as is sufficient to enable the other party to obtain any credits available to it, including original withholding tax certificates. 

13.7. Force Majeure

Neither party shall be liable to the other for any delay or non-performance of its obligations hereunder other than the obligation of paying the license fees in the event and to the extent that such delay or non-performance is due to an event of Force Majeure (as defined below).  If any event of Force Majeure results in a delay or non-performance of a party for a period of three (3) months or longer, then either party shall have the right to terminate this Agreement with immediate effect without any liability (except for the obligations of payment arising prior to the event of Force Majeure) towards the other party.  A "Force Majeure" event shall mean an act of God, terrorist attack or other catastrophic event of nature that prevents either party for fulfilling its obligations under this Agreement.

13.8. Notices

Any notice given by one party to the other shall be deemed properly given and deemed received if specifically acknowledged by the receiving party in writing or when successfully delivered to the recipient by hand, fax, or special courier during normal business hours on a business day to the addresses specified below.  Each communication and document made or delivered by one party to the other party pursuant to this Agreement shall be in the English language or accompanied by a translation thereof.

Notices to Nokia shall be given to:

    Nokia Norge AS
    Sandakerveien 116
    NO-0484 Oslo, Norway
    Fax:  +47 21 69 48 02

13.9. Export Control

Licensee acknowledges that the Licensed Software may be subject to export control restrictions of various countries.  Licensee shall fully comply with all applicable export license restrictions and requirements as well as with all laws and regulations relating to the importation of the Licensed Software and/or Modified Software and/or Applications and shall procure all necessary governmental authorizations, including without limitation, all necessary licenses, approvals, permissions or consents, where necessary for the re-exportation of the Licensed Software, Modified Software or Applications.

13.10. Governing Law and Legal Venue: 

This Agreement shall be construed and interpreted in accordance with the laws of Finland, excluding its choice of law provisions. Any disputes, controversy or claim  arising out of or relating to this Agreement, or the breach, termination or validity thereof shall be shall be finally settled by arbitration in accordance with the Arbitration Rules of the Central Chamber of Commerce of Finland.   The arbitration tribunal shall consist of one (1), or if either Party so requires, of three (3), arbitrators. The award shall be final and binding and enforceable in any court of competent jurisdiction. The arbitration shall be held in Helsinki, Finland and the process shall be conducted in the English language

13.11 No Implied License

There are no implied licenses or other implied rights granted under this Agreement, and all rights, save for those expressly granted hereunder, shall remain with Nokia and its licensors. In addition, no licenses or immunities are granted to the combination of the Licensed Software and/or Modified Software, as applicable, with any other software or hardware not delivered by Nokia under this Agreement.
