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.
For anyone interested in this topic, I'm publishing a new theory on this called Collapsing Time Machines: https://braid.org/meeting-111.
reply