That still wouldn’t solve the problems of many open source devs.
I, for example, develop an app connecting to servers that the users self-host.
I can’t modify the server, nor can I easily get it to send notifications.
But I want to be able to show notifications.
Luckily I can open a port to it and wait for them.
It’s impossible to solve with GCM.
XMPP supports that, so it should be possible to provide an optional extension to your protocol to do likewise.
On the phone they could then look if GCM is around (and use it) or if that other notification app is around (and use it) or propose to install said app. It's negligible in terms of user confusion because people on non-GCM systems likely know what they're getting into (except for those using Amazon Fire).