From what I understand, it's implemented on mobile carrier level, so any phone or other device with a cellular modem connected to a carrier that supports it should be able to use it (edit: of course, ignoring insufficient access, at the very least rooted Android or some Linux should work). Can't really find more specific details right now though. Here's a library and sample client for it though: https://github.com/Hirohumi/rust-rcs-client
Of course, this is only for clients, it's true you can't set up your own server.
It's like with SMS, needs communication of the OS to the modem to the carrier's server.
And just like with anything carrier related the progress is very slow, no mobile phone even supports it (for now only Android with Google's own app that connects to proxy to bypass the modem) and... is my opinion unnessesary.
Carriers already support it, and I think the reason Google sends it through their backend instead of the carrier’s is so they can support their proprietary extensions (that’s my guess at least, and I think I read that the app can also use carrier services directly but I can’t find the text that said that anymore). And as far as I’m concerned that means there are indeed many phones that support it.