

OPERA SOFTWARE END-USER LICENSE AGREEMENT FOR OPERA DESKTOP BROWSER FOR OPEN SOURCE OPERATING SYSTEMS

BY ACCEPTING DELIVERY OF THE SOFTWARE AND/OR SERVICES, YOU (HEREINAFTER “USER”) ARE EXPRESSLY AGREEING TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT TO THE EXCLUSION OF ALL OTHER TERMS. IF THESE TERMS ARE CONSIDERED AN OFFER BY OPERA SOFTWARE, ASA (“Opera”), ACCEPTANCE IS EXPRESSLY LIMITED TO THESE TERMS.  OPERA IS WILLING TO MAKE THE SOFTWARE AVAILABLE TO USER ONLY UPON THE CONDITION THAT USER ACCEPTS THE TERMS OF THIS AGREEMENT. WRITTEN APPROVAL IS NOT A PREREQUISITE TO THE VALIDITY OR ENFORCEABILITY OF THIS AGREEMENT.

TERMS AND CONDITIONS.  This End-User License Agreement (the “Agreement”) is between User and Opera.  This Agreement governs User’s use of the Software provided to User by Opera, including any releases of or to the Software that User may receive from Opera, together with the documentation included therewith.

1.	DEFINITIONS.  For purposes of this Agreement, the following terms will have the following meanings:

1.1	“User” means the legal entity or person who orders or downloads the Software and/or activates the Services.

1.2	“Documentation” means the standard end-user technical documentation, specifications, materials and other information Opera supplies with the Software and/or Services.

1.3	“Services” means the various services to which Opera provides users with access, including without limitation, Opera Turbo, the My Opera community, the Opera Portal website, the Dev.Opera website, the Opera Add-ons website, Opera Unite, search services, personalized content and branded offering through its network of services that may be accessed through any various medium or device now known or hereafter developed.

1.4	“Software” means the proprietary Opera software products (in object code format only) delivered to User hereunder (including but not limited to the Opera browser ), together with any update or upgrade thereto, when and if made available to you by Opera.  Software does not include Third-Party Software.

1.5	“Third-Party Software” means the software of certain third parties that Opera may deliver with the Software, including but not limited to widgets or extensions of certain third parties and independent developers.

1.6	“Use” means to cause a computer system to execute any machine-executable portion of the Software in accordance with the Documentation or to make use of any Documentation or related materials in connection with the execution of any machine-executable portion of the Software

2.	LICENSE. Subject to the terms and conditions of this Agreement, Opera hereby grants User a limited, non-exclusive, non-transferable, non-sublicensable license: (i) to use the Services and to install and Use the Software supplied to User hereunder, as installed on your personal computer, including your laptop, desktop or on computers within User's organization; and (ii) to reproduce and distribute the Software without modification, provided that any such reproduction or distribution of the Software by User: (i) must be in an application repository for a desktop Open Source OS distribution (expressly excluding distribution for embedded Open Source OS); (ii) must be made available free of charge for end-users; (iii) must be subject to and distributed with a copy of this Agreement; and (iv) no automatic modification of the default search engines in the Software settings is done at any time, including but not limited to after the Software is installed.

3.	LICENSE RESTRICTIONS AND THIRD-PARTY SOFTWARE.

3.1	User shall not and shall not allow any third party to: (a) use the Software or Services except as expressly permitted under Section 2; (b) separate the component programs of the Software for use on different computers; (c) adapt, alter, publicly display, publicly perform, translate, embed into any other product, or otherwise create derivative works of, or otherwise modify the Software or Services; (d) sublicense, lease, rent, loan, or distribute the Software or Services to any third party; (e) transfer the Software or Services to any third party; (f) reverse engineer, decompile, disassemble, or otherwise attempt to derive the source code for the Software, (i) except as permitted by applicable law, or (ii) solely to the extent required to debug changes to any third party LGPL-libraries linked to by the Software; (g) remove, alter or obscure any proprietary notices on the Software or Services, or the applicable documentation therefore; or (h) allow third parties to access or use the Software or Services, including without limitation any use in any application service provider environment, service bureau, or time-sharing arrangements.

3.2	Third-Party Software is subject to separate terms and conditions included with, or contained in the setup installation segments of such Third-Party Software.  The license restrictions contained in this Agreement do not apply to Third-Party Software to the extent they are inconsistent with such Third-Party Software terms. . Opera shall not be responsible for any Third Party Software.

4.	USE OF SERVICES

4.1	Opera provides users with access to a rich collection of resources and Services, including without limitation various communications tools, forums such as the “My Opera” community site, and personalized content through its network of services which may be accessed through any various medium or device now known or hereafter developed.  Certain features of these Services may allow User to post or send content that can be viewed by others (“User-Generated Content”).  User agrees that Opera is not liable for User-Generated Content that is provided by others. Opera has no duty to pre-screen User-Generated Content, but Opera has the right to refuse to post, edit, or deliver submitted User-Generated Content. Opera reserves the right to remove User-Generated Content for any reason, but Opera is not responsible for any failure or delay in removing such material. Opera reserves the right to block any user's access to any content, website or webpage that Opera provides in our sole discretion.

