sync

From IndieWeb


sync is short for synchronize / synchronizing (AKA syncing) / synchronization and refers to the process of keeping data consistent between two or more devices (including servers).

Related Standards

WebDAV

WebDAV is RFC4918. [1]

[2]

Used for general web-based syncing (between ??? and ??? implementations/services?).

CalDAV

CalDAV is RFC4791 [3].

Used for calendar-specific web-based syncing (between ??? and ??? implementations/services?).

CardDAV

CardDAV is RFC6352 [4].

Used for contacts-specific web-based syncing (between ??? and ??? implementations/services?).

OData

OData is "a standardized protocol for creating and consuming data APIs. OData builds on core protocols like HTTP and commonly accepted methodologies like REST. The result is a uniform way to expose full-featured data APIs."

It's an OASIS standard.

SyncML

SyncML is a "platform-independent information synchronization standard." It had a decent amount of traction for a while, but it was also renamed to _Open Mobile Alliance Data Synchronization and Device Management_, which is probably pretty illustrative of the mindset behind it.

Exchange ActiveSync

Exchange ActiveSync is Microsoft's protocol for synching email, contacts, calendar, tasks, and notes between Exchange servers and clients. It's gotten a decent amount of adoption from third parties, probably due to Exchange's historical market share.

Related Projects

Version control systems in general are related. Notably...

Git

As a distributed version control system (DVCS), Git (and github) is good at merging different sets of changes from different sources to the same file.

git-annex

git-annex is a way to sync between the repositories of your choice (backends include ssh server, Amazon S3, Box.com, local file transfer, xmpp, etc.) and it there are clients for Linux, OSX, Windows and Android. The webapp that comes with it is a good replacement for Dropbox.

Mercurial

Similarly, Mercurial (also a DVCS) handles multi-change merging reasonably well.

Firefox sync

Firefox sync lets the user synchronize bookmarks, passwords, tabs, history, add-ons and preferences between different devices when using Firefox. It offers the users to use a Mozilla server to do that, but also tries to make it possible to host the server yourself, but sadly it is not very easy to set up as Jeena found out.

MediaWiki

MediaWiki (e.g. this wiki) does a good job of handling different edits to the same page by different people well when they edit different sections. If edits collide, the latter save is prompted with two text areas to manually merge the changes.

Operational transformation

Operational transformation (OT) is a set of abstract models and algorithms for implementing multi-master sync, merge, and conflict resolution of arbitrarily structured data. It's big and heavy and overkill for most of our use cases, but it's a common touchstone when discussing data synchronization.

Simperium

Simperium is a cross-platform data synchronization layer. In their words, it's "a service for developers to move data everywhere it's needed, instantly and automatically." It was built by the Simplenote people. Automattic recently bought them [5].

Proprietary Sync Implementations

iTunes sync

Apple iOS devices can directly sync via USB and/or wifi with OSX devices (except if you upgrade to iOS7 or later and OSX Mavericks or later[6]) using the built-in iTunes OSX application.

Criticism:

  • Data loss: It looks like iTunes does sync by treating the Mac as master, so if you delete something on your Mac, but edit it or add to it it on your iPod/iPhone - it gets deleted next time you sync, and everything you edited or added is thus lost. - Tantek 19:38, 26 November 2013 (PST)
  • Poor design choices: What I don't understand is the design decision to assume a delete even when there's a conflict. I'd think a fork would be better:
    • Far more forgiving to the user
    • It's easy to delete something one more time. Harder to undelete.
    • When in doubt, preserve the user's data.
  • Unreliable as backup: Sadly, it looks like iTunes didn't keep the previous backup, so once you sync (and create a new local backup of your iOS device) after any delete operations you will likely lose data. - Tantek 19:38, 26 November 2013 (PST)

Silo sync services

Proprietary sync services.

iCloud

Apple offers free (up to a data/bandwidth limit) sync services via its (misnamed) iCloud service between Apple devices such as iOS (iPod Touch, iPhone), and Macs (laptops etc.).

Articles:

Google

Google offers a sync service for Google Apps data (GMail, Calendar, Docs/Drive, etc.) between Android devices and its servers. It also synchronizes a smaller subset of that data to Chromebooks, iOS devices, Gmail Offline, and others.

IndieWeb thoughts

Complexity causes unreliability

Excess complexity leads to fragile implementations and unreliability. - Tantek 19:38, 26 November 2013 (PST)

Reliability comes from simple building blocks

If you want reliability, you have to have simplicity in the building blocks (which OStatus did not have).

Power-unaware synching is harmful

Bad for performance, power usage, etc. Naive synching implementations can easily hog client (and server) CPU and battery [7].

Good implementations avoid this with a variety of techniques such as timer coalescing. As examples, Android has a fairly mature, power-aware network data synchronization system [8], and Mac OS X Mavericks's kernel has a power-aware scheduler. [9] [10]

Also, centralized sync services can change their policies, for example requiring network sync instead of wired between devices (e.g. phone to laptop), as Apple did, which can hurt power usage and performance. This is yet another reason to avoid silos and prefer decentralized services.

(IRC discussion)

Syncing is hard like federation

It feels like syncing, like federation, is both hard to get right, and there's little incentive for big players to get it right.[11]


See Also