Free Art License


[ Copyleft Attitude ]

version 1.2

Preamble :

With this Free Art License, you are authorised to copy, distribute and freely
transform the work of art while respecting the rights of the originator.

Far from ignoring the author's rights, this license recognises them and
protects them. It reformulates their principle while making it possible for the
public to make creative use of the works of art. Whereas current literary and
artistic property rights result in restriction of the public's access to works
of art, the goal of the Free Art License is to encourage such access.

The intention is to make work accessible and to authorise the use of its
resources by the greatest number of people: to use it in order to increase its
use, to create new conditions for creation in order to multiply the
possibilities of creation, while respecting the originators in according them
recognition and defending their moral rights.

In fact, with the arrival of the digital age, the invention of the Internet and
free software, a new approach to creation and production has made its
appearance. It also encourages a continuation of the process of experimentation
undertaken by many contemporary artists.

Knowledge and creativity are resources which, to be true to themselves, must
remain free, i.e. remain a fundamental search which is not directly related to
a concrete application. Creating means discovering the unknown, means inventing
a reality without any heed to realism. Thus, the object(ive) of art is not
equivalent to the finished and defined art object.  This is the basic aim of
this Free Art License: to promote and protect artistic practice freed from the
rules of the market economy.

——– DEFINITIONS

- The work of art : A communal work which includes the initial artwork as well
  as all subsequent contributions (subsequent originals and copies). It is
created at the initiative of the original artist who, by this license, defines
the conditions according to which the contributions are made.

- The original work of art : This is the artwork created by the initiator of
  the communal work, of which copies will be modified by whosoever wishes.

- Subsequent works : These are the additions put forward by the artists who
  contribute to the formation of the work by taking advantage of the right to
reproduction, distribution and modification that this license confers on them.

