*Disclosure: I work on MongooseIM.* _____ I recommend one of the Erlang-based servers: either [**MongooseIM**](https://www.erlang-solutions.com/products/mongooseim-massively-scalable-ejabberd-platform) or [**ejabberd**](http://www.process-one.net/en/ejabberd/). MongooseIM was originally a fork of ejabberd, but the codebases have diverged quite a bit in recent years. These servers stand out among the other options not in terms of feature-richness ([they *do* offer lots of features, though](http://en.wikipedia.org/wiki/Comparison_of_XMPP_server_software)), but because they leverage the scalability mechanisms offered by the Erlang/OTP platform. To address your points: > is scalable Erlang is amazingly scalable. WhatsApp is the latest poster child for Erlang scalability, but if you google around, you'll find lots more. > can handle between 10 and 15 million users If you want to scale to millions of users, be prepared to build a cluster of beefy machines with lots of RAM (both these servers are memory-bound). There are deployments in the wild with ~2 million users that I know of. The [League of Legends](http://www.slideshare.net/michalptaszek/strange-loop-presentation) chat runs several federated clusters that handle 70 million users, but they're using a very heavily modified ejabberd. > runs on Linux and/or Windows You're probably better off running on Linux. Erlang does work on windows, but I'm not sure how well large-scale applications perform on the platform. > is Open Source Yes, both are open source, licensed under the GPL.