berneout / round-robin-license

https://roundrobinlicense.com
Other
15 stars 2 forks source link

The Application exception: Explicit interfaces, or Hyrum's Law? #12

Open eternaleye opened 7 months ago

eternaleye commented 7 months ago

The phrasing of the Application exception in version 2.0.0 of the license is:

You don't have to contribute any software that only invokes this software's functionality through the interfaces this software exposes, unless it exposes so much of this software's interfaces or functionality to users, programmers, or other software that it becomes a practical substitute for this software for any substantial portion of its use cases. Interfaces exposed by this software include all the interfaces this software provides users, programmers, or other software to invoke its functionality, such as command line, graphical, application programming, remote procedure call, and inter-process communication interfaces.

However, it's unclear to me exactly how to evaluate the interfaces this software exposes. It's made clear who the users of these interfaces are, and what mediums of interaction are covered, but there's no guidance as to intentionality.

As a result, I'm worried that Hyrum's Law applies: any observable behavior of the software becomes part of "the interface", and thus is grounds to apply the exception in cases that may not be intended (e.g. if the "public" interface is intended to be an RPC protocol, an application that embeds the entire project wholesale and thus also wraps its configuration files and its service lifecycle may still be covered by the exception, contrary to the author's intent).

I'm not sure whether this is intentional, but if it's unintended the only thought I have at this time is to replace

through the interfaces this software exposes

with

through the explicitly public interfaces this software exposes

and rely on the developer to declare which interfaces qualify as such; e.g. as the Linux kernel declares its syscall interface is a public API, or EXPORT_SYMBOL in kernelspace (as opposed to EXPORT_SYMBOL_GPL).

kemitchell commented 7 months ago

Thanks for your thoughts!

The license provides illustrative examples of exposed interfaces. As you quoted:

Interfaces exposed by this software include all the interfaces this software provides users, programmers, or other software to invoke its functionality, such as command line, graphical, application programming, remote procedure call, and inter-process communication interfaces.

I wouldn't read that as a definition within the text. Just a usage.

As I've mentioned on my blog, the default rules for interpreting contracts under US law can and will look to what people mean by words in ordinary usage, as well as what they mean in particular industries and businesses.

There's a kind of clever truth in "everything becomes the interface", in the sense that people will rely on quirks of behavior, so changing that behavior may disrupt users in unexpected ways. But I don't think that actually makes every part of software its "interface" as we ordinarily use the term, and therefore as that term will likely be read in the context of this license.