# Libwww Architecture

Libwww is a general code base that can be used as a basis for building Web client applications. Its main purpose is to provide services to transmit data rendered in many different media types either to or from a remote server using the most common Internet access methods (HTTP, FTP, Gopher, etc.) or the local file system.

It is written in plain C intended to work on most Unix, Windows, and possibly Mac

Even though plain C does not support an object oriented model but merely enables the concept, many of the data structures in libwww are derived from the class notation. This leads to situations where forced type casting is required in order to use a reference to a subclass where a superclass is expected. The forced type casting problem and inheritance in general would be solved if an object oriented programming language was to be used instead of C, but the current standardization and deployment level of object oriented languages in general would imply that a part of the portability would get lost in the transition.

Many of the features of libwww are demonstrated in the sample applications

The development of libwww was started by Tim Berners-Lee in 1990, and today the Library is a multi functional code base with a large amount of knowledge about network programming and portability built into it with help from Ari Luotonen, Jean-Francois Groff, Håkon W. Lie and a large number of people on the Internet.

## Design of Libwww Core

This section describes some of the design points behind the libwww core. The core is basically a registry where the application can register the set of features that the application needs.

- Basic Design Model
- Simplified Control Flow
- Data Flow Using Streams
- Input and Output Streams
- The Stream Builder
- The Request/Response Paradigm
- Before and After Filters
- Threads and Event Loops
- Protocol Modules as State machines