CUPS provides a portable printing layer for UNIX®-based operating
systems. It has been developed by Easy
Software Products to promote a standard printing solution for all
UNIX vendors and users. CUPS provides the System V and Berkeley
command-line interfaces.

CUPS includes an image file RIP that supports printing of image files
to non-PostScript printers. A customized version of GNU Ghostscript
7.05 for CUPS called ESP Ghostscript is available separately to support
printing of PostScript files within the CUPS driver framework. Sample
drivers for Dymo, EPSON, HP, and OKIDATA printers are included that use
these filters.

Drivers for thousands of printers are provided with our ESP Print Pro
software, available at:

The Berkeley commands provide a simple command-line interface to CUPS
to submit and control print jobs. It is provided for compatibility with
existing software that is hardcoded to use the Berkeley commands.

The Common Gateway Interface (CGI) programs provide a web-based
status interface to monitor the status of printers, classes, and jobs.
Each of the CGIs utilize HTML template files that can be customized to
provide alternate appearances.

Convenience functions are provided to submit an IPP request, send a
print file, cancel a job, get a list of available printers, get a list
of available classes, get the default printer or class, get the default
server name, get the local username, and get a password string.

The color management functions handle gamut mapping and density
correction. These are integrated with the colorspace conversion
functions so that colorspace conversion and color management are
processed in a single step.

The polling daemon is used to poll a remote server for a list of
available printers and provide it to the scheduler for addition. A
separate polling daemon is run by the scheduler for every remote system
listed for polling in the scheduler configuration file.

The scheduler is a fully-functional HTTP/1.1 and IPP/1.1 server that
manages the printers, classes, and jobs in the system. It also handles
a simple broadcast-based directory service so that remote print queues
and classes can be accessed transparently from the local system.

The classes module is responsible for managing printer classes in the
system. Each class is a collection of local and/or remote printers. The
classes module also reads and writes the classes configuration file.

The client module is responsible for all HTTP client communications.
It handles listening on selected interfaces, accepting connections from
prospective clients, processing incoming HTTP requests, and sending
HTTP responses to those requests. The client module also is responsible
for executing the external CGI programs as needed to support web-based
printer, class, and job status monitoring and administration.

The configuration module is responsible for reading the CUPS
configuration file and initializing the appropriate data structures and
values. The configuration module also stops CUPS services before
reading the configuration file and restarts them after the
configuration file has been read.

The directory services module sends and recieves printer state
information over a broadcast socket. Remote printers and classes are
automatically added to or removed from the local printer and class
lists as needed.

The directory services module can only recieve printer state
information over a single UDP port, however it can broadcast to
multiple addresses and ports as needed.

The IPP module handles IPP requests and acts accordingly. URI
validation is also performed here, as a client can post IPP data to any
URI on the server which might sidestep the access control or
authentication of the HTTP server.

The main module is responsible for timing out and dispatching input
and output for client connections. It also watches for incoming
SIGHUP and SIGCHLD signals, reloads the server
configuration files as needed, and handles child process errors and
exits.

The Multimedia Internet Mail Exchange module manages a MIME type and
conversion database that supports file typing by extension and content
and least-cost file filtering from a source to a destination file type.

The lp command submits submits files for printing. Unlike the
standard System V lp command, a single CUPS lp command will generate a
separate job ID for each file that is printed. Also, the Solaris "f",
"H", "P", "S", and "y" options are silently ignored.