I've used Dropbox for a while now to sync data between my computers and Android devices. It's pretty user-friendly on the whole, and supports some nice features like camera auto-upload, so pictures I take on my phone will sync to my computer without the need for a cord. All in all, it's a fine service, and getting free space is easy enough that you can do a fair bit with it.
However, since I hadn't repurposed my Raspberry Pi for anything yet, I decided to take a few "self hosted" cloud solutions for a spin. It's an attractive proposition for a number of reasons: my data stays in my control, on my machines, and my available space is limited only by the size of the hard drive I have. With disk space being so cheap these days, it's easy to see how you could come out on top financially by going this route rather than upgrading your account on a hosted service.
OwnCloud: Almost Dropbox on Your Own Hardware
The first candidate I decided to try out was ownCloud. It's probably the closest thing to an open-source Dropbox implementation that's out there right now, and it comes with a laundry list of features like collaborative file editing, version histories, and a pretty nice web interface. Set up is pretty straightforward, too; it's a PHP web application, so you can run it on just about anything. I set up my installation with nginx as the frontend proxy, and everything worked right out of the box. It makes a great first impression.
The sync clients are where things started to get a little shaky, though. On Android you're looking at a paid app, though it's also open-source, so I compiled it myself so that I could test it out before purchasing. Overall it's not bad, but I would have liked to see a few more features. Syncing, for example, is noticeably absent, and although Dropbox doesn't do this either, it would be a great differentiator. It also only supports accessing your ownCloud files, which is unfortunate since ownCloud will also let you store and sync data like calendar information and contacts. Getting that data in the Android app would potentially allow you to disconnect from Google completely if you wanted, which is something of an under-served market. It does have auto-upload, though, and the interface is intuitive enough. Essentially, it's adequate: no real deal breakers, but nothing stands out.
I found the desktop client to be the weakest link, unfortunately. Installation is simple enough, but file syncing seems to take ages to complete, especially if you have large numbers of smaller files. Some of this, certainly, could be that the Raspberry Pi is not the beefiest of machines. However, it seems that people on more traditional hardware are feeling the pain as well. It seems that there might be a bit too much overhead on each upload, so having many small files hammers the server and performance takes a big dip.
Another thing that was missing - and that I unfortunately could not go without - is selective syncing. I have specific folders on Dropbox for work, personal, and "shared" data that I can sync to whichever computers I choose. This means I don't waste time and bandwidth syncing my pictures to my work laptop, for example. As of now, ownCloud does not support this, making syncing an all or nothing affair. This feature was requested a year ago, so perhaps it will be implemented eventually.
So ownCloud came close, but wasn't quite what I needed. I moved on to what I hoped would be greener pastures.
Seafile: Cloud Features, with a Blast from the Past
My next stop was Seafile, which people seemed to describe as basically being a more performant version of ownCloud. Again, installation was straightforward, and they even provided binaries for the Pi that I was able to simply download and extract. With everything in place, I fired up a browser to take a look at the web UI.
And found myself in 1995.
Something about Seafile just felt...odd. Maybe it's the unusual color scheme, which somehow managed to be a blend of white, orange accents, and purple (no, seriously) menu highlights. It could also have been the fact that the sync client looks like a buddy list circa AIM 2.0. Whatever it was, I was a bit unnerved.
The Android app didn't fare much better, really. It was a bit confusing to navigate, and it lacked auto-upload, which made it a non-starter for my usage patterns. I'm sure Seafile has its niche out there, but it was simply not for me.
BitTorrent Sync: The Peer-to-Peer "Cloud"
Although labelled a "beta", I decided that BitTorrent Sync would be my next stop, after searching around didn't yield much else in the way of possibilities. The concept is pretty simple really: you basically torrent your files from one computer to another, thereby sharing them in a peer to peer fashion. When you want to add a folder to sync, the client generates a "code" which acts sort of like a tracker would, and entering that code into clients on other computers allows them to access it.
The cool thing here is that you don't need a central server that stores all of your stuff. You just sync it directly among all the devices you use, cutting out the middle man. In my case, I actually wanted a central server to act as a sort of backup, but that's easily accomplished as well. I ended up taking advantage of BT Sync's read-only syncing mode, allowing me to keep backup copies of my data on my Pi, but preventing me from accidentally blowing up the data on all my other computers if the Pi's data got corrupted or deleted.
Another nice perk is that adding more devices to your little "cloud" can actually speed up your syncing, since each device with an up-to-date copy of a file effectively acts as a seeder for the other clients. This also means that sync speeds are quite fast if your devices are on the same network, so backups between my laptop and my Pi complete very quickly. In addition, the sync client is very flexible, allowing you to sync whatever folders you want to wherever you want. It's selective sync to the max.
On the Linux side, things are a little more kludgy, because there is no graphical client at the moment. Instead, there's a daemon that spins up a web UI that you use to manage your sync folders. It's perhaps not the most ideal solution, but in my instance it actually turns out to be a benefit since I can manage my Pi without having to remote into it over VNC or forwarding X over SSH or anything. If I had a desktop Linux install I might be rubbed the wrong way, but in this case it actually works nicely.
Lastly, there is an Android client, and it's nicely put together on the whole. Auto-upload is not done the way that other cloud services handle it because instead the app allows you to actually sync your folders. This is great, because it means I'm not pigeon-holed into only backing up my camera pictures - I can backup anything I want. Right now, for instance, I have all of my Titanium Backup data set to sync to my Pi, so if my phone ever died I'd have a copy of all of my apps and settings waiting to be restored.
Getting off the cloud was kind of an interesting learning experience, really, but I learned that it's absolutely possible to do without giving up any of the "conveniences" people have come to enjoy in services like Dropbox. Whether you're doing it because you're trying to be more security minded, or you just need more space, there are a number of viable options out there. For my uses, BitTorrent Sync has proven to be the most powerful, and I've not only migrated all my Dropbox data over, but I'm now syncing and backing up even more data than I was with Dropbox. Heck, with a large enough hard drive, I may even try backing up my entire Program Files directory. That would be the dream, really: transparent network backups onto my own hardware. Maybe I'll be able to get there soon.