CONTRIBUTING TO THE OPENVPN PROJECT
===================================

Patches should be written against the Git "master" branch. Some patches may get
backported to a release branch.

The preferred procedure is to send patches to the "openvpn-devel" mailing list:

- https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Instead of directly sending patches to the list you can also create an account
in our instance of the Gerrit review tool: https://gerrit.openvpn.net/
See https://community.openvpn.net/Development/GerritBestPractices.

While we do not merge GitHub pull requests as-is, we do allow their use for code
review purposes. After the patch has been ACKed (reviewed and accepted), it must
be sent to the mailing list. This last step does not necessarily need to be done
by the patch author, although that is definitely recommended.

When sending patches to "openvpn-devel" the subject line should be prefixed with
``[PATCH]``. To avoid merging issues the patches should be generated with
git-format-patch or sent using git-send-email. Try to split large patches into
small, atomic pieces to make reviews easier.

Please make sure that the source code formatting follows the guidelines at
https://community.openvpn.net/Development/CodeStyle. Automated checking can be
done with clang-format (https://community.openvpn.net/Development/CodeStyle)
and the configuration file which can be found in the git repository at ``.clang-format``.

There is also a git pre-commit hook script, which runs clang-format automatically
each time you commit and lets you format your code conveniently, if needed.
To install the hook simply run: ``dev-tools/git-pre-commit-format.sh install``

If you want quick feedback on a patch before sending it to openvpn-devel mailing
list, you can visit the #openvpn-devel channel on irc.libera.chat. Note that
you need to be logged in to Libera to join the channel:

- https://libera.chat/guides/registration

More detailed contribution instructions are available here:

- https://community.openvpn.net/Development/DeveloperDocumentation

Note that the process for contributing to other OpenVPN projects such as
openvpn-build, openvpn-gui, tap-windows6 and easy-rsa may differ from what was
described above. Please refer to the contribution instructions of each
respective project.
