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.
The proxy is designed to have a minimal core that you drive through external tooling. The Cargo workspace ships four crates:
libis the event loop handling network communication and parsing. Workers are small wrappers around this.binis the main executable, providing a master/workers multiprocess architecture and exposing a unix socket to receive configuration changes. It also contains the command-line interface.commandis a library wrapping the communication protocol of the unix socket. You'd typically use it to make tools to drive the proxy.e2eis the integration test harness that spawns real workers plus mock clients and backends.
The fuzz/ crate (cargo-fuzz targets fuzz_frame_parser, fuzz_hpack_decoder) lives outside the Cargo workspace and is built with cargo +nightly fuzz from inside fuzz/.
The easiest way to contribute would be to work on the command-line interface (bin/src/ctl/) 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 protocols are well separated. bin is
mostly plumbing to handle command-line options, supervise workers, and dispatch
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.