# Common Unix Printing System

Common Unix Printing System (CUPS) ist ein freies Drucksystem, ein Daemon, der das Drucken unter den verschiedenen unixoiden Betriebssystemen sowie unter OS/2/EComStation ermöglicht.

## Geschichte

CUPS wurde vom Unternehmen Easy Software Products entwickelt und kann sowohl unter der GPL als auch unter proprietären Lizenzen verwendet werden. Es wurde als Nachfolger von älteren Drucksystemen, wie beispielsweise LPD, entworfen.
Am 11. Juli 2007 gab Apple bekannt, Michael Sweet, den Hauptentwickler von CUPS, angestellt zu haben. Gleichzeitig übernahm Apple auch die Rechte an CUPS. Gleichzeitig wurde ESP Print Pro, das kommerzielle Produkt von Michael Sweet, welches auf CUPS aufbaut, eingestellt.
Mit der Version 2.1.0 wurde grundlegende Unterstützung für 3D-Drucker hinzugefügt.
Am 7. November 2017 verkündete Apple, dass CUPS mit Erscheinen der Version 2.3 unter der Apache-Lizenz verbreitet wird.
Im Dezember 2019 hat Michael Sweet Apple verlassen und unterstützt seitdem das Folgeprojekt (Fork) OpenPrinting.
Im September 2024 wurde eine schwere Sicherheitslücke in CUPS bekannt, die Angreifern eine Remote-Code-Execution ermöglichte. Für große Linux-Distributionen wie Ubuntu oder Fedora wurden Aktualisierungen herausgegeben, welche die Lücke schließen.

## Architektur

CUPS besteht aus einer Client-Server-Architektur; das heißt, das Programm ist in einen Druck-Client und einen Druck-Server aufgeteilt: Der Druck-Client schickt die Druckaufträge, der Druck-Server erledigt das Drucken auf dem Rechner, an dem der Drucker angeschlossen ist.
Der Druckauftrag eines Clients wird an einen Prozess-Scheduler gesendet, der die zu druckenden Daten gegebenenfalls durch ein Filtersystem in das portable PDF-Format konvertiert (bis zur Version 1.5 war dieses interne Standardformat PostScript). Diese Daten werden schließlich zu einem Back-End gesendet, welches sie entweder auf dem entsprechenden Drucker druckt (und die PDF-Daten dafür umwandelt) oder sie über ein Netzwerk an einen anderen CUPS-Server verschickt.
Der Hauptvorteil von CUPS gegenüber anderen Drucksystemen ist, dass es ein standardisiertes und modularisiertes System ist, welches eine Vielzahl von unterschiedlichen Daten auf dem Druckserver versteht (z. B. PDF-Dateien, PNG-Bilder, LaTeX-Texte). Mit einem solchen System ist plattformübergreifendes Arbeiten in heterogenen Netzwerken möglich. In Verbindung mit Samba lassen sich sogar CUPS-Dateien über einen virtuellen Spooler drucken, mit welchem Windows-Rechner kommunizieren können. Wichtiger Bestandteil ist die Implementierung von IPP, das in einem einzigen Protokoll bidirektionale Kommunikation über Proxies, Firewalls und Router hinweg ermöglicht, die auch einfach mit TLS verschlüsselt werden kann. IPP wird zur Kommunikation zwischen Servern verwendet, wird aber auch zur Kommunikation zwischen Backend und Endgeräten verwendet.
In einem CUPS-Server ist ein HTTP u. HTTPS-Server standardmäßig integriert. Dies ermöglicht auf der einen Seite eine Konfiguration jedes Computers im Netzwerk des CUPS-Servers, auf der anderen Seite ist auch eine gewisse Benutzerfreundlichkeit durch ein ohne besondere Software nutzbares Steuerungssystem geschaffen (lediglich ein Webbrowser ist notwendig). Das CUPS Web-Interface kann unter http://localhost:631 angesprochen werden.
Für die Konfiguration stehen Kommandozeilentools, Webinterface oder eine auf ZeroConf (Bonjour, Avahi) basierende automatische Erkennung und Einrichtung von Druckern zur Verfügung.

### Erweiterbarkeit

