XMPP, a comeback story
takebackourtech.org
takebackourtech.org
They have things they want done, like chatting with a friend. They want a solution that delights them in doing that. What delights people has generally changed (like more people care about others not listening in these days).
Whose the user and what's their experience? This is where XMPP always failed me. The clients had a poor experience.
If someone wants that to change now... focus on a great experience for the people you want to be users.
> Web3 revolves around the idea of a decentralized Internet. Proponents often contrast this to Web 2.0, where large amounts of the web's data and content are centralized in a fairly small group of companies (often referred to as Big Tech). [0]
> Specific visions for Web3 differ, but all are heavily based in blockchain technologies, such as various cryptocurrencies and non-fungible tokens (NFTs). Some visions are based around the concepts of decentralized autonomous organizations (DAOs), which seek to enable many people to have equal ownership and governance in an organization. Decentralized finance (DeFi) is another key concept, in which users exchange currency without bank or government involvement. Self-sovereign identity allows users to identify themselves without relying on a centralized authentication system like OAuth.
Note how the common thread is that these are all working around the scalability and reliability issues inherent to the popular blockchains. It's perhaps survivable for an identity system to be that slow when making changes if you don't do that very often, although it's definitely a risk for the overall network, but there's no way you're building an XMPP competitor on top of it even before you think about handling audio/video content, and privacy would of course preclude that as well.
That means that you're really building a system which looks a lot like the competitors except using something like a wallet ID to login. Beyond being rather less disruptive than the Ethereum salespeople like to tell you, that's going to look a lot like XMPP — a traditional networked service running a protocol of some level of standardization, only with a different login option. There are some natural trends which are hard to avoid: users will gravitate to the more reliable service offered by the larger companies who can invest more time in optimization, various parties will add extensions which either aren't well documented for competitors or favor their infrastructure choices, and abuse will be a problem which leads to some combination of arbitrary moats being created or users leaving to services where they don't get spam.
That last point is key: imagine if your web3 messaging startup starts to see enough usage that spammers descend en masse? Your real users will leave unless you do something about it. You can add entry fees, which will tank your user growth (which is probably already dangerously limited if you require a blockchain ID), or restrict federation to peers whom you trust to control abuse by their users.
I don't really see this taking off and succeeding in the long run sadly. Don't get me wrong, I'm rooting for it. But I'm pretty sure the game is already rigged.
Decentralization sounds like a great idea but I've been watching that generally fail since the 90s and I think there are some challenges beyond aggressive acts by big players. Part of this comes down to how the terms are used to cover different levels: most of the advantages of decentralization at the infrastructure level are less pronounced in an era where a single entity can easily run code around the world and there are some drawbacks related to things like caching or security. “Distributed, run by one party” is probably going to outperform “Distributed, run by many parties” for most users and the things which are going to make them switch to something else would be high-level things like decisions about the product direction.
The higher-level organization trade-offs are less clear cut, I think. There's an advantage in having more than one party making decisions but it also harms your overall reaction time somewhat substantially. Other than the web and email there aren't all of that many success stories and I wouldn't feel too secure about email long-term. That suggests to me that we might be prone to give the drawbacks insufficient weight when we're thinking about decentralization, especially when it comes to the challenges of controlling abuse. I ran my own Jabber servers for a while and it worked well at work (centralized) but basically all of my personal messages came either from people on Google Talk or spammers. It wasn't just that Google put more money into running servers or building apps but that there wasn't a great path forward for a lot of features which federated services offered.
Re: spam, think a bit longer about that — how much spam do people get in email versus Facebook or Twitter? Those platforms have a lot of users who value their control of user signups, monitoring, and ability to arbitrarily remove spam messages after delivery.
Email is one of the most distributed systems in the world but a rather large fraction of users self-centralized on Gmail. That wasn’t just spam control but I think it’d be really useful to think about why some new system wouldn’t follow the same arc: if your argument is “cyberpunks wouldn’t accept it”, remember that we had that ethos arguably even stronger back then and it didn’t have the predicted effect.
[1] https://f-droid.org/en/packages/eu.siacs.conversations/
[2] https://gajim.org/download/
[3] OMEMO is an XMPP Extension Protocol (XEP) for secure multi-client end-to-end encryption based on Axolotl and PEP. Might want to go through https://dev.gajim.org/gajim/gajim-plugins/-/wikis/OmemoGajim....
Check out these files:
- src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java
- src/main/java/eu/siacs/conversations/services/AppRTCAudioManager.java
- src/main/java/eu/siacs/conversations/services/AppRTCBluetoothManager.java
For the most (or all?) part it seems like it is related to Bluetooth audio. There are stuff about establishing connection to headsets and whatnot.
[1] https://f-droid.org/repo/eu.siacs.conversations_42023_src.ta...
I've been looking for a modern self-hosted chat solution. I want it to be XMPP so badly (running XMPP with something like prosody is so convenient). The clients are really letting me down though. Desktop clients are old-fashioned and awful (I could get behind that, but I don't think my kids could). The mobile situation is even worse.
The new-fangled chat solutions (Matrix, Zulip, etc.) are interesting, but the operational requirements are insane (in the case of Matrix, I'm also very nervous about reliability).
I can't say I'm super hopeful, but I'm rooting for you, XMPP.
Sending push notifications, which is broadly necessary for achieving both performance and battery efficiency, has been strictly centralized and locked down (understandably, I'd hate to try to block abuse if I were running it). Federated systems with multiple apps were pushed out because there was no sane way to achieve that with the push architecture, and that's still the case. You see the same thing with nearly any third-party app, they're nearly always partly-crippled experiences because the first-party will not send push notifications to anything but their own app.
If there was, it wouldn't take much to make an XMPP extension or three for the client to provide a push url to the server. Client devs would (probably) need to standup a push proxy, so xmpp server pushes to client server pushes to client, because I don't think many platforms give out push urls that can be securely passed on to 3rd parties. There's some expense there, but not a whole lot, IMHO.
What I really like about XMPP is that I can do precisely this. Also, setting up and running prosody is dirt simple if you have any UNIX experience. IMO it's even simpler than running your own web server.
While it's been an awfully long time now, I seem to remember that services like AIM didn't successfully move to mobile because they required stateful connections similar to telnet/SSH, and that was something that just wasn't (and largely still isn't) possible under iOS.
AIM is a lot like AIM, and it worked fine on BlackBerries.
Google had an xmpp system (google talk) for which they have a first-party app which they send push notifications to. No other xmpp app can take advantage of that for google accounts - they all need to run, essentially, an xmpp-bouncer + their own push notification infrastructure and client implementation.
In ye olden days, a google-free version for google-free xmpp accounts could not be built in many cases, as the mobile device's APIs wouldn't let you hold open connections in the background like that - that was unique to the platform-owner (Android / iOS). Now you basically can, but each implementation increases battery use, so there's a fair bit of pressure to use the built-in one instead... which you can't do, Google won't send your app any push notifications that are intended for their apps.
---
The same thing applies to email apps, for example. IDLE just plain doesn't work well enough on phones, so email apps build their own email backends so they can use google's push notification infrastructure to push notifications for google-owned email account events. Google is the first party here, owning the email account and infrastructure, but not sending notifications to other email applications.
And also for basically any third-party app for basically any service. E.g. Talon (a third party twitter app) has to resort to polling Twitter's API to do anything. But those at least aren't federated systems, so though I'm still a bit sad about that, it's much more understandable that it happens.
yep, that's the downside of xmpp, isn't it? How could that be mitigated?
Still, battery is important to consider, so what have we done in XMPP to improve energy efficiency in the past 15 years?
One of the first things we did was define a way for clients to reconnect a session that suffered a broken connection - the classic "I just went through a tunnel" scenario. With this optimization we gained two things: a way to quickly reconnect without resynchronizing everything, and a guarantee that no traffic was lost in the process due to the network interruption.
Secondly, we've implemented traffic optimization in servers. Clients will tell the server when they are idling in the background, and the server will stop sending any traffic that isn't time-sensitive. As soon as the user focuses the app, it tells the server and the connection switches back to "real-time" delivery. This behaviour helps keep network activity low when the client is in the background, and prevents continuously waking up the device's radio (such wake-ups can be quite power hungry over the course of a day).
Finally, modern mobile XMPP clients support push notifications, which is the Apple/Google sanctioned way of solving this problem. It means that you can safely close the XMPP client entirely and still get notified when you receive messages.
There's probably more besides these things that I've forgotten but I think these changes are the highlights!
Not understandably at all, the reason for the lockdown is not for your benefit even if it is portrayed as such. Push notification can be run just like SMTP and is subject to the same type of abuse with the big difference that it actually easier to keep the spammers out since you know up front which senders are allowed to send notifications. It would be fully possible to self-host a push notification daemon which connects to those services which are meant to send you notifications, to which your devices connect for notifications. If you don't want to self-host it would be possible to choose a notification service just like you can choose an email provider. Things could be just as hands-off as they are now without being forced to open an Apple/Google/Microsoft account and hand over your communications to them.
Don't be fooled by these 'for your protection' lockdowns, they are for the benefit of the one doing the lockdown, not for your own.
And tbh I'm not sure SMTP serves as all that positive of an example. It works, sure, but the reputation system and extreme complexity that has sprung up around it makes it difficult for newcomers to join - I can't just host one from my house, most email hosts will reject my emails. It works in spite of all this because it has too many large actors already using it for any new ones to stand any chance of rejecting (or improving) it.
> Signup for an XMPP service anonymously
Unmoderated networks quickly degenerate spam pits from Hell. It worked in 90s when everyone was still polite in Internet.
I'm ashamed to admit this but I even wrote software what ran on Windows 95 and would spam chat rooms with thousands of phrases generated on the fly from a dictionary. The intention was it would run over a RAT (also of my creation) and get other people booted off the chat room. ie the spam would be posted by other people in chat rooms against their will and channel admins would then kick them. I wrote this because at college we "only" had dual ISDN lines and kids in chat rooms would slow down my warez downloads.
I know, I know, the justification is worse than the tool itself. But we were young, I've grown up since and these days the lessons I've learned from my college exploits are put to good use :)
There were plenty of mobile applications that supported multiple chat protocols. There might even still be. The issue is proprietary protocols would often change breaking support -- I suspect intentionally breaking support for 3rd party client.
Linux / Unix nerds running FOSS would be tolerant of that but I suspect your average smart phone user who might have spent 99c on the client would be less understanding.
kaidan.im is also a new KDE client.
Yeah! I ran my own XMPP server on my home network and used it to accept status messages from other boxes on my network. Worked really well. The clients were generally horrible though, especially the IOS ones. I've now switched to MQTT.
These days I believe very much in identifying and serving a specific set of users. XMPP is just a protocol, it has lots of potential applications, but it's nothing unless you channel that into a tangible usable product for real people.
This epiphany came to me after more than 10 years of working on XMPP as a server developer and spending time promoting open communication protocols to people. It was soul-crushing that at the end of a day I would still see my own family communicating with each other via WhatsApp.
Six months after the initial Snikket prototypes, and after a little user testing, I migrated my family over to XMPP by sending a simple invitation link (the start of the Snikket onboarding journey). They're now using it daily and totally happy with it. I'm beginning to hear similar stories from others who have repeated this with their own families/groups and their own Snikket setups.
All it took was to look at the issue through the eyes of "normal people" for a moment, and it changed my approach (and success rate) significantly.
My focus with Snikket is on making it as easy as possible for people to run their own server (hosted or self-hosted), and to avoid a repeat of the Google situation where 99% of the network was controlled by a single (volatile when it comes to messaging apps) entity.
Snikket may not be for everyone, but that's kind of the point of XMPP. Snikket users can text and call Quicksy users with E2EE, and vice-versa, despite using two different systems.
What do you think the best path is to that feature? Element seemed to have audio calls already, but not voice channels.
Also basic features like push to talk and noise thresholds are key.
Do you know any alternative Linux clients?
I'll have a dig in the conf files, perhaps I can configure an account manually.
Siskin seems to be the best of these three, but is neither as reliable nor as feature-complete as Conversations on Android or Gajim on the Desktop.
I think Android is the only platform that currently has a good user experience with Conversations or Quicksy for the less technical people.
The iOS app hasn't yet been through a thorough visual review, though it is planned in the coming months (a number of fixes are already in beta builds though).
Thanks for the feedback!
If we got a nickel from everyone that complained about XMPP client fragmentation, we would have funding to pay enough man-hours to get high-quality clients for every major platform and even the minor ones.
It's a nice protocol, but if you're missing all the conversations it doesn't help. When it was popular, it was the system that let you connect Yahoo to Google to MSN to Facebook to Zephyr to... it's network effects, people have to be on it for anyone to want to use it.
It's a variation of the prisoner's dilemma. If one party shares and the other doesn't, the market becomes lopsided. It's why every big permissively licensed non-copyleft product so far hasn't managed to build an ecosystem outside of a few select distributors.
With protocol specifications the problem is much harder. Market dominance can be maintained by slight incompatibilities.
So I could connect to all the networks from one app
Today the would connect Facebook, Teams, Slack, Whatsapp, signal, etc etc...
That would be the dream....
Most people, including myself, don't really care about the proprietary nature of Discord. I can fairly trivially move off Discord if it fails me so I don't really see the point in working harder to use Matrix.
[1]: https://cinny.in
In the end I left the project before they got it working. I have no idea if it ever got deployed.
It’s not falling out of fashion a bit with many of the trading clients moving to web based interfaces but it have a sense it will still stick around for a long time.
And there are federated networks like the one from Markit
https://www.businesswire.com/news/home/20131007005587/en/Glo...
I don’t think there is a single major financial messenger today that isn’t based on XMPP.
Quite the opposite: users actively do not want federated systems, as federated systems allow anyone on the internet to spam them. This is why Google Talk stopped supporting federation: 99.9%+ of users never used it to talk outside of Google instances, and 99.9%+ of the inbound messages from the outside world were spam.
Large walled garden IM platforms have the spam problem potential. It's solved by using whitelists (via invites) instead of blacklists. The same mechanism is trivial to accomplish using XMPP, and I'm sure there are already XEPs for that. (Multiple, even!) You can end up with invite spam, but that's exactly the problem you see on Facebook, WhatsApp, etc.
As for me, I ran my own XMPP server for years along side an SMTP server and never received XMPP spam. Both my XMPP and e-mail addresses were the same, and my e-mail address had been in use since circa 2000 and exists on countless spam lists. I doubt the spam problem could have been very significant. I never used a GMail or GTalk address, but of the people I know who did, some of whom I chatted with over federation, I never once heard of GTalk spam.
Anybody who cares about privacy should care about federation and should advocate for federation. Being cynical about the potential is counterproductive. If you think federation is impractical because centralization is required to prevent abuse, then you must admit that privacy beyond the current status quo is also impractical; just give up. If you don't want to give up on privacy, don't give up on federation. The technical problems to federation will never go away, but the will to solve them is entirely voluntary. (Though, if we legally mandate federation then that's at least a substantial, long-term commitment.)
Facebook/Messenger? Not a week goes by without some sexy lady wanting to have intercourse with me.
This does not seem like it’s a federation issue.
First, I can't remember who said it but there's a quote that goes something like (paraphrased) "open standards are for losers" (side note: if anyone has the original quote, please let me know). It's a pithy way of pointing out that the winners in any market don't care. Others want open standards to level the playing field.
Second, and I can't stress this enough, literally nobody wants federated systems apart from a handful techno-enthusiasts. It doesn't solve any problem users care about. In fact, it tends to create problems users do care about.
Look no further than the POTS system. Part of the reason you have spam and robocalls is one provider is pretty much free to send or forward traffic to anyone and to essentially spoof the sender such that things like caller ID do very little. Plus there's all the routing issues. Users tend to want to keep their numbers so you can't use a phone number as an identifier anymore. You have to use something lower level (think of this as the difference between a domain name and an IP address) and then deal with all the porting issues and the security issues that creates (eg SIM jacking).
As long as people continue to use the Internet for their own benefit, that's fine. The internet that will be the ultimate "open standard" for the masses of people.
The XML schema felt bloated (baring in mind a lot of people were still on dial up, and later the data caps of early feature/smart phones), chat client support was rubbish, linking to other servers was non-trivial (they'd often be running extensions you weren't. In fact the whole extension system was broken). And IIRC the leading XMPP server was written in Haskell and the only way to configure it was to edit the source. It was just a horrible experience all round.
I had Skype, MSN, AOL IM, IRC, and another (possibly IRQ?) all linked together -- most of which are proprietary -- under one server and the only protocol I couldn't get working properly was XMPP. Which really says a lot about the state of XMPP at that time.
Maybe things have improved. But now that Google Talk, Facebook Messenger and others don't use XMPP any more, there is even less reason to bother trying.
Suffice to say; go and download a modern client like conversations.im and install ejabberd.im on a machine somewhere (or just use a throwaway account on a public server). The ecosystem has significantly improved since you last tried it... 15-20 years ago?
> Maybe things have improved. But now that Google Talk, Facebook Messenger and others don't use XMPP any more, there is even less reason to bother trying.
There's no shortage of chat protocols out there. As far as I'm concerned XMPP had it's chance and failed to deliver. While I'm not a fan of NIH (not invented here) syndrome, I'm even less of a fan of polishing a turd, because that's what leads us to monstrosities like STARTTLS, FTPES and so on and so forth.
I myself have rediscovered XMPP in the past two years (whilst using other tools like Matrix for other roles). The experience has revolutionized the way I view chats apps and even I host my own server on my own bare metal.
The thing quite simply flies and is rock solid. I've also seen multihour WhatsApp and Signal outages go by whereas my friends and I have kept chatting on my reliable server. Never had an issue with STARTTLS.
XMPP has silently evolved with the times and is far better than ever and should simply be the go to if you want to have control over your own comms.
No need to be abusive. And lets not forget I'm basing my views on technical arguments, which is the opposite of being narrow minded. If you want to convince me that XMPP is worth trying then you need to provide me with technical reasons why I should.
> I myself have rediscovered XMPP in the past two years (whilst using other tools like Matrix for other roles). The experience has revolutionized the way I view chats apps and even I host my own server on my own bare metal.
Good for you. I wasn't suggesting nobody should use it though. I was only answering why I wouldn't be investing any more of my own finite amount of free time on it. That doesn't make me narrow minded. That just makes me busy enough that I need to make trade offs with my time.
> The thing quite simply flies and is rock solid. I've also seen multihour WhatsApp and Signal outages go by whereas my friends and I have kept chatting on my reliable server.
You can't compare a personal chat server for friends with a service with multi-national infrastructure used by millions. Problems grow exponentially with scale.
> Never had an issue with STARTTLS.
Then you've not spent enough time working with SMTP. :) But my point wasn't that STARTTLS sucks (though it does) but rather that STARTTLS should have been a warning sign that we need to abandon SMTP for something better.
> XMPP has silently evolved with the times and is far better than ever and should simply be the go to if you want to have control over your own comms.
Maybe but I haven't yet heard what any of these improvements are from you though. You've talked about how XMPP makes you feel, you've talked about how my previous post made you feel, but you've not actually talked about XMPP itself. For a technical conversation your reply lacked a lot of detail about the tech and a lot of abuse towards the person you're trying to persuade.
You're not, you just simply have a strong opinion about something you haven't even tried (in the last decade) and thus basically know nothing about it. It's a view based on ignorance.
If you want a grown up conversation then I'm happy to engage. But don't waste my time with petty insults and vague claims of greatness when you're unwilling or unable to add any technical detail to back up your bluntness.
Have you even tried reading the original article that this thread is literally linked to at the very top?
- They talk about evaluating extensions but extensions was one of the things I raised as being a turn off.
- They talk about clients, but there's no shortage of other chat solutions out there with decent clients these days. A list of platforms and links to clients doesn't tell me whether XMPP clients are buggy or well polished. Let alone why I should use XMPP over another solution with a well polished client.
- They talk about privacy but even on XMPP that's not a given and there are other solutions out there if you're interested in privacy.
- They talk about voice and video calls, and that at least is new from when I last tried. So that's one thing in favour of your point. However I already have a half a dozen platforms that do that -- platforms that already have my friends and family on it. Why should I set up another? And moreover how am I going to convince my friends and family to install this other chat client if you can't even convince me, a fellow technology geek, to try it?
This is why I talk about XMPP missing the boat. People gave XMPP a try and moved on. And for all my asking, neither the article nor yourself can explain why XMPP is a cut above the rest. Worse yet, all the talk in the article of "evaluating extensions" and "reviewing privacy" doesn't convince me that it's any less annoying to set up either.
They can be daunting at the start (as it is with learning any new technology ecosystem), but once configured; it's not something one thinks about.
> - They talk about clients, but there's no shortage of other chat solutions out there with decent clients these days. A list of platforms and links to clients doesn't tell me whether XMPP clients are buggy or well polished. Let alone why I should use XMPP over another solution with a well polished client.
My personal favourite is conversations.im, but these days, with the notable exception from Pidgin, they all tend to interoperate fine. iOS clients still has issues with push notifications (thanks to the OS level) that are being fixed: https://snikket.org/blog/snikket-ios-public-release/
> - They talk about privacy but even on XMPP that's not a given and there are other solutions out there if you're interested in privacy.
Disagree on this point:
- Other solutions generally require a number or email address. On XMPP, you can simply create an account by pointing a client at a server and asking for an account (you can even create a completely random pseudonym).
- Other solutions do not generally allow you to self-host (Slack, WhatsApp, Signal, etc), so they're not private even to begin with.
- Other solutions don't generally have the flexibility of federation to let you talk to other servers (such as Mattermost).
- XMPP clients also have optional support for Tor, and servers can be hosted on hidden services and can talk to servers over Tor too - which is much better than Signal and others should you desire an elevated level of privacy (I do not bother with this point, but if I met someone who did - good to have as an option)
- Things like Briar that do P2P do exist, but their clients are lacking in other areas such as voice calls, multi-platform support, etc.
> - They talk about voice and video calls, and that at least is new from when I last tried. So that's one thing in favour of your point. However I already have a half a dozen platforms that do that -- platforms that already have my friends and family on it. Why should I set up another? And moreover how am I going to convince my friends and family to install this other chat client if you can't even convince me, a fellow technology geek, to try it?
It's just chat at the end of the day, and as I said - I did not want to rely on a third-party for something as crucial as my personal, private comms.
Another thing that I enjoy about XMPP is that the clients support multiple accounts as a first-class feature (something you cannot do on Signal/WhatsApp). Theoretically; from the same app; I could have accounts for personal, work, a neighborhood chat, and an account over at sfconservancy[1], whilst being able to enable/disable as and when I want to.
This last point is more pertinent as people become fatigued and bored of having to have multiple apps for different contacts across multiple platforms (a pain point made worse as new chat apps come into life every other year and contacts decide to move over). In my case, I know that there will be open-source XMPP clients that I can use to log into my server and still have the same contact list.
Tools like https://quicksy.im/ also exist to make it easier for normal people to adjust to an XMPP client before moving them over to non-number based accounts.
[1]: https://sfconservancy.org/blog/2021/jun/21/chat-options/
But both Facebook and Google refused federation, and then phased out xmpp.
I assume all the big players are equally eager to kill email, but haven't quite figured out how yet.
https://www.qacafe.com/resources/2015-03-26-using-xmpp-for-t...
Vendors in that market heavily use extension mechanisms. For instance commanders of infantry units might fill out forms every day about what kind of contacts they had with the enemy and get them sent to a central location.
How does XMPP help with this over a HTTP form?
But: - HTTP forms might be less flexible when it is about structured data. - HTML needs a complex renderer software
Remember that this stuff might need to work on low resource devices and over low bandwidth connections.
HTML forms are pretty flexible and could be designed in a low CPU environment.
XMPP Forms are deeply asynchronous. I'd assume that the "blank form" already exists on the soldier's laptop and the message gets stored-and-forwarded until it gets to the destination.
HTML is an async protocol. We pretend it is sync through a mountain of cookies. But innately, HTTP and HTML are all async. Without PHPSESSID, there really isn't an official way to correlate GETs with POSTs.
XMPP is synchronous. It's a chat interface. I'd assume it's be harder to do async comms with it. IIRC, it's a stream of XML that coincides with the servers state.
Elaborate please. Matrix doesn't have a central authority server which can influence other servers.
But I doubt you can reach critical mass with a system that is not open to other chat systems, even if those are closed.
And, once I am on board, I can start to look into the features provided by matrix. People don't switch to a protocol, I think, they want to leave a service or provider. And yes, you are still part of whatever walled garden you choose to use, but whatsapp can run on an old phone and never touch my new phone, never getting the data on that device.
I'm dying to try it, and if it functions how they've described it only makes me want it more. A few weeks back I got an itch and started watching any videos online and came across a few from the founder and their main developer (the one developing all the matrix bridges that I believe even Element One is using? maybe?).
For someone in my situation, if it works its priceless and if they wanted 3x or 4x the monthly fee I'd still be more than okay with it. Hell, I'd pay extra just for early access. I've always struggled to keep up with my communication and a big one for me is iMessage. But aside from that everything else I use for family (WhatsApp,Telegram,FBMessenger), work (Skype,Slack), and friends (iMessage,Discord) is stressful for me everyday switching between all the apps when looking for something, remembering who I need to respond to, switching to phone (I don't use Mac, so iMessage only when I'm actually on my phone which is not often).
Judging by the state of most transports, actual long-term interest in that feature is limited. I don’t know if Matrix does something in a sufficiently different way for bridges (apart from ICQ) to be actively used.
Commercial services, by necessity, try to differentiate themselves. That prevents full interoperability.
There are still such bridges (more commonly called "gateways" or "transports" in XMPP), such as for WhatsApp, Signal, and others. However my perception is that over the long period of time XMPP has been around, focus shifted to the "native" XMPP-XMPP use-case, because it's easier to build a better experience that way.
My personal prediction is that Matrix will certainly go the same way - using a focus on bridging to bootstrap the network in the initial years, and then gradually shifting to focus on "native Matrix" for most use-cases after reaching a certain critical mass.
Solid? They crash or malfunction all the time.
Last time I check both used Spectrum, at least for evertything libpurple related. So at least in theory they should be equally stable, unless it is just a question of code maturity which should improve over time.
Things which could be at the root of this misunderstanding include:
* The fact that we operate a *strictly optional* logically centralised directory service to look up matrix IDs by email address or phone number. I really wish we'd never added this to Matrix; it causes way more grief than it solves - we'd have been better off waiting off for someone to build a decentralised keybase service and use that instead.
* Element runs a centralised integration manager (aka app store) to make it easier to add bots/bridges/widgets to rooms. Again, this is completely optional - although back in 2019 we had a stupid bug in Element Web which meant it checked the integration manager even if you weren't using it. This was fixed in June 2019 (https://github.com/vector-im/element-web/issues/6802).
* Element has to query your server to find out what authentication mechanisms are available before you log in. Therefore if its config points to the default matrix.org homeserver, you end up pinging that every time you log in, even if your homeserver is elsewhere. The solution for now is to change your default homeserver in the config to avoid this.
* Servers need to be able to validate events from servers even if those servers are offline. To do this you need to grab the public key for the offline server from somewhere; by default Synapse uses matrix.org as a fallback, but loudly nags the admin to pick a better default when you install the server.
None of these actually allow a "central authority to have influence on another server" though; I've just listed the only places I can think of where a typical self-hosted Matrix implementation might interact with centralised services run by Matrix.org or Element.
Unfortunately I think the real root of the misinformation is that it's just a bit too tempting and easy to throw around FUD. Some day we may get to the point where alternative FOSS projects will realise that the real enemy are centralised proprietary user-exploiting services rather than one another...
In terms of adding Matrix to MUCs; i believe we're working on it in Bifrost, which is in active albeit slightly sporadic dev: https://github.com/matrix-org/matrix-bifrost.
You'd only have to speak the same encryption protocol. There already exists standards like the Signal protocol (on which OMEMO builds) or OpenPGP (which many XMPP clients support besides OMEMO). If messages can cross the border, so can public keys and encrypted messages.
But the fact that both protocols use the same E2EE encryption protocol doesn't help you with interoperability - given that you have to break that E2EE in order to convert between Matrix & XMPP; either on the server (ugh, defeats the whole point of E2EE) or on the client (ugh; you might as well just have a multiheaded messenger).
You can exchange the private keys, but using what format? Once that's done, you can encrypt XML on one side, but Matrix has to convert it into JSON on the other (in its own, separate format with its own fields). This can be done on the server side after decryption (no more E2EE), or on the client side (after decryption). In the latter case, you're not running a bridge anymore, you're just running an ad-hoc client for XMPP inside your matrix client.
> <message type="chat"><body>Hi there!</body></message>
or raw text
> Hi there!
In Matrix, it's always encrypted JSON
> {"type": "m.room.message", "content": {"msgtype": "m.text", "body": "Hi there!"}}
It would be possible for Matrix to indicate that a room is a "raw room" and that clients should send and expect raw messages in that room - losing a few features on the go. Such raw room could be bridged over to XMPP fully end-to-end-encrypted (with small changes on either side to adjust for the differences between OMEMO and OLM).
But I doubt anyone at Element will invest time into doing it and for the XMPP side it's much more work to do it "on their own" (by implementing parsing support for the encrypted JSON of Matrix as shown above).
Having raw text in the encrypted content is by the way still the normal way how things work in XMPP world and is supported by every client doing E2EE - because it is basically free to implement (barely any additional code needed).
If you did something stateless like OpenPGP then you could do E2EE over bridges with no problem. The cost would be that each and every message would be complete in itself. So sending a single emoji would take several hundred bytes. That might be less important these days...
Yes please! There's sooo much work people put in the clients, and there are multitude of them for each network. I understand they are different and a specialized client may be better suited for unique protocol features, but I also think there should be more general clients with protocol plugins, as it was with Pidgin, Miranda and such.
Why is this any different from WhatsApp, which has a Matrix bridge? Or does that break encryption too?
Matrix to whatsapp bridge can be encrypted, whatsapp bridge to whatsapp can be encrypted, whatsapp to whatsapp is encrypted. But you have to break the chain at some point between matrix and whatsapp.
Encrypted != End to End Encrypted.
(Not a Matrix user so maybe help me understand here.) I think the reason why I have about 30 contacts (instead of like 3) on Signal is due to phone number discovery. It's not decentralized, which is of course subject to criticism, but exchanging & verifying public keys between O(N^2) people hasn't "taken off" in the X decades since it was invented.
> we'd have been better off waiting off for someone to build a decentralised keybase service and use that instead.
Do you have an example of any mainstream product that has ever achieved that, without either being partly centralized? Decentralized identity is really, really, really hard, and mostly the layer-8 implementation (discovery, name-squatting, impersonation, abuse, spam, key-management and exchange, etc).
I also do not want my account to be tied to my phone number at all, because my phone number is tied to a contract.
* Making Pinecone resilient to attacks. It's working well for clear weather scenarios, but we need to properly try to break it and get it audited. Need to test it at scale too.
* Improving Dendrite so that it's more stable and efficient clientside
* Metadata-protecting store-and-forward, so that clients can pass messages to each other without needing to be online at the same time. You can cheat and run a serverside P2P node to relay, but then it stacks up metadata - whereas half the point of P2P is reduce Matrix's metadata footprint.
* Account portability. Currently each node is a separate account; need to support the same logical account being replicated over multiple nodes.
* Better than full-mesh routing. This should be pretty easy as we can just follow Pinecone's topology to route traffic between nodes rather than having each node try to simultaneously post to every other node in a given room.
You can get testflight & APK builds from #p2p:matrix.org if you want to experiment.
AFAIK, there are 6 server implementations of Matrix protocol: Synapse (Python), Dendrite (Go), Conduit (Rust), Construct/Charybdis (C++), Plasma (Elixir), Jeon (Java). Are there any more that I have missed? Which ones other than Synapse are most mature? An unbiased comparison post (that remains updated) would be really useful.
A second question is: are the APIs between a homeserver and the frontend defined and standardized? I've noticed this in the ActivityPub ecosystem where it is usually very easy to use one frontend with another backend. Are matrix servers also written in the same way?
Yes the matrix spec is all standardized. You can use any client with any homeserver.
Matrix's API surface is big, and servers deliberately handle all the heavy lifting in order to make clients trivial to write, so writing servers is not trivial. But Dendrite & Conduit are both very usable and making good progress right now.
And yes, the APIs are all standardised (while also constantly evolving) as per https://spec.matrix.org :)
* This might be a worthy tool for simulating aspects of scale: http://imunes.net/
* I assume power usage is a non-trivial concern (looks like yall have been worried about this too). I've tried my fairshare of P2P apps on mobile, and this can be a dealbreaker for many folks. I assume this will be something that has to be dialed in on mobile clients (and probably provides options to the user). I'm sure there are many trade-offs to consider, and I'm hoping logical accounts will provide significant advantages here. Are you feeling confident this will succeed?
* The Store-and-Forward problem looks like a really big deal. Defaulting to friends (for those folks who are lucky to have them) or a chosen subset to proxy seems reasonable. Having the clear ability to pick out who we trust here (including volunteer networks) seems solid (I'm a huge fan of Retroshare's F2F concept). I take it that, ideally, with logical accounts and excellent NAT traversal (also a sore spot usually), one's own cloud of machines will obviate some of the desire to run anything in a datacenter (and even perhaps make friends a fallback). I'm excited to see Dendrite and Conduit grow!
* As part of that portability, at least to my ideal, I'd be able to join my network from scratch using a password hashing algorithm for the private key, as otherwise I may be reliant upon secondary networks to move keys. This is often one of the first applications I want to install on a system to bootstrap myself in.
* Pinecone's Topology looks like a good idea (Yggdrasil is dope too). That metadata problem may still raise its ugly head here. Do you predict the use of onion routing, at least with Tor and i2p, will be relatively easy to integrate in addition? Do you foresee Matrix enabling its own onion routing some day?
* If you had to take a wild guess at the first stable moon landing, when do you think that might occur? Do you think 5-years may be acceptable?
Power usage is looking pretty positive so far; as long as we route the Matrix traffic over the routing topology rather than going full-mesh it should minimise radio usage (the main battery suck, other than screen).
For store-and-forward, honestly using P2P Nodes as intermediaries is an okay approach other than exposing metadata to them. Our plan in the longer term is to switch to loopix-style mixnets to obfuscate the store and forwarding, a la nym.
In terms of joining the network by deriving a private key from a passphrase... yup, that could be cute, although slightly terrifying in terms of the risk of weak passphrases :)
We're hoping to get the P2P network stable in the coming year (although we were also aiming for this year originally :P)
Something's broken here.
I don't think the intent is malicious, but the system is definitely leaky. My homeserver config doesn't mention vector.im (perhaps it's a hidden default somewhere?), I checked.
From a protocol standpoint, no identity server is necessary. From a practical endpoint, all feature-rich clients (the ones I know support e2ee) seem to send requests to vector.im. Matrix is decentralized, but a lot of data still seems to get leaked to a centralized place by accident from my short experiments. It's not a great scenario, even if I'm fine with a few requests to the 3PID server every now and then.
Client issues are ecosystem issues if all usable clients suffer from them.
IIRC, identity server is something primarily set on the client (element.io here) rather than the homeserver.
It really needn’t and shouldn’t ping an identity server as part of the sign-in process (esp before/without privacy policy agreement)
FWIW it seems the issue is that there’s a fallback process for identity server; if neither your account nor your homeserver has one set, it defaults to the client default. if you host your own Element-web instance you can change this.
https://github.com/vector-im/element-web/blob/develop/docs/c...
Or check out ma1sd. You don’t need to enable all the bells and whistles if you don’t want to.
* Element has to query your server to find out what authentication mechanisms are available before you log in. Therefore if its config points to the default matrix.org homeserver, you end up pinging that every time you log in, even if your homeserver is elsewhere. The solution for now is to change your default homeserver in the config to avoid this.
The same applies to the identity lookup server as well as the homeserver: the app checks the one in your config to ensure that it exists before the user tries to log in on it. It does this with a single request (a GET to https://vector.im/_matrix/identity/api/v1). There is no token exchange there.
The workaround is to configure the app with the correct default homeserver & identity server (if any) for your deployment. The underlying bug (i.e. don't validate the config until the user tries to log in) is https://github.com/vector-im/element-web/issues/11655, and it simply hasn't got to the top of the list yet; we've been focusing on narrowing the UX gap between Element & Discord/Slack/Teams rather than reimplementing the login flows. As you can see on the bug, it's been picked up off the backlog 9 days ago and is currently being worked on.
Separately, I'm seeing a related bug that Element Web's guest mode is incorrectly kicking in on the login page. Guest mode exists so you can deeplink straight to something like https://app.element.io/#/room/#matrix-dev:matrix.org and read scrollback without needing to register an account - but it looks like we're spinning up guests on the default homeserver needlessly on the login page. This is https://github.com/vector-im/element-web/issues/11533, and we've put it on the radar too.
TL;DR: this is slightly leaky, but is it really any different to Chrome's default config loading up Google as a default homepage? Or Firefox loading up Mozilla.org? Or Thunderbird loading up Thunderbird.org? Eitherway, we'll fix the behaviour, but PLEASE understand that this is a million miles away from the bogus "central authority can have influence on another server" smear from the original post.
I understand the whole "central server" stuff is bogus.
However, I consider the forced homepage opens every browser seems to do today an invasion of my privacy, especially with the way these pages often includes trackers. Mozilla is especially bad at this; I've had to disable checkboxes on all my devices to make sure I don't get their stupid VPN ad, which is tracked with Google analytics and which addons can't properly touch because certain Mozilla domains are exempt from addons (rightfully so!).
Google knows when I open Thunderbird. Google knows when I update Firefox. Google knows when I do anything in Chrome. Microsoft tracks even more than Facebook when I accidentally open Edge because I was foolish enough to click on a help icon in Windows 11. Element knows when I log in to Matrix. All of this data collection is completely unnecessary, and while this comes from a sick hunger for data in Mozilla's/Google's/Microsoft's cases and a configuration quirk in Element's case, it's still a worrying development in my opinion.
I know you folks are working hard to fix things like these and I originally wanted to call balogne on the claims several people made in these threads, but I couldn't because their observations about the identity server were right (though their conclusions were strongly overstated).
I'm glad that this is on your radar and I'll happily keep using Matrix while this is being fixed in the background, so don't get me wrong here. I love Matrix and the possibilities it represents, and I hope the clients and features will continue maturing so that I can recommend my friends and family to get it.
The problem with presence is that it generates a LOT of traffic. It's N^2 with the average number of contacts each user has - every time a user changes presence, you have to send a message to every one of their contacts to update them about the presence. This happens whether they're paying attention to your client or not. So on a large system, the big majority of the traffic is just presence messages flying back and forth saying who is at their keyboard and who isn't. This is really wasteful in general. Worse, it's not a super important feature for a lot of people, so it's definitely not worth the effort. And ever since mobile computing became ubiquitous, it's not even clear what this is supposed to represent.
So, I say let XMPP die. It was a fine idea for its time. But the protocol has no place in the modern world.
So you d have an enormous graph with one node in the center refreshing presence for everyone. And end up worse.
Most chat systems have done away with it. Slack has it, but that's about it. For anything you use from your phone, what does it even mean?
Slack, Discord, Matrix, FB Messenger, Instagram all have it to name a few.
The only ones that don't have it are SMS replacement apps (Whatsapp, Signal) and IRC.
I for one greatly rely on presence. It very often informs if I should or should not send a message to someone.
Do you have an example? I certainly don’t operate this way. I just fire off a message. The status only informs my expectation of when a reply might arrive.
In the absence of a status I have no expectation of a reply. With mobile devices I still get immediate replies frequently because of notifications. So I don’t rely on status.
i.e. basically every corporate chat system
I do keep wondering though what's the deal with the performance of the Matrix protocol. From reading the overview in the spec, it doesn't feel like there's anything that could have a significant performance cost. It's essentially a standardized but extensible REST API that passes JSON objects over HTTP. Is it that the existing server implementations aren't optimized very well?
The reason there is stuff to optimise is that Matrix passes JSON around over HTTP in a byzantine fault tolerant manner: every time you send an event you have to sign it and justify why you’re allowed to send it, and every time you receive one you need to execute that proof effectively and do a merge resolution algorithm to authenticate the event and store it in the right context - very similar to how Git works, but with events rather than commits. A naive implementation of this can be very heavy. We’ve improved it by 3-4x over the last year or so, and there are other big algorithmic improvements in general on the horizon too.
You shouldn't impose your use case to "a lot of people", and more importantly also shouldn't conclude that it's "definitely not worth it" from that. The industry disagrees with you, and so does my mom.
Even if the server load from presence is acceptable (we clearly disagree here) it’s not okay to bombard somebody’s mobile device with these messages all the time. If your phone’s CPU and radio need to wake from sleep every time any one of your contacts picks up or puts down their phone, your battery life is ruined. You may think these messages important, but they are not urgent.
But in this case, I have Conversations on my phone and can say from experience that it didn't degrade my battery life whatsoever. I know that android restricts this behaviour heavily by default and for good reason, because lots of apps will drain the battery in a matter of hours. No idea how the conversations devs do it, there must be a quirk to it I don't know which makes modem usage acceptable. I'm not a zealot in this case and I accept the flaws, but I can't leave you thinking mobile xmpp hurts the battery in a relavant way because that's (in my experience) not true.
I'm not deep into xmpp xep standards, but I'd imagine theres a way to tell the server "I don't care about event type x please don't send those until I ask for them again"
This was almost 10-years ago now, it's incredible to see this technology still moving forward.
I had the impression the general opinion about XMPP is that it's resented as the SOAP of messaging.
Many years back I was working on a desktop client for XMPP.
The first problem I encountered was that XMPP does not actually send individual XML documents each time it sends a message. Instead it starts with a tag that is not closed until you actually turn off your client and close the connection. So you couldn't use a simple XML document parser for those relatively simple messages as it would read the start tag and never finish, but had to do some kind of streaming-based thing.
Matrix IS XMPP 2.0.
how is it fundamentally flawed, can you elaborate?
I think ideally in a good protocol, the server should not have to parse the content for the messages that are not targetted to itself (only the metadata useful for routing). the XML mess makes it impossible to do that since you have to validate the full document.
At the time I think this page was a good summary of the issues https://about.psyc.eu/XMPP No idea if this is still relevant though.
It's been years since I've looked at. Maybe things are better now.
Of course, smaller messages (à la Matrix) probbably make more sense.
There were ideas to separate out the addressing/routing from the actual messaging, so that servers did not need to process XML and so that messages did not necessarily need to be XML.
There were even some very preliminary ideas on using the servers to potentially negotiate peer connections for arbitrary traffic.
Back in the early 2000s there were a _lot_ of self-hosted Jabber servers though, and there was push-back from early commercial interests on any protocol-breaking changes resetting adoption to zero. This resulted in Jabber 1.0 pretty much becoming the basis of the XMPP RFC, with XMPP adding new authentication techniques and internationalized JIDs.
Later on, there were efforts to establish alternative transports to accomplish some of these alternative transports and forms - HTTP endpoints to poll for messages, JSON mappings of the core messages, etc.
I would argue against PSYC's claims (or would have, back in the day) that the usage of XML in XMPP is not proper, however. Its proper, it just wasn't the best idea.
The presenter was unfamiliar with the protocol, so I had to describe how the xml document was opened when you establish a connection, and how elements keep getting appended to it, and how the "xml document" isn't really completed until you're all done and the connection is terminated.
They looked at me like I had two heads.
To them, XML didn't make any sense at all unless you have the entire document available all at once. After all, how on earth could one ever apply an XSLT transform to it, right!?
Good times.
There is streaming APIs for XML. Just as XSLT 3.0 can do streaming. Saxon has implemented it, for example[1]. I am aware, that you are talking about the past, but also the XML world moves forward, albeit slowly, since the community has gotten much smaller.
[1]: https://www.saxonica.com/html/documentation10/sourcedocs/str...
You'd also have to explicitly turn XML namespace support _off_, since so many systems didn't actually support them. XML defines well-formedness and namespace-well-formedness as two different things, and you didn't want to completely drop communication because the other side was sending a message that didn't meet the more stringent requirement.
Some implementations would figure out ways to incrementally disrupt and extract elements from the DOM - but this would sometimes cause resource leaks due to the design of the W3C DOM itself.
The expat had explicit support for parsing Jabber/XMPP messages very early, and was by far the most often XML component used for making libraries.
- message formatting is a mess
- device management is absent
- iOS apps can't really work with stock xeps
And the list is long, these are just the top problems. Luckily, this will likely change soon.
Please elaborate.
Web client: https://xmpp.redsolution.com/upload/4bddf4f264f5c6577f16551f...
iOS client: https://xmpp.redsolution.com/upload/4bddf4f264f5c6577f16551f...
Message formatting (from web client, but is supported by all, actually): https://xmpp.redsolution.com/upload/4bddf4f264f5c6577f16551f...
Device management. Newly connected device is given a token, with a mechanism to prevent token duplication, and tokens can be revoked, resulting in device disconnection:
https://xmpp.redsolution.com/upload/4bddf4f264f5c6577f16551f...
https://xmpp.redsolution.com/upload/4bddf4f264f5c6577f16551f...
This all is a work in progress, and we're aiming for an iOS version release in december or early next year.
The TL;DR seems to be the concern that Matrix was created by an existing team of folks who worked together (we built VoIP stacks for telcos), and because 50% of the people in the Spec Core Team who define Matrix's direction are from that original team, they have a disproportionate influence over how the protocol develops.
The reality, as far as I can tell, is that we are incorporating the best proposals from across the whole community, wherever they come from, and the protocol is progressing steadily under this open governance model, and folks are constantly experimenting with new features under prefixes, which they propose MSCs (Matrix Spec Changes) for, and then get incorporated into the official spec once they're approved by the Spec Core Team (which requires 75% consensus).
We spent ages setting up https://matrix.org/foundation and trying to enshrine a fair and neutral governance process for the spec, and as far as I can tell it's overall working. The thread linked above gives examples of ways in which the process is working as intended.
This is not how healthy federated networks work.
The question is where to take it from that.
Oh, and Matrix is plenty extensible, for example via custom event types: https://spec.matrix.org/v1.1/client-server-api/#types-of-roo...
(And aside from that, Mattermost doesn't have federation; different instances can not communicate with each other. Although we hope they'll implement Matrix eventually :)
I know, you consider xep structure of XMPP to be a problem, 'because it is hard to orient in it', but in fact it is what makes XMPP so durable and capable to work in a real federated environment.
I can see zero problems with this decisive approach. /s
No, any server instances provided by any vendor
> by a single dominant vendor, whose idea of federation is for everyone to update to the latest version of the spec or fall behind [1].
Server instance provider is not the same as software provider. Of course, you fall behind if you don't update. Time progresses, so does software.
In proper federated networks (email, xmpp), you don't.
What I value with Matrix is progress
Proper federated networks are ones that are already past this initial phase of fast progress and where participants have learned to work with each other.
> and it will always be a one-vendor vehicle.
You are clearly not speaking of Matrix: e.g. Element, Beeper, Dataport
How no progress ends up, can be observed with email and xmpp
> Proper federated networks are ones that are already past this initial phase of fast progress
That's made up by you. I claim proper federated networks are ones where you can fall behind
The main architectural difference between them is that Matrix provides "eventually-consistent cryptographically secure synchronisation of room state across a global open network of federated servers and services", whereas XMPP just passes messages from point to point (where one of the endpoints may be a multiuser room).
The main practical benefit of Matrix is that multi-user rooms don't have a "home" server; they're distributed across the homeservers of every member of the room. This means that though everyone may have signed up for a room identified as #shitposting:matrix.org, if the matrix.org homeserver goes down, the chat still works. People can't join it until a new name is published for it, but it works for everyone already in it. In XMPP, chats are hosted on a particular server, and if the server a chat is on goes down, the chat goes down.
The main practical benefit of XMPP is that it is much more lightweight than Matrix. Being based on synchronization of room state means that Matrix stores a lot of data, generally all messages and attachments back to when the room was created (or possibly the first time someone on your homeserver joined the room). Apparently it's possible to prune room history, but it's not done by default, and as far as I know, it's not officially supported. It's much easier to control how much data your XMPP server stores.
XMPP is also a simpler protocol, which means there is a wider variety of clients; while there are several vaguely viable Matrix clients, if you're not using Element, you are much more likely to have problems, especially with encrypted rooms. Of course, the flip side of this is that a lot of XMPP clients don't support all the extensions which make modern XMPP useful, either.
Both of them have trouble with multi-device E2EE key management, though Matrix has the edge. But again, if you're not using Element, you are likely to have problems.
So does Matrix. All the other qualities are build on top of that. XMPP also enables e2ee, message synchronisation and an "global open network of federated servers and services".
Back around 2000 getting information on building eventually consistent systems was much harder than it is today, and leaderless versions of that doubly so. Those who worked on it felt like they were inventing half the techniques themselves, had difficulty recruiting (teaching) new people, and eventually burnt out.
If those involved had gotten it to work, it would have just been core infrastructure for eventually consistent ordered events, with UX concepts like "rooms" built on top as common business logic. Or in other words, distributed apps.
Please explain why you believe this.
This is the spec: https://spec.matrix.org/latest/
These are the spec change proposals: https://spec.matrix.org/unstable/proposals/
XMPP didn't really pitch any client or server protocol breaking changes.
Since the messages themselves were just addressed XML elements, we were able to do revisions over time, such as the first group chat being replaced by MUC or adding in the ability for XHTML-formatted rich text.
Then google killed it all by dropping xmpp/jabber support in gchat, and others soon followed.
First they killed federation, then they killed xmpp support entirely.
XMPP does have this feature parity issue, though there is a good selection of modern active XMPP clients across platforms with important features like end-to-end encryption and calls. But you're right - there's no way to stop people trying to use clients like Pidgin, which have been essentially frozen in time for a decade.
Matrix is newer, so has less diversity, and lots of resources to put into the Element clients. However there certainly is exactly the same problem growing in the Matrix ecosystem too - there are many features supported by Element that are not (yet?) implemented in popular alternative clients such as FluffyChat.
The best you can do is ensure that when two clients communicate without the same set of features, that you degrade gracefully and securely (e.g. the worst case I can imagine would be E2EE that silently becomes unencrypted if not supported by your contact - thankfully that's not how it's done) to the best common feature set between the two.
Instead of "oh MS teams supports up to xmpp2017" it's just a crapshoot.
Compliance suites are reviewed, updated and published annually with the recommended set of features across a range of different categories.
Looks like it's on the list but as "* Support can be enabled via an external component or an internal server module/plugin."
So...a crap shoot, haha.
...ever heard about "the state"?
Yes I know, since Matrix there is now an extension that defines a selection of extensions to try to overcome this
Most users would have the same level of security as with e2ee by simply running their own server. E2ee mostly helps against service owner you don't trust, so just be your own service owner and have nicely syncing history and server side search.
I suppose I could run the service on a machine in my house, but that's not going to be good for uptime, the NAT screws things up, etc. Plus, even that could be hacked if I fuck something up.
(But but chats are surely the holy cow and must be encrypted - strictly demand those same users, paradoxically)
And no modern server stores passwords in plain text, and keys are not stored on servers at all.
I will say, that even though I kind of like the architecture of XMPP better, the Matrix people have put in tremendous amounts of work to overcome the UX problems with e2ee, in particular the multidevice problem (where I have a laptop and a phone logged into the same account and try to participate in the same encrypted conversation from both).
I use XMPP to send e2ee messages to friends on other servers and clients every day, so it's very much not just 'in theory'.
That is only for OMEMO (OpenPGP and OTR require nothing of the server) and you can easily check a potential server for the things that OMEMO depends on by doing a normal server compliance check here:
* https://compliance.conversations.im/
In the same way, if you pick a client that does not support something then that thing will not work. But why pick such a client in the first place?
I wouldn't use slack exactly but a slack like service like XMPP/Matrix/Kafka? sound way simpler than having servers message each other directly.
This is called an Enterprise Service Bus and got its start in the early 2000s when you started to have the first batches of programmers entering the workforce who could write code to build business apps but didn't really "get" computers and networks. TIBCO made billions selling it and facilitating .NET apps talking to Java apps talking to random Oracle things.
The point being, it should not be surprising to anyone that long-established protocol standards are capable and versatile, often fit for many purposes.
However, any suggestion that someone may have devised an archival mechanism that involved posting encrypted chunks to Usenet binary groups will be hotly denied.
https://www.socialmediatoday.com/content/xmpp-aka-jabber-fut...
"Therefore cloud services aren't real-time, won't scale, and often can't clear the firewall"
"While Twitter is not a cloud service, nor the largest demand service on the internet (with a paltry 350,000ish users, which pales in comparison to a MySpace or Yahoo!)"
Worked a charm.
I might be romanticizing it in my memory a bit, but I remember it fondly.
We would run ejabberd servers and could easily know which nodes were up and talk/send commands to them.
Prosody and Ejabberd are two good, lightweight XMPP servers that will let you synchronize messages across devices.
All of our pet servers had a background process sitting in a chat room.
We did deploys, restarted process, got alerts, and a whole bunch of other stuff all via XMPP.
It was much cooler than our product that never made any money :)
Now we run Google Hangouts and are locked into their ecosystem. I miss open systems, even if I wasn't taking full advantage of them at the time.
Under the hood, initiating a chat is basically launching an in-browser client over WebSockets, and spawning a "chat room" with a dynamically-created bot. Maybe this is common, I don't know, but seems to work well.
Just the fact that XML is old, doesn't mean it's bad. It might be a bit unnecessary verbose or hard to parse for constrained devices, but luckily there is EXI to solve these issues when efficiency is key.
It's worth noting that XMPP uses a subset of XML (so no DTDs, comments, processing instructions, is restricted to UTF-8 only, for some examples).
Framing has been mentioned elsewhere, and it's worth noting that XMPP-over-websocket is defined, well-supported and widely deployed. The websocket layer adds framing.
But of course it's suffering from this: https://xkcd.com/927/
Betteridge's law strikes again!
https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headline...
I'm working with some people to build out Stamp which is federated in a similar way to XMPP but attaches small cryptopayments to keep undue about of spam off the network.
Take a look: https://www.stampchat.io/whitepaper.pdf