What was Syncthing picked over the many alternatives?
Context
Please see: Files vs web pages. In the context of WikiSuite, we already have two other software components that manage files
- ClearOS Flexshare, which provides a standard file server, with three interfaces: 1- Web (HTTP/HTTPS) 2- FTP (FTP/FTPS) 3- File Shares (Samba)
- However it has the weaknesses of standard files and folders: no meta data, file needs to be in only one folder, or it's duplicated, hard to segment permissions, etc.
- Tiki File Galleries, which provide virtual folders and sub-folders which are web accessible. This abstraction layer permits multiple features: archives (previous versions of a file can still be accessed), check-in / check-out / lock, etc. and it leverages Tiki's multitude of built-in features: search (including file content), share secret link to file via email, permissions, etc. It's even possible to use as a field type in Tiki Trackers, a powerful and flexible database, form and report creator.
- However, it has the weakness that the only reliable interface is the web interface
- Which forces to download files, edit them locally, and re-upload. WebDAV support is meant to solve this, but it's not been the most reliable. The main Free / Libre / Open Source library in PHP is
- It is not suitable when you have a set of files generated by an external system or that need to maintain internal links. Please see enhancement being planned: https://dev.tiki.org/File-Gallery-direct-file-mapping-mode
By using each tool when it's appropriate, we have a good solution for most use cases. However, file sync was missing. A extensive analysis of all available Free / Libre / Open Source software was conducted. And Syncthing was deemed the best to complete the feature set.
Beyond satisfying the usual component criteria, Syncthing's P2P design is awesome.
- P2P by default, so same software on all nodes. Central server is just a convention.
- This is much less work that having different code bases to manage
- It is designed from the ground up to sync any number of nodes. So a node can get data updates from any other node.
- Syncthing is written in Go, which has fantastic performance (which is important when you have a lot of files)
- Default interface is a Bootstrap admin panel, and clients can make alternate interfaces such as Syncthing-GTK for better integration with operating system.
- https://github.com/syncthing/syncthing/blob/master/GOALS.md
Why not ownCloud / Nextcloud
- This would have been easier since there was already an app for ClearOS but
- WebDAV is not an ideal protocol. Tiki has tried to use for it for years, but not so great results (performance, reliability, etc)
- The server and clients are different code bases, which is bigger long term workload.
- Can't do P2P sync. Everything needs to go via central server.
Why not Seafile
- Seafile is an interesting project but
- The server and clients are different code bases, which is bigger long term workload.
- Can't do P2P sync. Everything needs to go via central server.
Why not Pydio
- Pydio is an interesting project but
- The server and clients are different code bases, which is bigger long term workload.
- Can't do P2P sync. Everything needs to go via central server.
Why not SparkleShare
- SparkleShare is an interesting project but
- It's based on Git whereas Syncthing uses the Block Exchange Protocol which is more suited for this use case
- Can't do P2P sync. Everything needs to go via central server.
Why not LinShare
- LinShare is an interesting project but it is for file sharing and not file sync. File sharing is covered by Tiki file galleries
See also