- The Original (the work's source or resource) : A dated example of the work,
  of its definition, of its partition or of its program which the originator
provides as the reference for all future updatings, interpretations, copies or
reproductions.

- Copy : Any reproduction of an original as defined by this license.

- The author or the artist of the original work of art: This is the person who
  created the work which is at the heart of the ramifications of this modified
work of art. By this license, the author determines the conditions under which
these modifications are made.

- Contributor: Any person who contributes to the creation of the work of art.
  He is the author or the artist of an original art object resulting from the
modification of a copy of the initial artwork or the modification of a copy of
a subsequent work of art.

——–

1. AIMS

The aim of this license is to define the conditions according to which you can
use this work freely.

2. EXTENT OF THE USAGE

This work of art is subject to copyright, and the author, by this license,
specifies the extent to which you can copy, distribute and modify it.

2.1 FREEDOM TO COPY (OR OF REPRODUCTION)

You have the right to copy this work of art for your personal use, for your
friends or for any other person, by employing whatever technique you choose.

2.2 FREEDOM TO DISTRIBUTE, TO INTERPRET (OR OF REPRESENTATION)

You can freely distribute the copies of these works, modified or not, whatever
their medium, wherever you wish, for a fee or for free, if you observe all the
following conditions:
- attach this license, in its entirety, to the copies or indicate precisely
  where the license can be found,
- specify to the recipient the name of the author of the originals,
- specify to the recipient where he will be able to access the originals
  (original and subsequent). The author of the original may, if he wishes, give
you the right to broadcast/distribute the original under the same conditions as
the copies.

2.3 FREEDOM TO MODIFY

You have the right to modify the copies of the originals (original and
subsequent), partially or otherwise, respecting the conditions set out in
article 2.2 , in the event of distribution (or representation) of the modified
copy. The author of the original may, if he wishes, give you the right to
modify the original under the same conditions as the copies.

3. INCORPORATION OF ARTWORK

All the elements of this work of art must remain free, which is why you are not
allowed to integrate the originals (originals and subsequents) into another
work which would not be subject to this license.

4. YOUR AUTHOR'S RIGHTS

The object of this license is not to deny your author's rights on your
contribution. By choosing to contribute to the evolution of this work of art,
you only agree to give to others the same rights with regard to your
contribution as those which were granted to you by this license.

5. DURATION OF THE LICENCE

This license takes effect as of your acceptance of its provisions. The fact of
copying, distributing, or of modifying the work constitutes a tacit agreement.
This license will remain in force for as long as the copyright which is
attached to the work of art. If you do not respect the terms of this license,
you automatically lose the rights that it confers. If the legal status to which
you are subject makes it impossible for you to respect the terms of this
license, you may not make use of the rights which it confers.

6. VARIOUS VERSIONS OF THE LICENCE

This license may undergo periodic modifications to incorporate improvements by
its authors (instigators of the "copyleft attitude" movement) by way of new,
numbered versions.

You will have the choice of accepting the provisions contained in the version
under which the copy was communicated to you, or alternatively, to use the
provisions of one of the subsequent versions.

7. SUB-LICENSING

Sub-licenses are not authorized by the present license. Any person who wishes
to make use of the rights that it confers will be directly bound to the author
of the original work.

8. THE LAW APPLICABLE TO THIS CONTRACT

This license is subject to French law.

——–

DIRECTIONS FOR USE :

- How to use the Free Art license?

To benefit from the Free Art License, it is enough to specify the following on
your work of art:

[- A few lines to indicate the name of the work and to give an idea of what it
is.] [- A few lines to describe, if necessary, the modified work of art and
give the name of the author/artist.] Copyright © [the date] [name of the author
or artist] (if appropriate, specify the names of the previous authors or
artists) Copyleft: this work of art is free, you can redistribute it and/or
modify it according to terms of the Free Art license.  You will find a specimen
of this license on the site Copyleft Attitude http://artlibre.org as well as on
other sites.

- Why use the Free Art license?

1 / to give the greatest number of people access to your work.

2 / to allow it to be freely distributed.

3 / to allow it to evolve by authorising its transformation by others.

4 / to be able, yourself, to use the resources of a work when it is under Free
Art license: to copy, distribute or transform it freely.

5 / This is not all: because the use of the Free Art License is also a good way
to take liberties with the marketing system generated by the dominant economy.
The Free Art License offers a useful legal protocol to prevent abusive
appropriation. It will no longer be possible for someone to appropriate your
work, short-circuiting the creative process to make personal profit from it.
Helping yourself to a collective work in progress will be forbidden, as will
monopolising the resources of an evolving creation for the benefit of a few.

The Free Art License advocates an economy appropriate for art, based on
sharing, exchange and joyful giving. What counts in art is also and mostly what
is not counted.

- When to use the Free Art License ?

It is not the goal of the Free Art License to eliminate copyright or author's
rights. Quite the opposite, it is about reformulating the relevance of these
rights while taking today's environment into account. It is about the right to
freedom of movement, to free copying and to free transformation of works of
art. The right to work in freedom for art and artists.

1 / Each time you want to use or put this right into practice, use the Free Art
License.

2 / Each time you want to create works which can evolve and be freely copied,
freely distributed and freely transformed: use the Free Art License.

3 / Each time you want to have the possibility of copying, distributing or
transforming a work: check that it is under Free Art License. If it is not, you
are liable to be breaking the law.

- To which types of art can the Free Art License be applied?

This license can be applied to digital as well as to non-digital art. It was
born out of observation of the world of free software and the Internet, but its
applicability is not limited to the digital media. You can put a painting, a
novel, a sculpture, a drawing, a piece of music, a poem, an installation, a
video, a film, a recipe, a CD-rom, a Web site, or a performance under the Free
Art License, in short any creation which has some claim to be a work of art.

This license has a history: it was born at the meeting " Copyleft Attitude "
which took place at "Accès Local" and "Public" in Paris at the beginning of the
year 2000. For the first time, it brought computer specialists and freeware
activists together with contemporary artists and members of the art world.
