diff --git a/projects/projects_2024-25/report-nicolas-fischer.md b/projects/projects_2024-25/report-nicolas-fischer.md new file mode 100644 index 0000000000000000000000000000000000000000..4a520fc8e993871b5f11ca37c3010473e9d97e88 --- /dev/null +++ b/projects/projects_2024-25/report-nicolas-fischer.md @@ -0,0 +1,64 @@ +# Contributing to an open source project: rsync + +| **Author** | Nicolas Fischer | +| ----------------------- | --------------------------------------------------------- | +| **Date** | 2024-10-28 | +| **NOMA** | 6529-20-00 | +| **Academic Year** | 2024-2025 | +| **Open Source Project** | [rsync](https://github.com/RsyncProject/rsync) | +| **Pull request made** | [pr#656](https://github.com/RsyncProject/rsync/pull/656) | +| **License** | [GPLv3](https://github.com/RsyncProject/rsync) | + +## Project: `rsync` + +`rsync` is a widely used open-source utility for fast file transfer and +synchronization. It can transfer files from one directory to another, whether on the +same disk or to another network computer, either using a rsync daemon or via a remote +shell like SSH. Known for its robustness and efficient file handling, `rsync` is +particularly effective for large data transfers. By comparing files and transferring +only the differences, it minimizes the amount of data sent over the network. This makes +rsync a go-to solution for local and remote backups, as well as for file and directory +mirroring and synchronization. + +### About the project + +`rsync` is an old software, created by two researchers in 1996. So, many things take +place via a mailing list, which looks more active than Github. + +Github reports 46 contributors, 337 forks and 2.9k stars. + +Releases are managed by one person, Wayne Davison. He is supported by another, +Andrew Tridgell. + +## My contribution + +I modified the source code to include `--` (the CLI option parse terminator) between +the remote shell command and before any `rsync` commands, changing the generated +command from: + +```sh +<rsh> [opts] <destination> rsync [opts] src dst +``` + +to: + +```sh +<rsh> [opts] <destination> -- rsync [opts] src dst +``` + +Effectively, this means that the remote shell will stop processing anything after `--` +and treat the rest as the command to send over the remote shell. + +## Motivation + +I chose to contribute to `rsync` because it was missing a feature I would like to have. +As a tool I use regularly and extensively, I strive to ensure it is compatible with +modern standards and modern remote shells. + +## Challenges + +As with any change in a world-spanning software, modifications should be as backwards +compatible as possible to ensure a smooth transition. I could put this issue to rest +as this convention was created by a very old C library, `getopts()`. + +The current challenge is to get the attention of the maintainers.