Qt COMMERCIAL LICENSE AGREEMENT
Agreement version 3.9.1


This Qt 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.

"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.

"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, 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.

"Platforms" shall mean the operating systems listed in the License Certificate. 

"Redistributables" shall mean the portions of the Licensed Software set forth in Appendix 1, Section 1 that may be distributed with or as part of Applications in object code form.

"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://qt.nokia.com/support-services/files/standardsupport-TermsandConditions.pdf. 

"Updates" shall mean a release or version of the Licensed Software containing enhancement, 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. 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 may 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 may 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 the Designated User(s) specified in the License Certificate for the sole purposes of designing, developing, and testing Application(s). 

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	Redistribution

a) Nokia grants Licensee a non-exclusive, royalty-free right to reproduce and distribute the object code form of Redistributables for execution on the specified Platforms. Copies of Redistributables may only be distributed with and for the sole purpose of executing Applications permitted under this Agreement that Licensee has created using the Licensed Software. Under no circumstances may any copies of Redistributables be distributed separately. This Agreement does not give Licensee any rights to distribute any of the parts of the Licensed Software listed in Appendix 1, Section 2, neither as a whole nor as parts or snippets of code. 

b) Licensee may not distribute, transfer, assign or otherwise dispose of Applications and/or Redistributables, in binary/compiled form, or in any other form, if such action is part of a joint software and hardware distribution, except as provided by a separate runtime distribution license with Nokia or one of its authorized distributors.  A joint hardware and software distribution shall be defined as either:  

(i) 	distribution of a hardware device where, in its final end user configuration, the main user interface of the device is provided by Application(s) created by Licensee or others, using a commercial version of Qt or a Qt-based product, and depends on the Licensed Software or an open source version of any Qt or Qt-based software product; or 

(ii) 	distribution of the Licensed Software with a device designed to facilitate the installation of the Licensed Software onto the same device where the main user interface of such device is provided by Application(s) created by Licensee or others, using a commercial version of Qt or a Qt-based product, and depends on the Licensed Software.

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 shall 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 (1) that some part of Third Party Software may require additional licensing of copyright and patents from the owners of such, and (2) 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 AND DISTRIBUTING     REDISTRIBUTABLES

The licenses granted in this Agreement for Licensee to create Applications and distribute them and the Redistributables (if any) to Licensee's customers is subject to all of the following conditions: (i) all copies of the Applications which 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 in "Qt Assistant" and "Qt Linguist" as defined in Appendix 1; (iii) Redistributables, if any, shall be licensed to Licensee's customer "as is"; (iv) Licensee shall 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; (v) Applications must be developed using a licensed, registered copy of the Licensed Software; (vi) Applications must add primary and substantial functionality to the Licensed Software; (vii) 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); (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 Application(s), except to state that 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, 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 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 shall 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 this Agreement, 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(iv), 10, 12, 13.5, 13.6, 13.9, 13.10 and 13.11 of this Agreement.  Notwithstanding the foregoing, Section 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.




Appendix 1


1. Parts of the Licensed Software that are permitted for distribution ("Redistributables"):

- The Licensed Software's main and plug-in libraries in object code form
- The Licensed Software's configuration tool ("qtconfig")
- The Licensed Software's help tool in object code/executable form ("Qt Assistant")
- The Licensed Software's internationalization tools in object code/executable form ("Qt Linguist", "lupdate", "lrelease")
- The Licensed Software's designer tool ("Qt Designer")
- The Licensed Software's IDE tool ("Qt Creator")
- The Licensed Software's QML ("Qt Quick") launcher tool in object code/executable form


2. Parts of the Licensed Software that are not permitted for distribution include, but are not limited to: 

- The Licensed Software's source code and header files
- The Licensed Software's documentation
- The Licensed Software's tool for writing makefiles ("qmake")
- The Licensed Software's Meta Object Compiler ("moc")
- The Licensed Software's User Interface Compiler ("uic" or in the case of Qt Jambi: "juic")
- The Licensed Software's Resource Compiler ("rcc")
- The Licensed Software's generator (only in the case of Qt Jambi if applicable)
- The Licensed Software's Qt SDK

