We need a definition of collaborative/groupware applications, so that we know what kind of applications to study and design infrastructures for. One straightforward definition of a collaborative application is: A computer application that allows its users to collaborate with each other.
So what exactly does ``collaborate'' mean? The Oxford dictionary defines it as: ''Work jointly esp. at literary or artistic production production; cooperate traitorously with the enemy.'' Like most dictionary definitions, this definition is recursive (uses the synonym, ``work jointly'') and subject to interpretation. For instance, it is not clear, according to this definition, if a chess game is a collaboration? Both players are working, they are doing it together, and a transcript of the game may (seem to them) to be an artistic production. But most people will say the players are competing rather than collaborating. It is perhaps because of examples such as this that Winograd defines groupware as a ``state of mind''.
Several other definitions of collaborative applications have been proposed by researchers in this area . Like the definition above, they are subject to interpretation, but give important insights on the nature of collaborative applications and how they differ from other traditional multiuser applications such as database applications. Malone defines them as ``information technology used to help people work together more effectively,'' implying, perhaps, that this new area is simply trying to take collaboration more seriously than traditional computer science fields. Lynch, Snyder, and Vogel hint at what is missing in traditional fields: ``Groupware is distinguished from normal software by the basic assumption it makes: groupware makes the user aware that he is part of the group, while most other software seeks to hide and protect users from each other.'' Wells clarifies that groupware is not simply software, it is ''software and hardware for shared interactive environments.'' Ellis further qualifies this definition, requiring also the common task criteria: ''Groupware are computer-based systems that supports groups of people engaged in a common task (or goal) and that provide an interface to a shared environment.'' Peter and Johansen-Lenz, credited in  with coining of the term ''groupware,'' do not require that the tasks be associated with clear goals,
They define groupware as ''computer-mediated culture, intentional group processes plus supporting software,'' thus focussing on collaborative applications' ability to mediate the interaction among its users.
The definitions above give us a good intuitive feeling about the properties collaborative applications have but use subjective terms such as ``effectively'', ``hide'', ''aware,'' ''task,'' and ''culture''. As a result, they are not sufficient to objectively distinguish collaborative applications from non-collaborative applications. Here is a more precise, system-based definition that is consistent with the definitions above: A collaborative application is a software application that (a) interacts with multiple users, that is, receives input from multiple users and creates output for multiple users, and (b) links these users, that is, allows some input of some user to influence some output created for some other user (Figure 3).
Figure 1: Definition of a Collaborative Application.
Input is any event (e.g. keyboard, pointer, gesture, speech) generated by a user that is interpreted by the application and output is any event (e.g. screen update, audio output) generated by the application that is perceptible to a user.
This is a technical definition of a collaborative application and not a social one since the users linked together by the application may not in fact feel they are ''collaborating''. For instance, according to this definition, an application that allows users to send ``flames'' to each other is a collaborative application, though the users of the application may not feel they are collaborating. This definition essentially equates communication with collaboration. One can argue that communication is a necessary but not sufficient condition for collaboration and thus this definition includes several non-collaborative applications such as the ``flame sender''. However, since collaboration is in the ``eye of the beholder'' or a ``state of mind'', it is not clear how this definition should be further qualified to eliminate applications such as the one above, or in fact, if it is useful to eliminate these applications. In a technical course such as this one, it may not be as important to try to distinguish between collaborative and non-collaborative communication, since in both cases the technical challenges can be expected to be similar. More important, we will focus on actual applications that have been built and used, which presumably support useful, ''collaborative'' forms of communication.
Some traditional applications that qualify as collaborative applications according to this definition:
Some applications that do not qualify:
In our definition we are including only overt I/O channels. As shown by Lampson, several covert I/O channels also exist, which could be used by users of non-collaborative application to, in fact, collaborate with each other. For instance, input to a traditional debugger may cause the load average displayed to another user to be changed. Is the combination of the applications that support debugging and load-average monitoring a collaborative application? Since the channels that link the two users are ``covert'' in that they were not explicitly set up by the two applications, we will not call the combination a collaborative application. However, it is important to keep in mind, specially for security reasons, that collaboration may occur among users of a timesharing system that are not explicitly linked together by collaborative applications.
Note that we call an application collaborative if it can link some input of some user to some output of some other user. We are not demanding that every input of a user immediately cause some corresponding output for all other users interacting with the application, though many collaborative applications, in fact, do so.