3 ms·
I left Dropbox when I decided I just can't trust my long-term important data to closed source software. Since then I've been on a little odyssey exploring the o
by ef4 12y ago
I left Dropbox when I decided I just can't trust my long-term important data to closed source software. Since then I've been on a little odyssey exploring the open source contenders.
I ran owncloud briefly. File syncing performance was terrible. You really don't want to write your file synchronization service as an afterthought inside a PHP application.
I ran seafile for a while, but I don't like their security story. The authors have said some things that show they are a little out of their depth when it comes to crypto. Also, last I checked they had no good story for running multiple server in parallel, and the data on the server is not accessible as regular files. Also, written in C, and there are very few people I trust to write C without nuking my security.
I ran git-annex. Joey Hess is doing a good job with that project, but I think the symlink-oriented architecture is just not good enough. "Direct mode" is supposed to avoid symlinks, but direct mode seems much less stable, and it still exposes symlinks when you have data that's only partially synced. Too many apps do bad things when you give them symlinks. Also, I like Haskell the language, but Haskell the toolchain sucks hard, and I gave up trying to build git-annex from source to play with it.
Now I'm running syncthing and I have to say I've been pleasantly surprised. I had passed on them earlier due to reports of performance problems, but since the 0.9 release performance is much improved. The global discovery is particularly nice. I have two servers and two laptops all synchronizing with each other. One server is publicly reachable, the other is inside a LAN only accessible when I'm inside. It does the right thing whether I'm home inside the LAN, where I get fast sync with the local server. It does the right thing when I'm away, synchronizing with the publicly addressable server, which then transitively synchronizes with the LAN server.
It's written in Go, so I'm less worried about buffer overrun shenanigans. It uses the stock Go SSL stack, so no worrying about weird hand-rolled transport and authentication protocols. And authentication is clear and simple: every client has a cert, the client's name is the cert's fingerprint. No certificate authorities.
Syncthing has some versioning support, but I decided to use bup instead for belt-and-suspenders. So all my synced files are also snapshotted by bup every ten minutes on both servers.