> some people will implement it, but the vast majority will just use readily made implementations coming with the JDK or other libraries.

I agree with this.

I chose "API" for the combined types since that feels like a generic term to me just to represent the public types we are exposing for the standard once we eliminate a division between SPI and API.

I not only eliminated the `spi` package, but the `api` package as well so the types just live directly inside `org.reactivestreams`.

> we should be clear about this decision

Definitely, and that's what I'm proposing this pull request for, to combine the API and SPI into a single set of types that serve the combined purpose.

I fully recognize that most people will use prebuilt implementations. The types though (even if using an implementation) are very good at communicating intent and contract, and are good public interaction points. Similar to how in code we often use `Iterable` as a type we pass around but rarely implement it directly. This is what I'm aiming for with this.