An SDK that requires a concrete HTTP client propagates that choice to every consumer, and two SDKs requiring different majors of the same client cannot be installed together.
public function __construct(
ClientInterface $http, // PSR-18
RequestFactoryInterface $requests, // PSR-17
StreamFactoryInterface $streams
) {}
// three interfaces rather than one, because PSR-7 messages are
// immutable and something has to construct them.
The three-interface constructor is the awkward part and it is why adoption took so long — PSR-7 has no way to create a request, so a client that only depends on PSR-18 cannot make one. php-http/discovery exists to paper over that and is itself a dependency. For an application none of this matters; for a package it is the difference between being installable alongside anything and being a resolution problem.