Every free centralized messaging service at some point needs to find a business model that finances the platform. Right now the (IMO) best choice are decentralized messaging protocols such as XMPP (https://xmpp.org/) or Matrix (https://matrix.org/). Similar to email you can (i) run your own server or decide which server to use (ii) communicate with people on other servers, and (iii) choose from multiple independent client and server implementations.
For Matrix Riot is the best client implementation which runs on multiple platforms (https://riot.im/). The (afaik) only usable server implementation is the reference implementation (https://matrix.org/), but at some future point the currently pre-alpha Rust-based Ruma implementation (https://www.ruma.io/) could be a good choice too.
A nice thing about XMPP is that server-based transports can provide gateway-functionality to other networks. For example with Spectrum (http://spectrum.im/) it's possible to use your XMPP client of choice to chat with your friends that use Facebook Messenger.