The final product is composed of two basic applications: a client application and a server application.
The end-user receives a GUI via an Applet (on their web browser or any other Java VM) that sends commands to the server. The server is responsible for providing the ICQ functionality (communicating with the ICQ network and other ICQ clients) and it sends messages back to the user.
The server application is a threaded application (using the POSIX threads (pthreads) library. This provides a ``private'' connection to the ICQ network for each user.