Qt All Operating Systems Commercial Developer License Agreement
Agreement version 1.3.1


This Qt All Operating Systems Commercial Developer License Agreement ("Agreement") is a legal agreement between Nokia, Inc. ("Nokia") with its registered office at 102 Corporate Park Drive, White Plains, NY 10604, U.S.A., 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 Embedded Linux, Windows(R) CE and Windows Mobile operating system(s). 

"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 system(s) 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 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	Limited Redistribution

a) Nokia grants Licensee a non-exclusive, royalty-free right to reproduce and distribute the object code form of Redistributables (listed in Appendix 1, Section 1) for execution on the specified Platforms, excluding the Deployment 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 a Qt or 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 a Qt or Qt-based product, and depends on the Licensed Software.

c) Licensee's distribution of Licensed Software and/or Modified Software or Applications on Deployment Platforms requires a separate distribution license from Nokia.  Notwithstanding the above limitation, Licensee may distribute the Application 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 either the Licensed Software or the Application.

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(s) 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, 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, Inc.
    555 Twin Dolphin Drive, Suite 280
    Redwood City, CA 94065 U.S.A.
    Fax:  +1 650 551 1851

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 governed by and construed in accordance with the federal laws of the United States of America and the internal laws of the State of New York without given effect to any choice of law rule that would result in the application of the laws of any other jurisdiction.  The United Nations Convention on Contracts for the International Sale of Goods (CISG) shall not apply.  Each Party (a) hereby irrevocably submits itself to and consents to the jurisdiction of the United States District Court for the Southern District of New York (or if such court lacks jurisdiction, the state courts of the State of New York) for the purposes of any action, claim, suit or proceeding between the Parties in connection with any controversy, claim, or dispute arising out of or relating to this Agreement; and (b) hereby waives, and agrees not to assert by way of motion, as a defense or otherwise, in any such action, claim, suit or proceeding, any claim that is not personally subject to the jurisdiction of such court(s), that the action, claim, suit or proceeding is brought in an inconvenient forum or that the venue of the action, claim, suit or proceeding is improper.  Notwithstanding the foregoing, nothing in this Section 13.10 is intended to, or shall be deemed to, constitute a submission or consent to, or selection of, jurisdiction, forum or venue for any action for patent infringement, whether or not such action relates to this Agreement.


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.

13.11 Government End Users

A "U.S. Government End User" shall mean any agency or entity of the government of the United States.  The following shall apply if Licensee is a U.S. Government End User.  The Licensed Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 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 the Licensed Software with only those rights set forth herein.  The Licensed Software (including related documentation) is provided to U.S. Government End Users: (a) only as a commercial end item; and (b) only pursuant to 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

