So, some of my colleagues see CRDT as a potential saviour. There was even a paper on CRDT for tree structures that we might use (can't find a link now). However, we'd rather go with a linear model for CRDT. That'd make it a bit easier on the CRDT level but it would require some really smart decisions about: types of changes, the structure of the linear model and how it is transformed to the tree model (that we need after all). We know, though, that without an actual implementation, it's just a theoretical discussion. Therefore, we started thinking whether we could add CRDT "below" our current tree model. That might allow validating the concept in a real-life. Can't wait to do that :)
BTW, in the meantime, we recommend this paper: https://arxiv.org/abs/1810.02137
Thanks to the author as well, for distilling so much information into the very readable document that this was.
One thing I am wondering about is in the conclusion of the document, the author says:
> You’d be hard-pressed to use CRDTs in data-heavy scenarios such as screen sharing or video editing.
With regards to video editing, could it not be rather doable after all?
Consider a non-linear video editing system (NLVE) [1] like Adobe Premiere Pro [2].
While the size of the video data source material you are editing might range into probably several hundreds of gigabytes for a 4K feature length film, the project file itself remains very small, because the video data is kept separate from the timeline data.
Wikipedia explains:
> Non-destructive editing is a form of audio, video, or image editing in which the original content is not modified in the course of editing; instead the edits are specified and modified by specialized software. A pointer-based playlist, effectively an edit decision list (EDL), for video or a directed acyclic graph for still images is used to keep track of edits.
Are these not in fact the sorts of data structures that would lend themselves the most naturally to being implemented as CRDTs? :D
As for the video source material that is used in the project, those files can be distributed by users outside of the editor software using for example BitTorrent, or they could be automatically distributed by the editor software via for example public IPFS or a private Dropbox folder, or if the users that are working together are on a shared network then the source files could be located on a shared NAS.
[1]: https://en.wikipedia.org/wiki/Non-linear_editing_system
«Ditto is a library for using CRDTs.» [0]
[0] https://github.com/alex-shapiro/ditto
Big kudos for pulling it off!
> Two main candidates are Operational Transformation (OT) and Conflict-Free Replicated Data Type (CRDT). We chose OT and perhaps one day we will write down our thoughts on the ongoing OT vs. CRDT battle.
Please do, I would love to hear your thoughts on OT vs CRDT!