# ACE (editor)

ACE (ACE – a collaborative editor) is a platform-independent, collaborative real-time editor. It is a real-time cooperative editing system that allows multiple geographically dispersed users to view and edit a shared text document at the same time.

## Introduction

ACE is a simple text editor with standard features such as copy/paste and load/save. Multiple documents can be edited at the same time. Furthermore, ACE can share documents with other users on different computers, connected by communication networks (LAN, Internet). ACE also discovers users and their shared documents automatically in a local area network. Users can opt to join any discovered shared document. For all this, no configuration is necessary because it is based on zero-configuration networking.
Once a user has joined a shared document, he can freely edit the document at the same time with all participants as a virtual team. So-called awareness information helps to avoid unnecessary conflicts (that is, two users editing at the same time and text location). Awareness information includes the cursor and the currently selected text of the other users marked with the color of the respective user.
The heart of the application is a concurrency control algorithm based on the innovative concept of operational transformation, which allows for lock-free editing of a document by multiple users. It imposes no editing constraints and resolves all conflicts automatically. The algorithm overcomes one of the most significant challenges in designing and implementing real-time collaborative editing systems, namely consistency preservation. That is, to ensure that at quiescence (that is, when no messages are in transit) the shared document is identical for all participants.
ACE builds upon open technologies such as BEEP (RFC 3080) and zero-conf networking. All this leaves the possibility open to communicate even with different applications that understand the public protocol of ACE.
ACE runs on all major operating systems such as Windows, Mac OS X, or Linux and is free software.

## Example use case

Consider a collaborative editing session with three participants, named Bill, Steve, and Scott, as depicted by the figure. There is also a fourth user, named Sam, who does not participate in the session. The document which the users collaboratively edit is Collaboration.txt. User Scott is the owner and publisher of it. Note that users Steve and Bill work on Microsoft Windows OS, whereas Scott uses Mac OS X and Sam Linux OS. Note that the blue color always denotes the text written by the local user of the ACE instance. The color to matching a participant is depicted in the participants view of the GUI.

## Usage

Here is a list with a few examples on how ACE can be used:
* Group brainstorming
* Source code development (XP)
* Collective note-taking
* Write texts together (e-mails, letters, journals, etc.)
* Educational purposes
The last point reveals some more potential for cooperative editing systems: Groups of two to three students can write essays together. On the one hand, they teach each other how to use the written language, and on the other hand, they can have fun together using a hands-on application on the computer, thus losing fear of contact with the computer, which is essential in today's education.

## Technology background

A real-time cooperative editing system such as ACE allows multiple users to view and edit the same document at the same time from multiple geographically dispersed sites. The sites are connected by communication networks. The following requirements have been identified for such systems:
* Real-time: The response to local user actions must be quick, ideally as quick as a single user editor, and the latency for reflecting remote user actions is low (determined by external communication latency only).
* Distributed: Cooperating users may reside on different machines connected by communication networks with nondeterministic latency.
* Unconstrained: Multiple users are allowed to concurrently and independently edit any part of the document at any time, in order to facilitate free and natural information flow among multiple users.
A real-time cooperative editing system consists of n instances, each instance run by a different user. All instances are connected by a network. One of the most significant challenges in designing and implementing real-time cooperative editing systems is consistency maintenance among the different document replicas (one for each site). A cooperative editing system is said to be consistent if it always maintains the following properties:
* Convergence: Guarantees when the same set of operations (for example, an operation can be an insert/delete of a character) have been executed at all sites, that all copies (also known as replicas) of the shared document are identical. That is, this property ensures the consistency of the final results at the end of a cooperative editing session.
* Causality-preservation: For any pair of operations Oa and Ob, if Oa -> Ob (that is, Ob is dependent on Oa), then Oa is executed before Ob at all sites. That is, this property ensures the consistency of the execution orders at all sites of dependent operations during a cooperative editing session.
* Intention-preservation: For any operation O, the effects of executing O at all sites are the same as the intention of O, and the effect of executing O does not change the effects of independent operations. That is, this property ensures that executing an operation at remote sites achieves the same effect as executing this operation at the local site at the time of its generation, and the execution effects of independent operations do not interfere with each other.
One solution to achieve consistency control is provided by Operational Transformation (OT) algorithms. The OT algorithm approach consists of two main components:
* The integration algorithm which is responsible of receiving, broadcasting and executing operations. It is independent of the type of document replica and application.
* The transformation function is responsible for merging two concurrent operations. It is application dependent. For example, a text editor has different operations than a whiteboard application.
The theory on consistency maintenance stems from the research field called Computer Supported Cooperative Work, for short CSCW.