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.
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!
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.)
jasonjmcghee•2mo ago
Edit: Looks like you made the font yourself, very cool.
busfahrer•2mo ago