"Hmmm, that's interesting. Hey Linda, take a look at this."
"What do you have there Carl? Oh," Linda asked, glancing at the schematic on the screen.
"I want to get the signal here", Carl pointed, "over to this other part here, but I'm not sure the best way with all this stuff in between."
"Why don't you route it this way?" Linda suggested, drawing a rough path along the schematic, "this should be the most effective."
"Oh and then I can move this chip over to here instead," Carl replied as he dragged the chip to its new location.
Linda moved a couple of other components over. "That looks like it should pretty much do it."
"Great, that'll work. Thanks for your help."
They both turned back to their own work. A pretty typical situation that repeats itself thousands of times daily in workplaces everywhere.
Except that Linda and Carl are thousands of miles apart.
Groupware actually refers to any technology that lets people work together. So things like email and Usenet news are also rudimentary groupware technologies. The difference is that email and Usenet don't allow people to work together at the same time or "synchronously", but instead support different time or "asynchronous" work. Another distinction between types of groupware is whether the system supports people working in the same place (such as a team meeting room) or at a distance, such as different sites on the Internet. We're mostly concerned with groupware for geographically distributed groups working together synchronously.
Unfortunately, building groupware applications can be extremely difficult. Implementing even the simplest system is a lengthy and tedious process. Every application must worry about creating and managing socket connections, parsing and dispatching inter-process communication, locating other users on a network and connecting to them, keeping shared resources consistent between users, and so on. Using conventional programming tools, a lot of low level code must be written before getting to the specifics of the application. Groupware is an application domain crying out for better programming tools.
GroupKit grew out of our frustrations in building groupware systems without proper tools to support the job. By moving the common elements of groupware into a Tcl/Tk extension, we can now create programs in three days that originally took three months to write, and whose complexity shrunk from several thousand lines of code to only a few hundred lines. We've also found that it is often easy to take an existing single-user Tcl/Tk program and convert it to a multi-user program. With GroupKit, we're finding that writing groupware is only slightly harder than writing an equivalent single-user program.
The GroupKit distribution consists of the GroupKit extension itself (which is implemented as a mixture of Tcl and C), documentation, and approximately thirty example groupware applications.