Norwegian Licence for Open Government Data (NLOD) 2.0

Preface of licence

This licence grants you the right to copy, use and distribute information, provided you acknowledge the contributors and comply with the terms and conditions stipulated in this licence. By using information made available under this licence, you accept the terms and conditions set forth in this licence. As set out in Section 7, the licensor disclaims any and all liability for the quality of the information and what the information is used for.

This licence shall not impose any limitations on the rights or freedoms of the licensee under the Norwegian Freedom of Information Act or any other legislation granting the general public a right of access to public sector information, or that follow from exemptions or limitations stipulated in the Norwegian Copyright Act. Further, the licence shall not impose any limitations on the licensee’s freedom of expression recognized by law.

1. Definitions

     «Database» shall mean a database or similar protected under Section 43 of the Norwegian Copyright Act.
     «Information» shall mean texts, images, recordings, data sets or other works protected under Section 1 of the Norwegian Copyright Act, or which are protected under provisions addressing what is referred to as «neighbouring rights» in Chapter 5 of the Norwegian Copyright Act (including databases and photographs), and which are distributed under this licence.
     «Copy» shall mean reproduction in any form.
     «Licensee» and «you» shall mean natural or legal persons using information under this licence.
     «Licensor» shall mean the natural or legal person that makes information available under this licence.
     «Distribute» shall mean any actions whereby information is made available, including to distribute, transfer, communicate, disperse, show, perform, sell, lend and rent.
     «Use» shall mean one or more actions relevant to copyright law requiring permission from the owner of the copyright.

2. Licence
The licensee, subject to the limitations that follow from this licence, may use the information for any purpose and in all contexts, by:

     * copying the information and distributing the information to others,
     * modifying the information and/or combining the information with other information, and
     * copying and distributing such changed or combined information.

This is a non-exclusive, free, perpetual and worldwide licence. The information may be used in any medium and format known today and/or which will become known in the future. The Licensee shall not sub-license or transfer this licence.

3. Exemptions
The licence does not apply to and therefore does not grant a right to use:

     * information which contains personal data covered by the Norwegian Personal Data Act unless there is a legitimate basis for the disclosure and further processing of the personal data
     * information distributed in violation of a statutory obligation to observe confidentiality
     * information excluded from public disclosure pursuant to law, including information deemed sensitive under the Norwegian National Security Act
     * information subject to third party rights which the licensor is not authorised to license to the licensee
     * information protected by intellectual property rights other than copyright and neighbouring rights in accordance with Chapter 5 of the Norwegian Copyright Act, such as trademarks, patents and design rights, but this does not entail an impediment to use information where the licensor’s logo has been permanently integrated into the information or to attribute the origin of the information in accordance with the article below relating to attribution.

If the licensor has made available information not covered by the licence according to the above list, the licensee must cease all use of the information under the licence, and erase the information as soon as he or she becomes aware of or should have understood that the information is not covered by the licence.

4. Effects of breach of the licence
The licence is subject to the licensee’s compliance with the terms and conditions of this licence. In the event that the licensee commits a breach of this licence, this will entail that the licensee’s right to use the information will be revoked immediately without further notice. In case of such a breach, the licensee must immediately and without further notice take measures to cause the infringement to end. Because the right to use the information has been terminated, the licensee must cease all use of the information by virtue of the licence.

5. Attribution
The licensee shall attribute the licensor as specified by the licensor and include a reference to this licence. To the extent practically possible, the licensee shall provide a link to both this licence and the source of the information.

If the licensor has not specified how attributions shall be made, the licensee shall normally state the following: «Contains data under the Norwegian licence for Open Government data (NLOD) distributed by [name of licensor]».

If the licensor has specified that the information shall only be available under a specific version of this licence, cf. Section 10, the licensee shall also state this.

If the information has been changed, the licensee must clearly indicate that changes have been made by the licensee.

6. Proper use
The licensee shall not use the information in a manner that appears misleading nor present the information in a distorted or incorrect manner.
Neither the licensor’s nor other contributors' names or trademarks must be used to support, recommend or market the licensee or any products or services using the information.

7. Disclaimer of liability
The information is licensed «as is». The information may contain errors and omissions. The licensor provides no warranties, including relating to the content and relevance of the information.

The licensor disclaims any liability for errors and defects associated with the information to the maximum extent permitted by law.

The licensor shall not be liable for direct or indirect losses as a result of use of the information or in connection with copying or further distribution of the information.

8. Guarantees regarding data quality and accessibility
This licence does not prevent the licensor from issuing supplementary statements regarding expected or intended data quality and accessibility. Such statements shall be regarded as indicative in nature and not binding on the part of the licensor. The disclaimers in Section 7 also apply in full for such indicative statements. Based on separate agreement, the licensor may provide guarantees and distribute the information on terms and conditions different from those set forth in this licence.

9. Licence compatibility
If the licensee is to distribute an adapted or combined work based on information covered by this licence and some other work licensed under a licence compatible by contract, such distribution may be based on an appropriate licence compatible by contract, cf. the list below.

A licence compatible by contract shall mean the following licences:

     * for all information: Open Government Licence (version 1.0, 2.0 and 3.0), Creative Commons Attribution Licence (international version 4.0 and norwegian version 4.0),
     * for those parts of the information which do not constitute databases: Creative Commons Attribution Licence (generic version 1.0, 2.0, 2.5 and unported version 3.0) and Creative Commons Navngivelse 3.0 Norge,
     * for those parts of the information which constitute databases: Open Data Commons Attribution License (version 1.0).
     
This provision does not prevent other licences from being compatible with this licence based on their content.

10. New versions of the licence
The licensee may choose to use the information covered by this licence under any new versions of the Norwegian licence for Open Government data (NLOD) issued by the responsible ministry (currently the Ministry of Local Government and Modernisation) when these versions are final and official, unless the licensor when making the information available under this licence specifically has stated that solely version 2.0 of this licence may be used.

11. Governing law and legal venue
This licence, including its formation, and any disputes and claims arising in connection with or relating to this licence, shall be regulated by Norwegian law. The legal venue shall be the licensor’s ordinary legal venue. The licensor may, with regard to intellectual proprietary rights, choose to pursue a claim at other competent legal venues and/or based on the laws of the country where the intellectual property rights are sought enforced.
