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!
Most of the discussion around the project happens in the issues, so please check the list there. You can also reach out on Gitter.
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 thisbin
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.
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.