European Union Public Licence V.1.0

EUPL (c) the European Community 2007

This European Union Public Licence (the “EUPL”) applies to the Work or
Software (as defined below) which is provided under the terms of this Licence.
Any use of the Work, other than as authorised under this Licence is prohibited
(to the extent such use is covered by a right of the copyright holder of the
Work).

The Original Work is provided under the terms of this Licence when the
Licensor (as defined below) has placed the following notice immediately
following the copyright notice for the Original Work:

Licensed under the EUPL V.1.0

or has expressed by any other mean his willingness to license under the EUPL.

1. Definitions 

In this Licence, the following terms have the following meaning:

− The Licence: this Licence.

− The Original Work or the Software: the software distributed and/or
communicated by the Licensor under this Licence, available as Source Code and
also as Executable Code as the case may be.

− Derivative Works: the works or software that could be created by the
Licensee, based upon the Original Work or modifications thereof. This Licence
does not define the extent of modification or dependence on the Original Work
required in order to classify a work as a Derivative Work; this extent is
determined by copyright law applicable in the country mentioned in Article 15.

− The Work: the Original Work and/or its Derivative Works.

− The Source Code: the human-readable form of the Work which is the most
convenient for people to study and modify.

− The Executable Code: any code which has generally been compiled and which is
meant to be interpreted by a computer as a program.

− The Licensor: the natural or legal person that distributes and/or
communicates the Work under the Licence.

− Contributor(s): any natural or legal person who modifies the Work under the
Licence, or otherwise contributes to the creation of a Derivative Work.

− The Licensee or “You”: any natural or legal person who makes any usage of
the Software under the terms of the Licence. − Distribution and/or
Communication: any act of selling, giving, lending, renting, distributing,
communicating, transmitting, or otherwise making available, on-line or off-
line, copies of the Work at the disposal of any other natural or legal person.

2. Scope of the rights granted by the Licence 

The Licensor hereby grants You a world-wide, royalty-free, non-exclusive, sub-
licensable licence to do the following, for the duration of copyright vested
in the Original Work:

− use the Work in any circumstance and for all usage,

− reproduce the Work,

− modify the Original Work, and make Derivative Works based upon the Work,

− communicate to the public, including the right to make available or display
the Work or copies thereof to the public and perform publicly, as the case may
be, the Work,

− distribute the Work or copies thereof,

− lend and rent the Work or copies thereof,

− sub-license rights in the Work or copies thereof.

Those rights can be exercised on any media, supports and formats, whether now
known or later invented, as far as the applicable law permits so.

In the countries where moral rights apply, the Licensor waives his right to
exercise his moral right to the extent allowed by law in order to make
effective the licence of the economic rights here above listed.

The Licensor grants to the Licensee royalty-free, non exclusive usage rights
to any patents held by the Licensor, to the extent necessary to make use of
the rights granted on the Work under this Licence.

3. Communication of the Source Code 

The Licensor may provide the Work either in its Source Code form, or as
Executable Code. If the Work is provided as Executable Code, the Licensor
provides in addition a machinereadable copy of the Source Code of the Work
along with each copy of the Work that the Licensor distributes or indicates,
in a notice following the copyright notice attached to the Work, a repository
where the Source Code is easily and freely accessible for as long as the
Licensor continues to distribute and/or communicate the Work.

4. Limitations on copyright 

Nothing in this Licence is intended to deprive the Licensee of the benefits
from any exception or limitation to the exclusive rights of the rights owners
in the Original Work or Software, of the exhaustion of those rights or of
other applicable limitations thereto.

5. Obligations of the Licensee 

The grant of the rights mentioned above is subject to some restrictions and
obligations imposed on the Licensee. Those obligations are the following:

Attribution right: the Licensee shall keep intact all copyright, patent or
trademarks notices and all notices that refer to the Licence and to the
disclaimer of warranties. The Licensee must include a copy of such notices and
a copy of the Licence with every copy of the Work he/she distributes and/or
communicates. The Licensee must cause any Derivative Work to carry prominent
notices stating that the Work has been modified and the date of modification.

Copyleft clause: If the Licensee distributes and/or communicates copies of the
Original Works or Derivative Works based upon the Original Work, this
Distribution and/or Communication will be done under the terms of this
Licence. The Licensee (becoming Licensor) cannot offer or impose any
additional terms or conditions on the Work or Derivative Work that alter or
restrict the terms of the Licence.

Compatibility clause: If the Licensee Distributes and/or Communicates
Derivative Works or copies thereof based upon both the Original Work and
another work licensed under a Compatible Licence, this Distribution and/or
Communication can be done under the terms of this Compatible Licence. For the
sake of this clause, “Compatible Licence” refers to the licences listed in the
appendix attached to this Licence. Should the Licensee’s obligations under the
Compatible Licence conflict with his/her obligations under this Licence, the
obligations of the Compatible Licence shall prevail.

Provision of Source Code: When distributing and/or communicating copies of the
Work, the Licensee will provide a machine-readable copy of the Source Code or
indicate a repository where this Source will be easily and freely available
for as long as the Licensee continues to distribute and/or communicate the
Work.

