I made the GRFC for keepalive. Yes, keepalive is disabled by default, and lots of people could benefit from it being enabled. Today those users have to enable it manually.
There's two pieces as to why.
First, I received a lot of push-back (in various forms) about keepalive in general, and the costs in incurs and the DDoS risk. Keeping it disabled by default avoided some of the concerns and so we could get the feature out to users sooner. The interoperability landscape has changed some here as well; previously we would have needed some hacks in the our spec because I was aware of proxies that didn't allow keepalive at all.
Second, the solution for "defaults" is currently incomplete, as
IDLE_TIMEOUT is not implemented cross-language (only Java implements it today). For a full solution you need to handle the case when there are no RPCs. But trying to enable KEEPALIVE_WITHOUT_CALLS by default is a non-starter. Instead, IDLE_TIMEOUT is a more efficient solution when there's been a period of inactivity. I was waiting for IDLE_TIMEOUT to be implemented before coming back around and arguing that we should have some of this stuff on by default. Lack of IDLE_TIMEOUT in languages has been causing enough of a problem (there's workarounds but...) I was able to get agreement that we need to make progress on this this quarter.