Collaborative Editing in CodeMirror (2020)
L'auteur décrit la décision de concevoir une édition collaborative centralisée pour CodeMirror en adoptant une transformation opérationnelle (OT) non distribuée plutôt que des approches pair-à-pair. Il compare OT et CRDT, notant que les CRDT offrent des garanties de convergence plus faciles à raisonner mais imposent une surcharge mémoire et structurelle (identifiants par caractère ou tombstones) incompatible avec les objectifs du noyau. CodeMirror utilise des ensembles de modifications plats codés en remplacements (séquences de spans keep/replace) plutôt que des opérations élémentaires, ce qui facilite la création, la validation et la composition des changements. Le traitement de l'historique d'annulation nécessite de transformer les changements enregistrés, et la cartographie des positions se révèle problématique car on peut obtenir la convergence des documents sans pouvoir garantir la convergence des positions sans suivre les contenus supprimés. L'auteur privilégie donc une solution OT centralisée pour la simplicité et la gestion de très grands documents, tout en laissant la possibilité de connecter une implémentation CRDT externe si nécessaire.