Wayland protocols
-----------------

wayland-protocols contains Wayland protocols that add functionality not
available in the Wayland core protocol. Such protocols either add
completely new functionality, or extend the functionality of some other
protocol either in Wayland core, or some other protocol in
wayland-protocols.

A protocol in wayland-protocols consists of a directory containing a set
of XML files containing the protocol specification, and a README file
containing detailed state and a list of maintainers.

Protocol directory tree structure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Protocols may be 'stable', 'unstable' or 'deprecated', and the interface
and protocol names as well as place in the directory tree will reflect
this.

A stable protocol is a protocol which has been declared stable by
the maintainers. Changes to such protocols will always be backward
compatible.

An unstable protocol is a protocol currently under development and this
will be reflected in the protocol and interface names. See <<Unstable
naming convention>>.

A deprecated protocol is a protocol that has either been replaced by some
other protocol, or declared undesirable for some other reason. No more
changes will be made to a deprecated protocol.

Depending on which of the above states the protocol is in, the protocol
is placed within the toplevel directory containing the protocols with the
same state. Stable protocols are placed in the +stable/+ directory,
unstable protocols are placed in the +unstable/+ directory, and
deprecated protocols are placed in the +deprecated/+ directory.

Protocol development procedure
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To propose a new protocol, create a patch adding the relevant files and
Makefile.am entry to the wayland-protocols git repository with the
explanation and motivation in the commit message. Then send the patch to
the wayland-devel@lists.freedesktop.org mailing list using
'git send-email' with the subject prefix 'RFC wayland-protocols' or
'PATCH wayland-protocols' depending on what state the protocol is in.

To propose changes to existing protocols, create a patch with the
changes and send it to the list mentioned above while also CC:ing the
maintainers mentioned in the README file. Use the same rule for adding a
subject prefix as above and method for sending the patch.

If the changes are backward incompatible changes to an unstable protocol,
see <<Unstable protocol changes>>.

Interface naming convention
~~~~~~~~~~~~~~~~~~~~~~~~~~~
All protocols should avoid using generic namespaces or no namespaces in
the protocol interface names in order to minimize risk that the generated
C API collides with other C API. Interface names that may collide with
interface names from other protocols should also be avoided.

For generic protocols not limited to certain configurations (such as
specific desktop environment or operating system) the +wp_+ prefix
should be used on all interfaces in the protocol.

For operating system specific protocols, the interfaces should be
prefixed with both +wp_+ and the operating system, for example
+wp_linux_+, or +wp_freebsd_+, etc.

Unstable naming convention
~~~~~~~~~~~~~~~~~~~~~~~~~~
Unstable protocols have a special naming convention in order to make it
possible to make discoverable backward incompatible changes.

An unstable protocol has at least two versions: the major version, which
represents backward incompatible changes, and the minor version, which
represents backward compatible changes to the interfaces in the protocol.

The major version is part of the XML file name, the protocol name in the
XML, and interface names in the protocol.

Minor versions are the version attributes of the interfaces in the XML.
There may be more than one minor version per protocol, if there are more
than one global.

The XML file and protocol name also has the word 'unstable' in them, and
all of the interfaces in the protocol are prefixed with +z+ and
suffixed with the major version number.

For example, an unstable protocol called foo-bar with major version 2
containing the two interfaces wp_foo and wp_bar both minor version 1 will
be placed in the directory +unstable/foo-bar/+ consisting of one file
called +README+ and one called +foo-bar-unstable-v2.xml+. The XML file
will consist of two interfaces called +zwp_foo_v2+ and +zwp_bar_v2+ with
the +version+ attribute set to +1+.

Unstable protocol changes
~~~~~~~~~~~~~~~~~~~~~~~~~
During the development of a new protocol it is possible that backward
incompatible changes are needed. Such a change needs to be represented
in the major and minor versions of the protocol.

Assuming a backward incompatible change is needed, the procedure for how to
do so is the following:

  . Make a copy of the XML file with the major version increased by +1+.
  . Increase the major version number in the protocol XML by +1+.
  . Increase the major version number in all of the interfaces in the
    XML by +1+.
  . Reset the minor version number (interface version attribute) of all
    the interfaces to +1+.

Backward compatible changes within a major unstable version can be done
in the regular way as done in core Wayland or in stable protocols.

Declaring a protocol stable
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once it is decided that a protocol should be declared stable, meaning no
more backward incompatible changes will ever be allowed, one last
breakage is needed.

The procedure of doing this is the following:

  . Create a new directory in the +stable/+ toplevel directory with the
    same name as the protocol directory in the +unstable/+ directory.
  . Copy the final version of the XML that is the version that was
    decided to be declared stable into the new directory. The target name
    should be the same name as the protocol directory but with the +.xml+
    suffix.
  . Rename the name of the protocol in the XML by removing the
    'unstable' part and the major version number.
  . Remove the +z+ prefix and the major version number suffix from all
    of the interfaces in the protocol.
  . Reset all of the interface version attributes to +1+.
  . Update the +README+ file in the unstable directory and create a new
    +README+ file in the new directory.

Releases
~~~~~~~~
Each release of wayland-protocols finalizes the version of the protocols
to their state they had at that time.
