The Problem
Printing under Linux has historically been a problem because of, well, the history of Linux. Since Linux is based on Unix, which has a history stretching back to the middle-ages (1960's), the printing arrangements which most systems come with are geared, or at least have elements from, the Unix printing needs of that time.
These needs can be summed up as: Either very high or very low quality printing for large organisations. In the days before laser printing became cheap many systems had "draft" printers and "final" printers which varied in quality and cost.
Today many homes and small offices have Unix/Linux systems attached to a single inkjet which is operated in several modes, and sometimes also to a black and white laser printer.
Two problems arise with this setup and current Linux printing methods. One is the basic issue of getting good drivers for inkjet printers, which is now largely solved, and the other is the fact that Linux's traditional print services do not understand the idea of multiple virtual printers on the same physical printer (i.e., a single inkjet which can print in various radically different modes).
Many, many, many solutions have been proposed for fixing Linux printing but most have concentrated on large organisations and their security and bulk issues. I run a very small IT Department with two printers and four machines behind a firewall. I am thus more interested in utility than security so implementing eight RFC's is right out!
Other issues with current systems include the inability to handle TrueType fonts (CUPS, for example was originally based on a buggy version of Ghostscript and died when ComicSans or Verdana is used in a job. Even today CUPs is based on a very old version of Ghostscript), and the difficulty of users manipulating the settings of the printer from within programs which have no understanding of the print control system being used.
Ironically, this last point is the key to getting a decent system running: by using the ignorance of StarOffice, Dvips, Mozilla, or Opera it is possible to construct a print daemon which actually allows the normal user to access all their printers' settings without any special permissions or resorting to GUI tools which fail when accessing the print server over telnet or which require root permissions to set the paper size.
The solution, which I will call CPS (Coherent Printing System), is a set of Perl scripts called "lpr", "lpd", "lprm", and "lpq". These replace the programs of the same name which come with many Linux systems.