The history of GCMS traces back to 1998, when I bought an inkjet printer (EPSON Stylus Color 600), which was capable of producing photo-quality printouts -- provided the right software was used. The print quality with UNIX printer drivers available at the time (uniprint in GhostScript, and the GIMP print plugin) were not even close to the quality of the (Windows and Mac) drivers supplied with the printer.

So I decided to try my own approach and write a driver for it. I soon had the driver working, but halftoning and colour calibration turned out to be a real problem. After another re-write, I came across the ICC standard and decided to write a more general piece of software, called GCMS, which could use ICM profiles for printer calibration, and once the colour code was there, why not make it available as a library?

So, for more or less historical reasons, GCMS consists of a library (libgcms.{a,so} with its corresponding header files gcms.h and libgcms-*.h) and a command-line tool, gcms, which is capable of using most of the features of the library. The library includes routines for printing directly.

The reason for making an integrated colour management system and printer driver is that the data that has to be transferred between the CMS and the printer driver is rather awkward to handle: imagine a photo printer with six inks (CMYKcm), so the entire calibrated CMYKcm image has to be transferred to the printer driver in a proprietary image format, which has 16-bit pixels, otherwise details are lost... It is so much easier to transfer the pixels one-by-one as they are generated, directly into a printing subroutine, as a structure containing floating-point numbers.

GCMS has been hosted by SourceForge since February 2000, but is significantly older than this in its current form.