Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Practical Intro to Operational Transformation (casouri.cc)
57 points by casouri 12 days ago | hide | past | favorite | 7 comments




This paper does a good job relating OT and CRDT as the two major approaches to collaborative editing.

For anyone interested in this topic, I'm publishing a new theory on this called Collapsing Time Machines: https://braid.org/meeting-111.


Just want to say- very pleasant blog from a typographical and design standpoint.

Edit: Looks like you made the font yourself, very cool.


Had the same reaction, it reminded me a bit of magick.css

I think there's a misunderstanding here.

People often associate CRDTs with IDs and tombstones, while associating OTs with positions.

This is incorrect. What makes them different is that CRDTs must work in P2P environments *by definition*. That's all.

Other true statements:

- All CRDTs are OTs, but not all OTs are CRDTs.

- If an OT supports P2P, then it's also a CRDT.

- If it doesn't support P2P, it's not a CRDT.

- A CRDT can have no IDs and be operation-based.

- An OT can have no positions and be ID-based.

In fact, I just released an ID-based OT framework yesterday: https://docnode.dev.

I hope that clarifies things a bit more!


Lovely analysis!

But one issue: it's not actually the case that "all CRDTs are OTs".

OT is the feature of Transforming and Operation. This requires two things: (1) Operations, and (2) Transforming them so that they do the same thing when applied from one place in distributed time vs. another place in distributed time.

However, there are plenty of CRDTs that (a) do not have operations, and also plenty of CRDTs that (b) do not transform operations.

Consider a typical state-based CRDT like LWW register. It does not have operations; it just has a current state: the value of the register. And it does not transform operations. It just always computes the current value of the register.

(For more on the relationship between OT and CRDT, see my notes at braid.org/meeting-111.)


I think it's debatable what constitutes an "operation". In a CvRDT, a delta or diff can be considered an operation. In an ID-based OT, it can be considered that there is a transformation of operations, only instead of transforming with respect to other operations, they are transformed with respect to the current document (if there were conflicts, they cannot always be applied in their original form).

> Even though ot do is simple, ot undo is very complicated and inefficient. We’ll expand on this later sections. Undo in crdt is simple and can be handled as normal operations.

Not so sure about that. Undo in OT seems simpler to me than undo in CRDT.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: