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!