4.2	Disputes may arise between User and others or between User and Opera related to content, including User-Generated Content.  Such disputes could involve, among other things, the use or misuse of domain names; the infringement of copyrights, trademarks, or other rights in intellectual property; defamation; fraud; the use or misuse of information; and problems with online auction or commerce transactions. User agrees that all claims, disputes or wrongdoing that result from, or are related in any way to, the content of information that User posts, transmits, re-transmits or receives through the Services, Opera's network or Software are User’s sole and exclusive responsibility. Opera may at its discretion block certain websites or domains and re-route you to other pages.

4.3	The use of several of the Services, including Opera Link, requires that User is a registered Opera ID user. You can register for an Opera ID without any charge at http://my.opera.com/. Opera Link allows User to synchronize some data, such as bookmarks, among their Opera for desktop, Opera Mobile, Opera Mini Web browsers and through the Opera Link API. The Terms of Service for the Services is found at http://my.opera.com/community/terms-of-service/, and is incorporated in this Agreement by reference.

4.4	Opera reserves the right at any time and from time to time to modify or discontinue, temporarily or permanently, the Services (or any part thereof) with or without notice. User agrees that Opera shall not be liable to User or to any third-party for any modification, suspension or discontinuance of the Services.

4.5	Without limiting the applicability of the foregoing general terms, the following terms and conditions apply for the specific services discussed below.

4.5.1	Opera Turbo:  When Opera Turbo is enabled, it will request normal web content through an Opera Software proxy server.  Opera Turbo will exclude webpages located on an intranet or using secure connections (HTTPS).  The browsing experience may change due to increased webpage loading speeds when using Opera Turbo. Opera reserves the right to change, limit usage of, charge for continued usage of (of course require User to opt in before incurring any charges), and/or discontinue the Opera Turbo service at any point in time.  Furthermore, Opera reserves the right to revise the terms of the Opera Turbo service, which may include making the Opera Turbo service subject to a separate agreement.

4.5.2	Opera Unite: Opera Unite is a service whereby Opera provides users with a web-browser communication that allows User  to share content, collaborate, and interact with others. Certain features of Opera Unite allow User to post and send content and/or links to User-Generated Content stored on User’s computer, which can be viewed and/or accessed by others. The content is not stored by Opera, and Opera exercises no control over User-Generated Content passing through its network or equipment or available on or through the Services. User agrees that Opera is not liable for any loss of data.  User may only post or send via the Services User-Generated Content that User created or that User has permission to send and/or post.  User agrees not to use Opera Unite to upload, transfer or otherwise make available files, images, code, materials, or other information or content that is obscene, vulgar, hateful, threatening, or that violates any laws or third-party rights, hereunder but not limited to third-party intellectual property rights. Opera reserves the right to terminate User’s account if User use Opera Unite to transmit copyrighted material unlawfully without a license, valid defense or fair use privilege to do so. Opera does not claim ownership of any User-Generated Content.  However, by submitting User-Generated Content to Opera, User grants Opera the right and limited license to use, copy, display, perform, distribute and adapt this User-Generated Content for the purpose of carrying out the Services.

5.	PROPRIETARY RIGHTS.  User acknowledges and agrees that the Services and the Software, including without limitation the Software’s sequence, structure, organization, source code and applicable documentation contains valuable trade secrets and other intellectual property of Opera and its suppliers and is considered Opera’s confidential information.  The Software and Services are licensed and not sold to User, and no title or ownership to such Software or Services or the intellectual property rights embodied therein passes as a result of this Agreement or any act pursuant to this Agreement.  The Software and Services and all intellectual property rights therein are the exclusive property of Opera and its suppliers, and all rights in and to the Software and Services not expressly granted to User in this Agreement are reserved.  Opera owns all copies of the Software, however made.  Nothing in this Agreement will be deemed to grant, by implication, estoppel or otherwise, a license under any existing or future patents of Opera, except to the extent necessary for User to use the Software or Services as expressly permitted under this Agreement.

6.	PRIVACY.  Opera takes the matters of protection and security of its users information very seriously and will treat any and all such information in accordance with the Opera Privacy Statement, which is located at www.opera.com/privacy, and incorporated into this Agreement by this reference.

7.	TERM AND TERMINATION.  The term of this Agreement will commence upon User’s download of the Software and/or User’s commencement of the Services and, unless earlier terminated as provided in this Section 7, will continue in perpetuity.  This Agreement will immediately terminate upon User’s breach of this Agreement, unless such breach is curable and is actually and immediately cured by User after Opera provides notice of breach to User.  Upon the termination of this Agreement, User will discontinue all use of the Software and/or Services, promptly destroy or have destroyed the Software and any copies thereof, and, upon request by Opera, certify in writing to Opera that such destruction has taken place.  These remedies are cumulative and in addition to any other remedies available to Opera.  Sections 1, 3, 5, 6, 7, 8, 9, 10, 11, and 12, shall survive such termination.