Legal Protection: This Licence does not grant permission to use the trade
names, trademarks, service marks, or names of the Licensor, except as required
for reasonable and customary use in describing the origin of the Work and
reproducing the content of the copyright notice.

6. Chain of Authorship 

The original Licensor warrants that the copyright in the Original Work granted
hereunder is owned by him/her or licensed to him/her and that he/she has the
power and authority to grant the Licence.

Each Contributor warrants that the copyright in the modifications he/she
brings to the Work are owned by him/her or licensed to him/her and that he/she
has the power and authority to grant the Licence.

Each time You, as a Licensee, receive the Work, the original Licensor and
subsequent Contributors grant You a licence to their contributions to the
Work, under the terms of this Licence.

7. Disclaimer of Warranty 

The Work is a work in progress, which is continuously improved by numerous
contributors. It is not a finished work and may therefore contain defects or
“bugs” inherent to this type of software development.

For the above reason, the Work is provided under the Licence on an “as is”
basis and without warranties of any kind concerning the Work, including
without limitation merchantability, fitness for a particular purpose, absence
of defects or errors, accuracy, non-infringement of intellectual property
rights other than copyright as stated in Article 6 of this Licence.

This disclaimer of warranty is an essential part of the Licence and a
condition for the grant of any rights to the Work.

8. Disclaimer of Liability 

Except in the cases of wilful misconduct or damages directly caused to natural
persons, the Licensor will in no event be liable for any direct or indirect,
material or moral, damages of any kind, arising out of the Licence or of the
use of the Work, including without limitation, damages for loss of goodwill,
work stoppage, computer failure or malfunction, loss of data or any commercial
damage, even if the Licensor has been advised of the possibility of such
damage. However, the Licensor will be liable under statutory product liability
laws as far such laws apply to the Work.

9. Additional agreements 

While distributing the Original Work or Derivative Works, You may choose to
conclude an additional agreement to offer, and charge a fee for, acceptance of
support, warranty, indemnity, or other liability obligations and/or services
consistent with this Licence. However, in accepting such obligations, You may
act only on your own behalf and on your sole responsibility, not on behalf of
the original Licensor or any other Contributor, and only if You agree to
indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against such Contributor by the fact You have
accepted any such warranty or additional liability.

10. Acceptance of the Licence 

The provisions of this Licence can be accepted by clicking on an icon “I
agree” placed under the bottom of a window displaying the text of this Licence
or by affirming consent in any other similar way, in accordance with the rules
of applicable law. Clicking on that icon indicates your clear and irrevocable
acceptance of this Licence and all of its terms and conditions.

Similarly, you irrevocably accept this Licence and all of its terms and
conditions by exercising any rights granted to You by Article 2 of this
Licence, such as the use of the Work, the creation by You of a Derivative Work
or the Distribution and/or Communication by You of the Work or copies thereof.

11. Information to the public 

In case of any Distribution and/or Communication of the Work by means of
electronic communication by You (for example, by offering to download the Work
from a remote location) the distribution channel or media (for example, a
website) must at least provide to the public the information requested by the
applicable law regarding the identification and address of the Licensor, the
Licence and the way it may be accessible, concluded, stored and reproduced by
the Licensee.

12. Termination of the Licence 

The Licence and the rights granted hereunder will terminate automatically upon
any breach by the Licensee of the terms of the Licence.

Such a termination will not terminate the licences of any person who has
received the Work from the Licensee under the Licence, provided such persons
remain in full compliance with the Licence.

13. Miscellaneous 

Without prejudice of Article 9 above, the Licence represents the complete
agreement between the Parties as to the Work licensed hereunder.

If any provision of the Licence is invalid or unenforceable under applicable
law, this will not affect the validity or enforceability of the Licence as a
whole. Such provision will be construed and/or reformed so as necessary to
make it valid and enforceable.

The European Commission may put into force translations and/or binding new
versions of this Licence, so far this is required and reasonable. New versions
of the Licence will be published with a unique version number. The new version
of the Licence becomes binding for You as soon as You become aware of its
publication.

14. Jurisdiction 

Any litigation resulting from the interpretation of this License, arising
between the European Commission, as a Licensor, and any Licensee, will be
subject to the jurisdiction of the Court of Justice of the European
Communities, as laid down in article 238 of the Treaty establishing the
European Community.

Any litigation arising between Parties, other than the European Commission,
and resulting from the interpretation of this License, will be subject to the
exclusive jurisdiction of the competent court where the Licensor resides or
conducts its primary business.

15. Applicable Law 

This Licence shall be governed by the law of the European Union country where
the Licensor resides or has his registered office.

This licence shall be governed by the Belgian law if:

− a litigation arises between the European Commission, as a Licensor, and any
Licensee;

− the Licensor, other than the European Commission, has no residence or
registered office inside a European Union country.


Appendix

“Compatible Licences” according to article 5 EUPL are:

− General Public License (GPL) v. 2

− Open Software License (OSL) v. 2.1, v. 3.0

− Common Public License v. 1.0

− Eclipse Public License v. 1.0

− Cecill v. 2.0

