I am a long-term user of Unison (<a href="https://www.cis.upenn.edu/~bcpierce/unison/" rel="nofollow">https://www.cis.upenn.edu/~bcpierce/unison/</a>) from the command line, to synchronize directories between my machines. If Unison weren't available, from studying the Syncthing documentation it would be my next choice.<p>You wouldn't think that writing synchronization software would be rocket science, but apparently it is: Unison's author is Benjamin C. Pierce, a prominent computer scientist and author of "Types and Programming Languages". Together with an active user community, he makes the correct call on some key design decisions.<p>I have tested many alternatives to expose these issues. I have not tested Syncthing, as this HN post is so poorly titled that it would sync into oblivion before I could complete the tests. I recommend writing your favorite sync software author if you find their handling of these issues problematic, though expect defensive replies.<p>[1] Symbolic links. They should be copied as is, not considered for their semantic content. Would you want sync software taking a half hour break if it found porn on your computer? Why should it think about symbolic links, either? It is your responsibility that they have some meaning on the target machine. Unison and Syncthing copy Unix symbolic links. All other programs wreck them or follow them. It confuses matters that some users beg for such behavior, in hopes of extending the capabilities of sync software beyond their original design.<p>On MacOS an application bundle, not meant to be examined by casual users, can contain internal symbolic links, for example from "latest" to a versioned directory. Software that mangles this will claim that it isn't meant for "system files" as if that is some dangerous art. It is not; they are simply handling symbolic links wrong.<p>[2] "Atomic" directories. If one has for example a MacOS sparse disk image open on two machines, and makes conflicting changes, one cannot simply merge the pieces, deciding arbitrarily on conflicting index files. Think of the movie "The Fly". A sparse disk image is again a directory of many files. This has many advantages, including ease of incremental backup. However, one needs to decide which copy to keep in case of conflict, at the directory level.<p>Unison has a way to declare this. I've never seen other software with this capability. This also applies for example to .git directories.<p>[3] Interactive conflict management. Using Unison, one chooses interactively how to resolve conflicts before committing to the sync. I sync many gigabytes of data, and I have no interest in dealing later with scattered renamed copies of files, many of which matter to automated tools and will never see my manual attention. I either choose a preferred copy at the time of sync, or I abort and fix the problem before the sync.<p>I prefer Unison's handling here to Syncthing.