macOS Sequoia で rsync が openrsync に置換され一部スクリプトが機能しなくなった件
何もしてないのに壊れました(大嘘)。
事象
macOS アップデート後に、一部の rsync
コマンドによる転送が恒常的に失敗するようになりました。
[Receiver] buffer overflow: recv_rules (file=exclude.c, line=1396)
rsync error: error allocating core memory buffers (code 22) at util2.c(129) [Receiver=3.2.3]
rsync(86616): error: unexpected end of file
原因
Apple が、提供する rsync
の実装を差し替えたことに起因します (macOS 15.4 Sequoia から)。
Apple は macOS Sequoia で、rsync 2.6.9 を openrsync に置き換えました。これは、GPL オープンソースライセンスのいかなるバージョンも使用していない rsync の実装です。 openrsync は BSD ファミリーライセンス、特に ISC ライセンスの下にあります。 ISC ライセンスは寛容なライセンスであり、対象ソフトウェアの使用、変更、配布方法に最小限の制限を課します。つまり、Apple は rsync 3.x に関しては GPL v3 ライセンスの条項を遵守できないと判断しましたが、openrsync ではその条項を遵守できると判断したのです。
https://derflounder.wordpress.com/2025/04/06/rsync-replaced-with-openrsync-on-macos-sequoia/
これにより比較的新しい rsync の実装が macOS に(ようやく)もたらされましたが、困ったことに、openrsync は rsync(本流)のコマンドライン引数の一部が未実装であり、既存のコマンドが動作しない可能性があるのです。
私の場合は --delete-excluded
が問題を起こしていました。
対処法
本流の rsync
を Homebrew でインストールして使いましょう。
brew install rsync