- Di tengah situasi ketika alat sinkronisasi file bawaan macOS masih bertahan pada basis dari 2006, Apple mengganti rsync 2.6.9 dengan openrsync
- rsync macOS yang lama memang menerima perbaikan yang diperlukan untuk keamanan dan masalah lainnya, tetapi tidak menyertakan fitur rsync 3.x setelah 2.6.9
- Latar belakang utama peralihan ini adalah perbedaan lisensi: rsync 2.x didistribusikan di bawah GPLv2, sedangkan rsync 3.x di bawah GPLv3
- openrsync kompatibel dengan rsync, tetapi hanya mendukung sebagian argumen command line, sehingga skrip yang ada mungkin tidak berjalan apa adanya di Sequoia
- Pada macOS 15.4,
/usr/bin/rsync terhubung ke openrsync, jadi administrator Mac perlu memeriksa opsi yang didukung dan kompatibilitas otomatisasi yang sudah ada
rsync 2.6.9 yang lama bertahan di macOS
- rsync adalah alat command line untuk mentransfer dan menyinkronkan file di sistem operasi keluarga Unix
- Dapat digunakan antarperangkat penyimpanan yang terhubung langsung ke komputer yang sama
- Juga dapat digunakan untuk menyinkronkan file dengan komputer lain di jaringan
- macOS sudah lama menyertakan rsync, tetapi versi yang disediakan Apple adalah rsync 2.6.9, yaitu versi terakhir rsync 2.x
- rsync 2.6.9 dirilis pada November 2006, dan Apple tidak menaikkan rsync di macOS ke versi setelah itu meskipun rsync 3.x sudah hadir
- Apple tetap memberikan pembaruan yang diperlukan untuk masalah keamanan dan masalah lain pada rsync 2.6.9 yang disertakan di macOS
- Namun, hingga sebelum macOS Sequoia, rsync dari Apple masih berbasis fondasi yang hampir 20 tahun usianya, dan tidak menyertakan fitur baru yang ditambahkan pada versi rsync setelah 2.6.9
Stagnasi versi akibat GPLv2 dan GPLv3
- rsync 2.x dan 3.x didistribusikan di bawah versi lisensi GPL yang berbeda
- Apple menilai dapat mematuhi ketentuan GPLv2 pada rsync 2.x, tetapi tidak dapat mematuhi ketentuan GPLv3 pada rsync 3.x
- Karena itu, rsync 3.x tidak disediakan di macOS
Peralihan ke openrsync di macOS Sequoia
- Di macOS Sequoia, Apple mengganti rsync 2.6.9 dengan openrsync
- openrsync adalah implementasi rsync yang tidak menggunakan lisensi GPL
- openrsync didistribusikan dengan ISC license, salah satu lisensi keluarga BSD
- ISC license adalah lisensi permisif (permissive license) yang memberikan pembatasan minimal terhadap penggunaan, modifikasi, dan distribusi perangkat lunak yang menerapkannya
- Berbeda dengan ketentuan GPLv3 pada rsync 3.x, Apple menilai dapat mematuhi ketentuan lisensi openrsync
Perbedaan kompatibilitas yang penting bagi administrator Mac
- Ke depannya, Apple dapat menyediakan versi pembaruan openrsync tanpa mengkhawatirkan masalah kepatuhan GPL pada rsync
- Perubahan praktis yang lebih besar adalah meski openrsync kompatibel dengan rsync, ia hanya menerima sebagian argumen command line rsync
- Fitur rsync yang sebelumnya berjalan di macOS lama bisa gagal di macOS Sequoia
- Sebab fitur tersebut mungkin tidak ada di alat command line openrsync yang disertakan di Sequoia
- Fitur yang didukung oleh openrsync di macOS Sequoia dapat diperiksa di halaman manual openrsync
Cara memeriksanya di macOS 15.4
- Pada macOS 15.4, alat openrsync terhubung ke
/usr/bin/rsync
- Pengguna dapat menjalankan openrsync seperti menjalankan alat command line rsync seperti sebelumnya
- Informasi versi openrsync dapat diperiksa dengan perintah berikut
/usr/bin/rsync --version
- Outputnya mirip seperti berikut
username@computername ~ % /usr/bin/rsync --version
openrsync: protocol version 29
rsync version 2.6.9 compatible
username@computername ~ %
- Output tersebut menampilkan protocol version 29 dan rsync version 2.6.9 compatible
1 komentar
Komentar Hacker News
Dokumentasi openrsync terlalu minim, sehingga belum menimbulkan kepercayaan bahwa ia bisa menggantikan rsync
Untuk program penyalin berkas, seharusnya ia mampu melakukan salinan lengkap tanpa kehilangan satu bit pun data dan metadata dari sumber; jika tidak, saya menganggapnya tidak layak dipakai
Banyak alat penyalinan/pengarsipan di keluarga Unix tidak melakukan salinan lengkap dengan opsi bawaan, dan sebagian alat bahkan tidak bisa melakukannya dengan opsi apa pun
scp juga, setidaknya sampai beberapa tahun lalu, sulit melakukan salinan lengkap ketika sistem operasi atau filesystem berbeda, jadi saya tidak memakainya dan hanya menggunakan rsync di atas ssh
rsync adalah salah satu alat langka yang, jika diberi opsi yang tepat, dapat mempertahankan extended attributes, ACL, hingga timestamp presisi tinggi bahkan di antara sistem operasi/filesystem yang berbeda, seperti antara FreeBSD UFS dan Linux XFS
Dokumentasi openrsync tidak menjamin salinan lengkap seperti ini, jadi untuk saat ini saya mengasumsikan ia belum bisa melakukannya dan menilainya tidak berguna
Di sisi pengarsipan, di Linux, bsdtar saat memakai format pax dapat menyimpan salinan berkas yang hampir lengkap, sedangkan format tar/cpio lama tidak dapat memuat metadata modern
Biasanya saya membuat alias rsync sebagai
/usr/bin/rsync --archive --xattrs --acls --hard-links --progress --rsh="ssh -p XXX -l YYYYYYY"cpdari coreutils juga bisa melakukan salinan lengkap jika opsi CLI dan opsi kompilasinya benar, tetapi beberapa distro membangunnya tanpa dukungan extended attributes sehingga hanya melakukan salinan parsial tanpa peringatan atau errorKami memulihkan semuanya dengan sangat hati-hati, tetapi kadang terasa hanya kami yang memedulikannya
Pada dasarnya, saya akan menganggap openrsync sebagai rsync dengan batasan lisensi yang lebih longgar, bukan sebagai sesuatu yang berperilaku berbeda
README openrsync mengatakan ia kompatibel dengan rsync dan meminta pembaca melihat dokumentasi rsync
Jika extended attributes, ACL, dan timestamp resolusi tinggi bukan fitur opsional di level protokol, bukankah untuk mengklaim kompatibilitas ia harus mendukung semua yang didukung rsync modern?
Atau saya penasaran apakah maksudnya ia menerima seluruh protokol tetapi begitu saja membuang hal-hal seperti ACL
Namun di situs web resminya juga tertulis “We are still working on it... so please wait.”
Pengguna seperti itu tinggal memasang rsync sendiri
--xattrs,--acls,--hard-linksyang dipakai di alias semuanya tidak ada[0]https://github.com/kristapsdz/openrsync/blob/a257c0f495af2b5...
Sebagai pengguna Linux yang relatif baru, manajemen versi utilitas sistem bawaan terasa cukup berantakan
Contoh utamanya adalah
unzip:unzipbawaan di server Debian dan server Ubuntu lama tidak bisa menangani ZIP yang dienkripsi dengan AES-256, tetapi dari Stack Overflow tampaknya beberapa distro sudah memperbaruinya agar mendukung hal ituMasalahnya,
unzipyang sudah diperbarui sulit ditemukan dengan mudah, semuanya mengaku sebagai “version 6.00” tetapi perilaku nyatanya berbeda, dan meskipun menemukannya pun saya tidak tahu apakah aman mengganti paket bawaan sistemPada akhirnya, meski seseorang menambahkan fitur bagus ke utilitas yang banyak dipakai, kita tetap tidak bisa memakainya; karena itu utilitas sistem inti, rasanya malah lebih sulit diperbarui dibanding alat pihak ketiga
Windows atau macOS mungkin serupa atau bahkan lebih buruk dalam hal utilitas sistem, tetapi saya mengira Linux akan menangani hal semacam ini dengan lebih baik
unzipDi Linux, saya hampir tidak ingat pernah memakai
unzipsaat menangani ZIP atau berkas arsip secara umumMengikuti filosofi Unix, alur seperti menggabungkan dengan tar, mengompresi dengan gzip, lalu mengenkripsi dengan pgp—menghubungkan alat-alat sederhana yang melakukan satu pekerjaan dengan baik lewat pipe—juga terasa alami
Untuk soal versi, saya tidak yakin mengapa Debian/Ubuntu sama-sama menyebutnya 6.00, tetapi itu bukan hal yang umum
Untuk mesin pribadi, distro rolling release seperti Arch atau Manjaro mengikuti versi upstream dengan lebih konsisten, tetapi beban pemeliharaan dan ekspektasi untuk mengelolanya sendiri menjadi lebih besar
Hal yang lebih merepotkan dalam manajemen versi Linux/open source adalah pustaka-pustaka yang terlalu lama menunda deklarasi v1.00
Meski sudah banyak tertanam di ekosistem, stabil, dan fiturnya hampir lengkap, mereka tetap bertahun-tahun berada di v0.2 atau v0.68 sehingga membingungkan pemula
Debian memiliki siklus rilis yang panjang tetapi sangat stabil, dan di stable semuanya berjalan serasi
Ubuntu pada dasarnya terasa seperti Debian ditambah “bagaimana kalau rilis lebih sering?”
Jika menginginkan alat terbaru, harus menerima pilihan yang mungkin kurang stabil seperti Nix atau Arch, dan keduanya tidak terlalu ramah
Jika ingin stabilitas sekaligus alat terbaru, Gentoo bisa menjadi cara, tetapi bebannya bahkan lebih besar daripada Arch
Jika menginginkan stabilitas dan kesederhanaan, Anda bisa mengorbankan ruang disk dengan pendekatan seperti Docker/podman, flatpak, appcontainers, atau snap
Windows dan Mac juga punya masalah yang sama, dan Windows selama ini menanganinya dengan menyertakan pustaka-pustaka lama lalu melakukan dynamic linking sesuai aplikasi yang sedang berjalan
unzipadalah kasus khususPengembangan upstream pada dasarnya terhenti, dan rilis terakhirnya adalah 6.0 pada 2009
Setelah itu, berbagai masalah ditemukan dan fiturnya makin kurang memadai, sehingga tiap distro menumpuk banyak patch di atas rilis tersebut; hasilnya, muncul executable yang sangat berbeda meski memiliki nomor versi yang sama
[0]: https://infozip.sourceforge.net/UnZip.html
[1]: Dari resep build Arch, Anda bisa melihat jumlah patch yang diterapkan: https://gitlab.archlinux.org/archlinux/packaging/packages/un...
Interoperabilitas sampai tingkat tertentu memang bagus, tetapi banyaknya pilihan juga merupakan kelebihan
Sebagian besar repositori distro memiliki bsdtar, jadi layak dicoba sebagai pengganti; tergantung distronya, nama paketnya bisa saja libarchive
Dengan
bsdtar xf path/to/filesaja, hampir semua format bisa diekstrak, dan AES pada ZIP juga didukungDi macOS ini disertakan secara default, dan kemungkinan juga disertakan di Windows
Untuk setiap pekerjaan, buat repositori git dan
flake.nix, lalu biarkan direnv mengaktifkan lingkungan yang dideklarasikan dalam flake saat masuk ke direktori tersebutJika menulis skrip yang memakai
grep, masukkan skrip itu ke repositori dan tambahkan jugapkgs.gnugrepkeflake.nixDengan begitu, yang digunakan adalah versi yang dideklarasikan, bukan versi sistem; saat berpindah dari macOS ke Linux atau WSL pun, versi grep yang dipanggil tetap sama
Nix sering dinilai tidak ramah bagi pemula, jadi saya berhati-hati untuk merekomendasikannya begitu saja, tetapi intinya adalah mendeklarasikan dependensi dengan cara apa pun dan hanya memakai dependensi yang sudah dideklarasikan
Docker juga bisa, dan ekosistem bahasa seperti Python/Node.js/Go/Rust juga menyediakan cara untuk membundel dan memanggil dependensi
Dengan cara ini, pembaruan dependensi tercatat sebagai commit, sehingga ketika ada sesuatu yang rusak, Anda bisa kembali ke commit sebelumnya
Repositori seperti ini tidak harus berupa proyek perangkat lunak; bisa saja berupa “kumpulan alat yang diperlukan saat melakukan XYZ”
Agak merepotkan bahwa openrsync tidak mendukung sebagian fitur rsync
Namun tetap bagus bahwa sekarang ada beberapa implementasi independen rsync
Karena itu berarti rsync diperlakukan bukan sebagai perangkat lunak sederhana, melainkan seperti protokol sungguhan
Jika makin mendekati protokol, rasanya bisa muncul titik API diff biner berbasis algoritma rsync
Fakta menariknya, Dropbox secara internal memakai diff biner rsync untuk mengunggah perubahan kecil pada file besar dengan cepat
Saya kira sampai sekarang pun begitu, tetapi endpoint API publiknya tidak punya fitur ini, jadi meski hanya ada perubahan kecil pada file besar, seluruh file harus diunggah ulang
Ini cukup berguna di lingkungan perusahaan ketika SSH+rsync diblokir, tetapi pembuatan layanan gRPC diizinkan
rsync punya banyak fitur, jadi memang pasti butuh waktu cukup lama
Pada patch rsync mainline, dukungan extended attributes ditambahkan untuk mendukung metadata macOS
“Carbon Copy Cloner” dari Bombich adalah aplikasi GUI yang membungkusnya
https://support.bombich.com/hc/en-us/articles/20686446501143...
Mike Bombich dikenal lewat tulisan di papan administrator sistem macOS Server, dan ada juga materi terkait
https://web.archive.org/web/20140707182312/http://static.afp...
Nathaniel Gray membuat Backup Bouncer, yang memverifikasi fidelitas backup termasuk multi-stream, extended attributes, ACL, dan sebagainya
https://github.com/n8gray/Backup-Bouncer
Ada juga RsyncX, aplikasi SwiftUI yang membungkus rsync
https://github.com/rsyncOSX/RsyncOSX
Pada masa ketika perangkat lunak macOS “Classic” dijalankan di atas sistem UNIX baru, hal-hal seperti ini benar-benar dianggap penting
https://web.archive.org/web/20161022012615/http://blog.plast...
IFileOperation (Windows) dan FileManager (macOS) melakukan penyalinan dengan performa terbaik yang didukung filesystem underlying
Pada SMB dan ReFS, pemeriksaan CRC setara fitur checkbox, dan pada share SMB modern di Windows Server modern, tahap pencocokan konten rsync menjadi pekerjaan duplikatif
Antara sesama Windows, throughput IFileOperation 1,5–8 kali lebih cepat daripada rsync dan penggunaan CPU-nya juga lebih rendah; bahkan bisa 1,2–3 kali lebih cepat daripada penyalinan file Go biasa
Jika hanya melihat Linux tanpa memedulikan sistem operasi yang benar-benar memakai metadata filesystem kompleks, openrsync atau program yang lebih sederhana sudah cukup
Saya penasaran apakah ada materi yang menjelaskan dengan baik mengapa Apple begitu takut pada GPLv3
Rasanya kalau executable dikompilasi secara statis, seharusnya tidak menjadi masalah
Saat itu TiVo melakukan hal seperti itu, sehingga disebut tivoization
Di iOS, alasan tidak memakai GPLv3 jelas, karena akan melanggar ketentuannya
macOS mungkin bisa memuat kode GPLv3, tetapi Apple banyak berbagi kode antara iOS/macOS/watchOS/tvOS/visionOS, jadi tidak banyak artinya jika hanya satu sistem operasi berbasis GPLv3 sementara yang lain tidak
Lebih sederhana untuk sama sekali tidak memakainya
Selain itu, jika di masa depan macOS makin mengunci eksekusi kode pengguna, mereka tidak perlu khawatir harus mencabut kode GPLv3 saat itu
Hal-hal yang saya kira sepenuhnya aman pun, dari sudut pandang pengacara, ternyata tidak bisa dinyatakan setegas itu
Saya tidak tahu alasan Apple, tetapi para pengacara korporat di perusahaan lain memberi prinsip untuk memilih lisensi non-GPL jika memungkinkan
Jika melihat riwayat putusan terkait GPLv2, hasil yang didapat tampak kecil dibanding upaya yang diperlukan
Dari sudut pandang Apple, jika bagian yang terlihat sebagai “masalah” cukup diganti, mereka bisa menghindari seluruh kategori masalah itu
Isu teknis detailnya mungkin menarik, tetapi menurut saya bukan intinya
Sebaiknya jangan terlalu percaya pada penjelasan orang lain tentang niat Apple
Saat menulis sendiri implementasi https://github.com/gokrazy/rsync dalam Go, saya melihat openrsync, dan kodenya bagus
Namun sayangnya openrsync tidak 100% kompatibel dengan rsync
Saya baru tahu Apple mulai beralih ke openrsync ketika pengujian saya rusak di macOS 15
Tertulis bahwa openrsync ditulis sebagai bagian dari proyek rpki-client(1), validator RPKI untuk OpenBSD, dan didanai oleh NetNod, IIS.SE, SUNET, serta 6connect; saya penasaran mengapa organisasi-organisasi ini mendanai pengembangan tersebut
https://github.com/kristapsdz/openrsync?tab=readme-ov-file#p...
https://news.ycombinator.com/item?id=43605846
Perusahaan mendanai hal-hal yang berguna atau mereka butuhkan
Sebagian perusahaan dalam daftar itu mungkin menggunakan BSD, dan kemungkinan menginginkan atau membutuhkan implementasi rsync yang bukan GPLv3
Atau bisa saja mereka sekadar tertarik mensponsori proyek dan pengembangan open source
Untuk sementara hingga Sequoia 15.3, rsync_samba dan rsync_openrsync sama-sama bisa digunakan melalui
/var/select/rsyncatau variabel lingkunganCHOSEN_RSYNCHal yang sangat menjengkelkan dari openrsync adalah klaimnya mendukung elemen path ajaib
/./untuk--relativeKarena masalah ini, sekitar sebulan lalu saya mengirim laporan bug ke Apple
Sejak Sequoia 15.4, rsync_samba sudah hilang, dan saya memasang rsync lewat Homebrew
Baru-baru ini saya mengalami masalah ini: saat membuat
.ipaiOS denganxcodebuilddari command line, tampaknya secara internal ia memanggil rsync untuk menyalin file antar direktori lokalNamun karena Homebrew rsync berada lebih dulu di
$PATH, itulah yang dijalankan, sementaraxcodebuildmeneruskan argumen khusus openrsync,--extended-attributesHomebrew rsync tidak memahami argumen itu, sehingga gagal dan keluar
Saya tetap senang Apple tidak secara bertahap menyingkirkan sisi POSIX untuk membuat osx menjadi seperti iOS, melainkan terus memperbaiki dan menerimanya