Porting to Rust
I plan to replace the current C implementation of waypipe with a slightly different Rust implementation. The latter is still in progress and available at the following repository; once stable enough I plan to merge the two git repositories together and adjust the build system accordingly. The C implementation will be kept in the repository in case there are systems where Rust will not build.
https://gitlab.freedesktop.org/mstoeckl/waypipe-test
Why? In short, Waypipe parses data that it receives from the network and does some multi-threaded processing controlled by that data; doing this in C in a safe fashion requires too much fuzzing/testing/review work.
Planned differences:
- Using Vulkan for dmabuf operations instead of libgbm (Vulkan can be faster and works better with explicit sync, although it is not supported on older hardware.)
- Dropping reconnection support, as I think Waypipe is the wrong layer to put this at. (Use transport-layer or application-layer reconnection instead.)
- Using libavcodec's Vulkan's hardware video encoding/decoding instead of vaapi
- Possibly reduce video format support to h264 and vp9; av1 will be added back later
- Assuming little-endian wire format throughout; on big endian systems, use https://gitlab.freedesktop.org/mstoeckl/wswapendian to adjust
- License change from MIT to GPLv3, for Rust implementation code only