
Differential Synchronization (2009) - dhotson
https://neil.fraser.name/writing/sync/
======
sctb
Some related work includes operational transformation
([https://en.wikipedia.org/wiki/Operational_transformation](https://en.wikipedia.org/wiki/Operational_transformation)),
and Darcs' patch theory
([https://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theo...](https://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory)).

------
delinka
We’re looking seriously at using this at work. Is anyone aware of any OSS
implementations?

~~~
NeilFraser
The reference implementation is MobWrite:
[https://code.google.com/archive/p/google-
mobwrite/](https://code.google.com/archive/p/google-mobwrite/)

The project got put to one side when Google Code shut down, but I dusted it
off last month and everything still works.

~~~
espadrine
It seems equivalent without loss of valuable properties to the conflict/rebase
approach described here[0], and while it probably could be adapted to a p2p
setting, the space requirements seem like they would not scale as well as the
CRDT-based approaches like RGASplit[1].

What are your thoughts on competing algorithms?

[0]: [http://marijnhaverbeke.nl/blog/collaborative-
editing.html](http://marijnhaverbeke.nl/blog/collaborative-editing.html)

[1]: [https://github.com/atom/teletype-crdt](https://github.com/atom/teletype-
crdt)

~~~
jlu
Wanting to know this too!

------
marknadal
Neil Fraser went on to apply this work at Google with Google Docs (Operational
Transformation, see other comment here).

He was also one of my heroes that inspired my work to build a decentralized
(and offline-first) version, that I later applied to graphs with
[https://github.com/amark/gun](https://github.com/amark/gun) .

Some good follow ups are:

\- Martin Kleppmann's
[https://youtu.be/yCcWpzY8dIA?t=29m36s](https://youtu.be/yCcWpzY8dIA?t=29m36s)

\- Cartoon explainer
[http://gun.js.org/explainers/school/class.html](http://gun.js.org/explainers/school/class.html)

