CUPS

**Common UNIX Printing System** eli **CUPS** on useissa UNIX-yhteensopivissa järjestelmissä toimiva avoin tulostusohjelmisto. Nykyään se on käytössä muun muassa macOSin ja useimpien Linux-jakelupakettien pääasiallisena tulostusjärjestelmänä.

## Historia

CUPS syntyi syksyllä 1993 vastaperustetun Easy Software Products (ESP) -nimisen ohjelmistoyrityksen 3D-mallinnusohjelmaprojektin sivutuotteena. Yksinkertaista tekstiä monimutkaisempien dokumenttien tulostaminen oli UNIX-järjestelmissä perinteisesti hoidettu Adobe PostScript -sivunkuvauskieltä käyttäen, mutta tämä lähestymistapa edellytti tulostimelta suoraa PostScript-tukea, jota ei kuluttajatason tulostimista löytynyt. 

Tuolloin GhostScript, suosittu ilmainen PostScript-tulkki, ei ollut vielä varteenotettava vaihtoehto, joten ESP:n ohjelmoijat päätyivät ohjelmoimaan omat tulostinajurinsa ja tulostusohjelmansa. Vuonna 1994 nämä ohjelmat julkaistiin SGI IRIX-käyttöjärjestelmälle erillisenä tuotteena nimeltä **ESP Print**. ESP Print ohitti nopeasti ESP:n mallinnusohjelman yhtiön suosituimpana tuotteena, ja vuonna 1995 yhtiö lopettikin mallinnusohjelmansa tuottamisen keskittyen ESP Printin kehittämiseen. Ohjelmisto siirrettiin myös HP-UX- ja Sun Solaris-käyttöjärjestelmille.

Kun ESP:ssä alettiin pohtia ESP Printin siirtämistä Digital UNIX- ja Linux-käyttöjärjestelmille, törmättiin ohjelmistossa käytetyn Berkeleyn LPD-protokollan (*Line Printer Daemon*) eri toteutusten välisiin epäyhteensopivuuksiin ja tiettyjen yleisessä käytössä olevien toteutusten teknisiin rajoituksiin, jotka lopulta johtivat LPD-protokollan korvaamiseen IPP-protokollalla. IPP-yhteensopiva ESP Print -ohjelmisto julkaistiin lokakuussa 1999 nimellä CUPS 1.0.

Apple osti projektin vuonna 2007 ja palkkasi sen kehittäjän Michael Sweetin. Marraskuussa 2017 Apple ilmoitti muuttavansa lisenssin GNU GPL:stä Apache-lisenssin versioon 2.0.

Sweetin lähdettyä Applelta perustamaan uutta yritystä projekti on saanut vähäistä huomiota Applelta.
Linux Foundationin OpenPrinting-projekti on forkannut CUPS-projektin väliaikaisesti ylläpitääkseen sitä. Applen lopetettua CUPS-kehityksen OpenPrinting jatkaa kehitystä yhteistyössä Sweetin kanssa.
Sweet on aloittanut PAPPL-projektin, jossa on IPP Everywhere -palvelu.

## Ohjelmiston rakenne

CUPSin tärkeimmät osat ovat **tulostusjono** (*scheduler/spooler*), **suodattimet** (*filters*) ja **taustaosa** (*backend*). Kun käyttäjä antaa dokumentin tulostettavaksi, lisätään se ensin tulostusjonon viimeiseksi. Kun dokumentti tulee tulostusvuoroon, suodattimet muuttavat sen tulostimen ymmärtämään muotoon ja taustaosa toimittaa sen tulostimelle, joka voi olla paikallinen tulostin tai verkkotulostin.

CUPS toimii käyttäjätilassa käyttöjärjestelmän ytimen ulkopuolella, mistä johtuen

# virheellinen tulostinajuri ei kaatuessaan kaada koko järjestelmää
# tulostinajureita ei tarvitse kehittää jokaiselle CUPSia käyttävälle käyttöjärjestelmälle erikseen

CUPS tukee kolmea TCP/IP-pohjaista protokollaa verkkoon kytkettäville tulostimille: AppSocket, Internet Printing Protocol ja Line Printer Daemon.

## Lähteet

## Aiheesta muualla
* Common UNIX Printing System -ohjelmiston virallinen sivusto
** Johdatus CUPSiin 
** Yleiskuva CUPSista 
* The CUPS Printing System