{
  "added_at": "2026-11-09",
  "additional_evidence_urls": [
    "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/rsync.5",
    "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/regress/functional/test00_simple.test",
    "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/regress/functional/lib.sh",
    "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/regress/functional/conf.sh",
    "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/LICENSE.md"
  ],
  "category": "reconstruction-cases",
  "class": "software",
  "description_en": "An ISC-licensed rsync that copies a directory and checks the result. regress/functional/test00_simple.test builds dir1/one.txt, an expected tree under dir2, runs openrsync -a from dir1 to dir3, and compare_trees diffs the listings and file contents.",
  "description_zh": "一个 ISC 许可的 rsync 实现，复制目录并核对结果。regress/functional/test00_simple.test 生成 dir1/one.txt 和 dir2 下的预期目录树，用 openrsync -a 把 dir1 复制到 dir3，再由 compare_trees 比较目录清单和文件内容。",
  "entry_url": "https://awesomerea.org/resources/openrsync-protocol-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/openrsync-protocol-case/",
  "evidence_url": "https://github.com/kristapsdz/openrsync/blob/8235c68f11b4fad5e24849a01d04ea153c29ee28/README.md",
  "group": "cases",
  "id": "openrsync-protocol-case",
  "json_url": "https://awesomerea.org/resources/openrsync-protocol-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/openrsync-protocol-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/openrsync-protocol-case/index.md",
  "name": "openrsync: an ISC implementation of rsync protocol 27",
  "name_zh": "openrsync：ISC 许可的 rsync 协议 27 实现",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "scope",
    "testing",
    "license"
  ],
  "requirements": [
    "Commit 8235c68f11b4fad5e24849a01d04ea153c29ee28. The README calls openrsync an implementation of rsync with a BSD (ISC) license, compatible with rsync 3.1.3 and with any peer that supports protocol 27. rsync.5 says it is compatible with version 27 of the reference. The officially supported system is OpenBSD.",
    "regress/functional/conf.sh sets rsync to ./openrsync unless that variable is already set. test00_simple.test creates dir1/one.txt with mkdirfile, builds the same file under dir2/dir1, runs $rsync -a dir1 dir3, and calls compare_trees dir2 dir3. compare_trees diffs file listings, directory listings, and then file contents with diff -ru. make regress_functional runs these tests.",
    "LICENSE.md grants permission to use, copy, modify, and/or distribute the software for any purpose, provided the copyright notice is kept. The copyright line is 2019, Kristaps Dzonsons."
  ],
  "requirements_zh": [
    "提交 8235c68f11b4fad5e24849a01d04ea153c29ee28。README 称 openrsync 是采用 BSD（ISC）许可的 rsync 实现，与 rsync 3.1.3 兼容，也与任何支持协议 27 的对端兼容。rsync.5 写明它与参考实现的第 27 版兼容。官方支持的系统是 OpenBSD。",
    "regress/functional/conf.sh 在变量尚未设置时把 rsync 设为 ./openrsync。test00_simple.test 用 mkdirfile 建立 dir1/one.txt，并在 dir2/dir1 下放同一份文件，然后运行 $rsync -a dir1 dir3，再调用 compare_trees dir2 dir3。compare_trees 比较文件清单、目录清单，再用 diff -ru 比较文件内容。make regress_functional 运行这些测试。",
    "LICENSE.md 允许为任何目的使用、复制、修改和/或分发本软件，只要保留版权声明。版权行是 2019 年 Kristaps Dzonsons。"
  ],
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/kristapsdz/openrsync",
  "verification": "source-reviewed",
  "verified_at": "2026-11-03"
}
