Many of the parts for a complete printing system do not exist yet.
Projects are underway to address most of these, although most have
not yet produced running useful code, and efforts to standardize
the necessary protocols and APIs are in their infancy.
There's a general problem with getting all the parts to talk to
one another; especially in a spooler-independent way. This
problem manifests itself most noticably in the pathetic
application support for control over all the "usual" printing
features. There is simply no way for an application writer to get
information about printers, jobs, etc; no standardized way to
submit jobs; no good way to get job status back; nor even really a
standardized way to generate print data (although most of the new
desktop systems offer desktop-specific facilities for doing this).
Work to define a sensible API for applications to use for printing
will undoubtedly center around Corel's sysAPS library, which
provides a rudimentary implementation of several queueing and
printer information features.
Font handling on free systems is rather awkward. The display, the
printer, the application, and the data files should ideally all
have access to the same fonts. Unfortunately this is simply not
the case. Plans are afoot to remove font handling from the X
server, simplifying part of the problem, but good printer font to
application font mapping is still a problem. No project really
seems to be underway to address this; currently application
writers simply embed their own fonts into printed data.
Applications or spoolers need to learn about printer and driver
properties somehow. The current standardized scheme, implemented
on Windows, the Mac, and in CUPS, is to use Postscript Printer
Description files to drive a programatic interface and user
interface. This had trouble for non-Postscript printers, for
obvious reasons, so the IEEE's Printer Working Group has a project
to specify "Universal Printer Driver Format", or UPDF, files.
Thus far they have constructed a sample file in an XML format.
The sample file strongly resembles a PPD file, and is missing all
sorts of driver and platform specific information; so much so that
UPDF is currently not useful. IBM has a fully parameterized
driver architecture for OS/2 which is available as free software;
once this is released it is bound to be a useful source of ideas
or code, and possibly a good enough system to just use outright.
Even this system, however, provides no defined mechanism for
communicating interesting properties from the driver space up to
the application. Some XML format, and/or an API for fetching
assorted properties, is bound to appear at some point.
The state of free software drivers is rather poor. Fortunately,
several projects are underway to correct this, and impressive
results can now be had on printers using that code. The eventual
goal seems to be to provide both good drivers and a good framework
for the frequently duplicated (and hard!) parts of driver
code—dithering, for example—to be shared.
Printer vendor cooperation will be an important part of achieving
this goal. Vendors currently do not provide the minimum
documentation necessary to operate their devices well. At the
Printing Summit 2000, many vendors were present, and some small
headway was made on this point. Vendors are mainly concerned with
keeping the dithering and related algorithms secret; these
software components are what produces such remarkable inkjet
output, and the vendors are of course competing. Those vendors
present at the summit should now have a clearer picture of how
free software works and what we want from them. This isn't much;
bt it sets the stage for future progress.