8.	DISCLAIMER OF WARRANTIES.  THE SOFTWARE AND SERVICES ARE PROVIDED “AS IS,” AND ALL WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, AND STATUTORY, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR USE, ACCURACY OR COMPLETENESS, SATISFACTORY QUALITY, AND QUIET ENJOYMENT, OR OTHER WARRANTIES OR CONDITIONS ARISING BY STATUTE, OPERATION OR LAW, COURSE OF DEALING, USAGE OF TRADE OR OTHERWISE ARE HEREBY DISCLAIMED.  SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE LIMITATIONS MAY NOT APPLY TO USER.  OPERA DOES NOT WARRANT THAT THE USE OF THE SOFTWARE OR SERVICES WILL BE UNINTERRUPTED OR ERROR FREE OR THAT THE SOFTWARE OR SERVICES DO NOT CONTAIN ANY VIRUSES.  THIS WARRANTY DISCLAIMER IS A FUNDAMENTAL ELEMENT OF THE BASIS OF THE BARGAIN BETWEEN USER AND OPERA.  OPERA WOULD NOT PROVIDE THE SOFTWARE OR SERVICES ABSENT SUCH DISCLAIMER. NO REPRESENTATIONS OR WARRANTIES ARE MADE BY ANY SUPPLIERS TO OPERA UNDER OR BY VIRTUE OF THIS AGREEMENT.

9.	LIMITATION OF LIABILITY.  IN NO EVENT SHALL OPERA BE LIABLE FOR ANY INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR INDIRECT DAMAGES OF ANY KIND (INCLUDING WITHOUT LIMITATION DAMAGES FOR INTERRUPTION OF BUSINESS, LOST DATA, LOST PROFITS, OR THE LIKE) REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT (INCLUDING WITHOUT LIMITATION NEGLIGENCE), STRICT PRODUCT LIABILITY, OR OTHER THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  IN NO EVENT WILL THE CUMULATIVE LIABILITY OF OPERA ARISING OUT OF OR RELATED TO THIS AGREEMENT EXCEED THE AMOUNT PAID TO OPERA IN RESPECT OF THE SOFTWARE GIVING RISE TO THE CLAIM OR IF NO FEES WERE PAID THEN FIVE HUNDRED EUROS.  SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE FOREGOING EXCLUSION AND LIMITATION MAY NOT APPLY TO USER.  THIS LIMITATION OF LIABILITY WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY SET FORTH HEREIN.  IN NO EVENT WILL ANY SUPPLIER TO OPERA HAVE ANY LIABILITY TO USER UNDER THIS AGREEMENT.  THIS LIMITATION OF LIABILITY IS A FUNDAMENTAL ELEMENT OF THE BASIS OF THE BARGAIN BETWEEN USER AND OPERA.  OPERA WOULD NOT PROVIDE THE SOFTWARE TO USER ABSENT SUCH LIMITATION.

10.	NOTICES.  All notices required under this Agreement will be given as follows: (a) in the case of notices to Opera, by certified mail, return receipt requested, to the following address: Chief Operating Officer, Opera Software ASA, Waldemar Thranes gate 98, 0175 Oslo, Norway, such notice to be deemed effective upon receipt by Opera; and (b) in the case of notices to User, by email to the email address that User provided to Opera prior to initiating the download of the Software or start of the Services, such notice to be deemed effective upon the earlier of (i) twenty-four (24) hours after sending, or (ii) User’s actual receipt of any such e-mail.

11.	INJUNCTIVE RELIEF.  User acknowledges and agrees that the Software and Services contain valuable trade secrets, confidential information and proprietary information of Opera.  User further acknowledge that any actual or threatened breach or violation of Section 2 or Section 3 of this Agreement will constitute immediate, irreparable harm to Opera for which monetary damages would be an inadequate remedy, and that injunctive relief is an appropriate remedy for any such breach or violation.

12.	GENERAL.  User acknowledges and agrees that the Software may contain cryptographic functionality the export of which is restricted under applicable export control law.  User will comply with all applicable laws and regulations in User’s activities under this Agreement.  User will not export or re-export the Software in violation of such laws or regulations or without all required licenses and authorizations. This Agreement will be governed by the laws of Norway without giving effect to any conflicts of law principles that may require the application of the laws of a different country.  The United Nations Convention on Contracts for the International Sale of Goods does not apply to this Agreement.  All actions or proceedings arising under or related to this Agreement must be brought in the Oslo City Court, and each party hereby agrees to irrevocably submit to the jurisdiction and venue of any such court in all such actions or proceedings.  If any provision of this Agreement is determined by a court of competent jurisdiction to be invalid, illegal, or unenforceable, the remaining provisions of this Agreement shall not be affected or impaired thereby.  User may not assign or transfer this Agreement without obtaining Opera’s prior written consent, and any purported assignment or transfer in violation of this Section 12 will be null and void. Opera may update the terms of this Agreement if and when User install and update or upgrade to the Software and/or Services.  User will be responsible for all of User’s access and data charges from User’s Internet service provider or mobile operator. Applications User downloads or that are made available to User may automatically connect to the Internet to update information or provide a service to User.
