[cups.bugs] incorrect permissions on dnssd and lpd

Michael Sweet msweet at apple.com
Mon Apr 30 10:33:59 PDT 2012


Johannes,

On Apr 18, 2012, at 3:30 AM, Johannes Meixner wrote:
> ...
> I would appreciate it if the CUPS documentation provides explanatory
> background information how this and that is meant in CUPS in particular
> - what is a stable interface
> - what is not stable in case of minor release updates
> - what is not stable in any case (i.e. what is an implementation
>   detail, in particular what is "private" e.g. private APIs)


I will look into this (would be great to have a bug for this BTW! :), and much of this is covered in the CUPS developer guide (http://www.cups.org/documentation.php/spec-cmp.html), but specifically:

1. What is a Stable Interface?

For C APIs, anything that is documented in the online help and public header files is a stable interface unless it is specifically marked as "deprecated", in which case that API should not be used unless necessary.

For program interfaces (e.g. the filter and backend interface), the interface in any production release of CUPS is stable. However, the interface is only stable from the standpoint of the program being invoked, not for third-party applications that might try to simulate it.  For example, CUPS has added new environment variables and standard file descriptors to the CUPS filter and backend interface since the original 1.0 release. CUPS 1.0 filters and backends continue to work in the current release of CUPS, however a third-party application written for the CUPS 1.0 interface cannot run other CUPS filters and backends directly that were written for a later release of CUPS.

2. What is not stable in case of minor release updates

If you are referring to "patch" releases (CUPS major.minor.patch), we do not add new interfaces (or change existing interfaces) in patch releases. Except in extraodinary circumstances, only a "feature" release (CUPS major.minor.0) may contain new interfaces.

3. What is not stable in any case (i.e. what is an implementation detail, in particular what is "private" e.g. private APIs)

Anything that is not specifically documented is not stable. For example, the location and format of the job data and control files and various cache files cupsd uses are not stable (and have changed many times).

CUPS configuration file formats are generally stable, however there are serious dangers involved with hand-editing some files (e.g. printers.conf and classes.conf) while cupsd is running, and those dangers are displayed prominently in the online help, man pages, and at the top of the corresponding files.

For C APIs, any function, constant, structure, union, type, or macro prefixed with an underscore is a private interface or implementation detail. These may be defined in a private header (whose name contains "-private"). These must NEVER be used by third-party software as private APIs are guaranteed to change between CUPS feature releases and *may* change even between patch releases.

________________________________________________________________________
Michael Sweet, Senior Printing System Engineer, PWG Chair





More information about the cups-devel mailing list