Über CUPS-Backends (Backend-Filter zur Weiterverarbeitung der Daten) lässt sich CUPS mit Hilfe von eigenen Skripten anpassen. Einige Backend-Filter sind bereits mitgeliefert, wie smb zur Ansteuerung von Windows-Druckern via Samba, ipp für den Zugriff auf Warteschlangen anderer Hosts über das Internet Printing Protocol, pipe für das Weiterleiten des Druckauftrages an ein anderes Programm oder auch file für die Ausgabe in eine Datei. Des Weiteren gibt es pap für die Ausgabe auf AppleTalk-basierten Druckern z. B. via Netatalk oder Columbia AppleTalk Package (beides AppleTalk-Datei- und Drucker-Server).

## Benutzerschnittstellen

Neben dem Webserver-Frontend existiert eine Vielzahl von grafischen und konsolenbasierten Dienstprogrammen, mit welchen sich CUPS-Systeme auch über das Netzwerk steuern lassen.
* GtkLP – ein grafisches Frontend zum Drucken von Dateien für Gnome
* KDEPrint – bis 2007 ein grafisches Frontend für KDE bis KDE3
* ESP Print Pro – bis 2006 ein grafisches Frontend von Easy Software Productions (Hersteller von CUPS)
* Unter ZETA kann das Print_Kit auch auf ein CUPS-Subsystem zugreifen, und neben den ZETA-Druckertreibern werden auch portierte CUPS-Treiber nebst entsprechenden PPD-Dateien unterstützt. So kommunizieren das Print_Kit und der Spooler über CUPS-Treiber mit den Druckern, die durch PPD-Dateien beschrieben sind.
* Das Druckerdienstprogramm unter macOS
* Einzelne Linux-Distributionen haben eigene GUIs.
* Für das Betriebssystem OS/2/eComStation wurde bis ca. 2011 das System als eCups entwickelt.
* System-config-printer wurde 2006 von Tim Waugh in python programmiert.

## Apple-spezifische Entwicklungen

Mit Version 1.6 ließ Apple einige Funktionen entfernen, die für Linux-Systeme und Unix-Systeme von Bedeutung sind, da sie für macOS (OS X) nicht gebraucht werden. Dazu zählen diverse Filter zum Umwandeln verschiedener Text- und Bitmap-Formate in Postscript und eine Funktion, die zur Verfügung stehenden Drucker-Warteschlangen abzufragen. Die Filterentwicklung wurde daraufhin von dem Openprinting-Projekt „cups-filters“ übernommen. Ursprünglich hatte CUPS ein eigenes System zum Auffinden von Druckerwarteschlangen im Netz. Dieses basierte auf Netzwerk-Broadcast und hatte entsprechende Nachteile. Mit der Einführung von „DNS Service Discovery“ in OS X, das die Funktion, Dienste im Netz auffindbar zu machen, erfüllt, wurde dieses Teilsystem in CUPS überflüssig und somit entfernt. Unter Linux wurde diese CUPS-Funktion in eine eigenständige Erweiterung namens „cups-browsed“ entkoppelt. Die neueste Entwicklung von CUPS sieht vor, den gesamten Druckvorgang treiberlos zu gestalten. Damit wird die Unterstützung von PPD-Dateien und RAW-Druckern entfernt. Dazu müssen die Drucker das Internet Printing Protocol (IPP) mindestens in der Version 2.0 unterstützen, was bei Druckern der letzten 10 Jahre wahrscheinlich gegeben ist. Mit diesem Protokoll kann man alle Fähigkeiten des Druckers, wie sie sonst in den PPD-Treiberdateien beschrieben sind, direkt abfragen. Damit wird es möglich, auch von allen Geräten, für die bisher kaum Drucklösungen existieren (Smartphones, Tablets …), zu drucken; und auch auf Desktopsystemen wird die Druckereinrichtung damit so simpel wie noch nie. Auch wird damit erstmals die Lokalisierung (Übersetzung) der Treiber vom Server übernommen, die Hersteller müssen sich nicht mehr um Übersetzungen ihrer Treiber kümmern oder gar unzählige Sprachversionen von Treibern pflegen.