sozu/CONTRIBUTING.md

2.7 KiB

Contributing to sōzu

Thank you for your interest in sōzu, you're very welcome here!

This is a young project, and things are still a bit in flux, so there are a lot of opportunities to learn and have a great impact on the project. We marked some issues as easy for first contributors, please check them out!

Communication

Most of the discussion around the project happens in the issues, so please check the list there. You can also reach out on Gitter.

Navigating the source

The proxy is designed to have a minimal core that you drive through external tooling. There are 4 Rust crates in the repository:

  • lib is the event loop handling network communication and parsing. Workers are small wrappers around this
  • bin is the main executable, providing a master/workers multiprocess architecture and exposing a unix socket to receive configuration changes. It also contains the command line.
  • command is a library wrapping the communication protocol of the unix socket. You'd typically use it to make tools to drive the proxy

The easiest way to contribute would be to work on the command line (cli.rs) or on external tools using the command library. lib can be complex since you need familiarity with the event loop handling, but the parsers and protocol are well separated. bin is mostly plumbing to handle command line options, handle workers and dispatching orders from the socket.

Debugging

If the bug or feature you are exploring is linked to the HTTP or TLS implementation, you can reuse directly the code of one of the examples, they allow you to use the proxy without the overhead of the worker system.

Otherwise, the proxy uses the log crate and follows the RUST_LOG environment variable convention, so you can precisely trace what happens.

We (Clever Cloud) will ask you to sign a copyright assignment agreement before accepting your code into the project. In short, the agreement allows us to change the license of the project (currently in AGPL 3) if needed. You can of course keep using the published version of sōzu with your contribution as AGPL 3.

We ask this because we might run an internal fork of sōzu on our infrastructure with changes that make no sense for public use.

Copyright assignment is handled through the CLA assistant bot, which will ask you in a pull request to accept the agreement.