Dick,
> On Sep 15, 2025, at 3:28 PM, Dick Hardt <[email protected]> wrote:
>
> Would love to hear more about your interop experience with version numbers —
> are there a couple gotchas that come to mind?
[Note: This is a big rabbit hole because IPP has 26 years and supports several
billion clients/printers. I will try not to go too deep but let me know if you
want more details...]
The main thing is that when protocol versions are interoperable (i.e. the same
on-the-wire encoding/protocol) then you need other mechanisms to allow clients
to discover protocol features. For IPP that means allowing a client to query
metadata (in IPP the metadata is called "attributes", so the client sends a
Get-Printer-Attributes request to get back the capabilities and status of a
printer), and then the client can decide how best to communicate with the
printer (or give up...) The only time we really found versioning to be a
solution is when we needed to be certain that an extension to the IPP message
encoding was supported (IPP/2.0 requires "collection" value support, which is
optional for IPP/1.x).
IPP also has the notion of a "feature" which can group multiple optional
operations (endpoints in OAuth), attributes (key/value pairs), and
semantics/behaviors. For example, if a printer supports the IPP "cloud
printing" extensions, the client can discover this by querying the
"ipp-features-supported" printer attribute and looking for the keyword "infra"
(the nickname for the spec) rather than looking for all of the operations and
attributes required by the spec.
In addition to allowing clients and servers to discover capabilities, it is
important that an existing ("old") client be able to work with a "new" server,
and vice versa, assuming that the client and server support a common subset
necessary for interop. As a concrete example, the CUPS 2.5+ OAuth code
explicitly only supports an AS that provides either RFC 8414 or OIDC metadata,
and tailors its requests to use security features (PKCE, OIDC nonce, token
exchange, etc.) advertised in the metadata. Obviously, a client could be
written/configured to require specific features (as a local security policy),
just as they can be configured to only support certain AS
implementations/providers today.
________________________
Michael Sweet
_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]