Synchronizing data between multiple locations is a common problem, especially when compounded with the proliferation of online web services and mobile devices for storing contacts, photos and files.
One-time export of data can also be considered a synchronization problem. Photo and video upload requires much the same logic as two-way synchronization, including detecting and preventing accidental replacement of files and authentication (if necessary) on the website/device to which the data is being exported.
Conduit is a pragmatic approach to solving this proliferation. By making synchronization a desktop wide service, it provides a central place to add support for these new services, helping to prevent bespoke partial implementations of synchronization in multiple applications. It also gives the user the ability to work on their data off-line, synchronizing it when they are next connected to the internet – an important consideration in countries with imperfect internet access.
Using real world examples, learned through implementing support for online web services with vastly different capabilities and APIs, I will discuss how a centralized (synchronization as a service) approach is the only way to provide a consistent user experience. I also believe it is the easiest way to solve the common, and difficult problem of detecting conflicts and preventing data from being unnecessarily duplicated.
I will demonstrate the current status of Conduit (including the services and devices which it supports), and the way in which this device support has been leveraged in other GNOME applications, such as eye of gnome and nautilus. I will also be discussing the future plans of Conduit, focusing on better mobile phone support – an area where collaboration between a number of different freedesktop and GNOME technologies is needed.
I will also show how application developers can utilize Conduit in their own projects, including adding support for additional services or devices, and how to use Conduit as the engine to synchronize their own, arbitrary, application specific data.