名古屋出身ソフトウェアエンジニアのブログ

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