Easy XMPP: The Challenges
xmpp.org
xmpp.org
I love the federation. I love the JID (so much better than a phone number). I love the handling of multiple clients connected to the same account. But it didn't take. Even my tech friends ditched it. IRC held strong against all of the above and even Slack to some extent but XMPP just faded away.
Signal has a gif search and SMS/MMS fallback. What does XMPP offer to normies?
Whisper Systems wanted to get (their clever version of) strong end to end encryption in the hands of regulars users so they created Signal. Moxie has blog posts[1] and long discussions why XMPP was unsuitable in which he answers your idea: if vast majority of users will coalesce around ChatPro anyway, why not get the benefits of a centralized communicator?
Others want to silo their users, or offer this and that fancy feature. Why would they use XMPP?
And what is the benefit of using XMPP if it's really just ChatPro with a mostly unused s2s federation port open on their server somewhere?
[1] https://whispersystems.org/blog/the-ecosystem-is-moving/
I see an interesting niche for XMPP in business deployments, basically what's currently covered by Slack, where you (as a user) often need to have multiple accounts just to participate in different teams of your BigCorp.
XMPP allows a company to host their IM infrastructure on-premise or to use a service like ChatPro, and there is a business interest in requiring federation to allow easier interop with suppliers and customers.
We just failed to execute on that mission so far... ;-)
I don't think this is true. With email, SMTP is dominant, I do not know of any surviving legacy email service. To today's normie, email and SMTP are synonymous.
XMPP is an even more garbage name than SMTP, but if a standard united the market like it did with email, then there would be a word that is synonymous with that standard.
I think probably the best bet would be to try to turn SMTP into an IM protocol. Then people will make no (protocol-level) distinction between an email thread and an IM conversation. Threads and conversations can be both email.
Due to a variety of reasons our chat services overall have fallen out of shape and we are in the process of considering a full re-write. Part of the consideration is ditching XMPP altogether. It seemed to me that for products where chat is only one of the features, XMPP feels like an awkward add-on, requiring its own set of IDs and auth protocols.
AFAIK many popular chat services these days are no longer based on XMPP, for one reason or another (e.g. scalability). Would like to hear any recommendations on what the best ways to do real time chat services nowadays.
PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND
486 synapse 20 0 510,1m 81,7m 0,0 8,2 3:03.73 S python2.7
...
There are six user accounts on that Synapse and few activity (less than 100 messages per day).When I first installed it to play around with it, I joined #matrix:matrix.org and it brought Synapse to a grinding halt. Took quite some time to catch up with the thousands of peers it suddenly had to federate with, and I ultimately cleared Synapse's database to make it forget about all these peers.
For comparison, I also have a Prosody (i.e. an XMPP server) on the same box, which has about 10 user accounts and my own account is joined to a few moderately busy MUCs, so the number of messages is at least one order of magnitude higher. Yet memory usage is about one order of magnitude smaller (CPU usage is too infrequent to compare, but look at the "TIME" column for an initial comparison):
$ psgrep 'prosody\|synapse'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
synapse 486 0.1 8.1 522332 83664 ? Ssl Aug13 3:04 /usr/bin/python2.7 -m synapse.app.homeserver --config-path=/etc/synapse/homeserver.yaml --log-config=/etc/synapse/log_config.yaml
prosody 574 0.0 1.0 52408 10476 ? S Aug13 0:27 lua5.1 /usr/lib/prosody/../../bin/prosodyIt's also the first Matrix server, so there's that. Its replacement is in progress: https://github.com/matrix-org/dendrite
I have stopped to recommend Jabber/XMPP to people. Too many times I did that over the past 15 years and even when I succeeded in making them curious to try out... in the end there were too many problems and things didn't work right, and ultimately I too often looked like an idiot for recommending what is to other people just a broken tool. In the end, people don't care about "it's the choice that gives you freedom". People use the things that just work. And honestly, I can't even blame them (even if I'm personally not willing to give in to the privacy compromises that come with the other tools).
XMPP was mostly killed by Google.
They've done a few good things (Olm), and don't have to worry about backwards compatibility yet, but for the most part it seems like they're just reinventing the wheel and re-discovering problems XMPP fixed 15–20 years ago, except with a giant distributed graph protocol that doesn't scale very well (not that this matters for most people that aren't, eg. Google).
With Mix coming, I think XMPP will become/remain pretty awesome. https://docs.ejabberd.im/tutorials/mix-010/
There aren't any client's that can handle mix yet, but I think I saw something about it at Conversations GitHub.
https://github.com/dino/dino/tree/master/xmpp-vala/src/modul...
That is a huge deal. Having a de-facto reference client for all platforms with most of the features is very important. XMPP never had that. Google could have done it but they didn't.
I used XMPP for more than a decade and tried everyone else to switch, but it has always been lacking in many ways in all platforms, without a safe fallback option.
For the record, we have a working Desktop/Android client on the way, which supports file sharing, carbon, MAM, Jingle (for file transfer only so far, but voice/video is planed at some point), with unique interface, and more features to come. It is also working on web and console (TUI + CLI).
UI may need improvement, help is welcome.
https://www.goffi.org/blog/goffi/9ff9bb64-1e1f-4334-80e5-a86... and https://salut-a-toi.org/
These are all things that I have on Matrix out-of-the-box and that I have some trouble getting on XMPP.
I run my own XMPP server, I have been doing it for a couple of years, but getting some modern features is very difficult, if not impossible. But with Matrix everything is quite easy.
Android has Conversations, which has pretty good XEP support. But I can count on one hand the number of desktop clients that support this, and none of them are Pidgin[0] or Adium, which are probably the two most popular desktop XMPP clients (though it's hard to know for sure). Gajim supports it but not for multi-user chats[1].
Chat history is certainly not a solved problem overall in XMPP.
>It's only not a problem with Matrix yet because they have a single client
Matrix has lots of clients, the difference is it has an official reference client that supports (almost) all the protocol's features.
[0] https://developer.pidgin.im/ticket/15653 [1] https://dev.gajim.org/gajim/gajim/issues/8036
This process could be faster for sure, but that requires independent developers to work on implementations and to share their experience.
Because if have to look through tables and bug trackers to figure out what client/server combination I can use (and have to pester my friends to use(!)) you can't count something as "addressed" IMHO. I still use only a very basic set of features with XMPP, because in my experience attempts to get anything advanced are way to time-intensive to be worth it for the few buddies still on XMPP, and I can't really push new people onto it that way.
Let me stress this:
> production systems are advised to carefully consider whether it is appropriate to deploy implementations of this protocol before it advances to a status of Draft
That's from XEP-0363: HTTP File Upload.
Not sure this works as well elsewhere (e.g. the Matrix spec just states that it's "still evolving: the APIs are not yet frozen and this document is in places a work in progress or stale").
> WARNING: This Standards-Track document is Experimental. Publication as an XMPP Extension Protocol does not imply approval of this proposal by the XMPP Standards Foundation. Implementation of the protocol described herein is encouraged in exploratory implementations, but production systems are advised to carefully consider whether it is appropriate to deploy implementations of this protocol before it advances to a status of Draft.
It means that there will be one client that supports this (Conversations for Android) and maybe one server supporting this (probably ejabberd). Good luck navigating the minefield :)
Meanwhile I can install Slack on multiple devices and have the same functionality everywhere :)
No encryption by default. No sent and read receipt by default. User account and password hazzle. No audio chat. No video chat.
XMPP just doesn't cut it.
I think XMPP is doomed, because it doesn't enforce the things I listed, and I think it will never do so.
I was hoping to be able to adopt it for communications within my family and friends, but it did confuse me a lot. Especially on Android.
I used to have my own prosody server a long long time ago. Eventually, I got fed up, since very few people used XMPP. I just got rid of it and barely noticed any difference.
If I had some place where I could register my own user@domain that matches my own email, I'd use it for sure. But shelling out 5-10 USD a month for that isn't worth while, not for me, nor any other early adopter (especially when almost any other IM service is "free").
And since JIDs look email-like, people prefer them to BE exactly their email.
Add this article to the one above: https://gultsch.de/xmpp_2016.html
It doesn't help that most of the features expected of a modern chat are "warning: experimental" XEPs and supported by at most one chat client and at most one XMPP server.
Bazaar indeed
It simply has never been straightforward enough to do the right thing. Unlike with functioning protocols like HTTP and SMTP. XML was a fundamentally poor choice for wire and processing efficiency, XEPs don't get ratified quickly enough, and there's a chicken-and-egg problem between server and client software in implementing them even if they do.