2020-07-18 17:40:36 +00:00
|
|
|
---
|
|
|
|
title: "What about design?"
|
|
|
|
date: 2020-07-14T01:32:25+02:00
|
|
|
|
tags: [XMPP, Design]
|
|
|
|
---
|
|
|
|
|
2020-07-19 14:19:53 +00:00
|
|
|
Who around here hasn't heard about the tragic and inevitable death of XMPP
|
|
|
|
(eXtensible Messaging and Presence Protocol)? It's a pretty common topic in
|
2020-07-20 13:27:29 +00:00
|
|
|
the community and around, often started by users of XMPP themselves missing a
|
|
|
|
certain feature in one or multiple specific implementations, or users of
|
|
|
|
alternative solutions. In a way this is my own version of why XMPP is or isn't
|
|
|
|
doomed.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
To go down this rabbit hole, we first need to set a few definitions. Most of
|
2020-07-19 14:19:53 +00:00
|
|
|
my readers would probably know what XMPP is, but I feel obligated to provide a
|
2020-07-20 12:22:46 +00:00
|
|
|
short reminder as it will allow me to highlight specific points I want to talk
|
2020-07-18 17:40:36 +00:00
|
|
|
about.
|
|
|
|
|
|
|
|
# XMPP? Was ist Das?
|
|
|
|
|
2020-07-20 12:22:46 +00:00
|
|
|
XMPP is a communication protocol, that is “nerd” speak to say it's a language
|
2020-07-19 13:53:15 +00:00
|
|
|
for applications to use and talk together at a level that the end-user doesn't
|
2020-07-19 14:19:53 +00:00
|
|
|
see. An example would be a chat application: your desktop or smartphone app
|
2020-07-19 11:34:44 +00:00
|
|
|
talking to a server that then talks to another app.
|
|
|
|
|
2020-07-19 13:53:15 +00:00
|
|
|
It is defined as a standard at the [IETF (Internet Engineering Task
|
2020-07-19 14:19:53 +00:00
|
|
|
Force)](https://ietf.org) -- a standard being the specification of a protocol
|
2020-07-20 12:22:46 +00:00
|
|
|
(a document, in this case publicised and accessible by anyone), which allows
|
2020-07-19 14:19:53 +00:00
|
|
|
multiple products implementing what it describes to be able to work together
|
|
|
|
in an interoperable way.
|
2020-07-19 11:34:44 +00:00
|
|
|
|
2020-07-19 14:19:53 +00:00
|
|
|
Core specifications of XMPP are written so that it is easily extendible
|
2020-07-19 11:34:44 +00:00
|
|
|
allowing any developer to use custom (XML) elements for their own use, and
|
|
|
|
optionally write a specification for their new feature for everyone else to
|
|
|
|
use.
|
|
|
|
|
2020-07-19 22:59:42 +00:00
|
|
|
XMPP also defines a client-server-server-client model, where a client can talk
|
|
|
|
with a server that can then talk with multiple servers before reaching other
|
|
|
|
clients, thus allowing for [decentralization] -- anyone setting up their own
|
|
|
|
server to be free from restrictions of other operators, and communicating with
|
|
|
|
the world or part of it.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
[decentralization]: https://en.wikipedia.org/wiki/Decentralization#Technological_decentralization
|
|
|
|
|
|
|
|
So there we have it: (IETF) __Standard__, __Decentralized__, and
|
2020-07-20 12:22:46 +00:00
|
|
|
__Extensible__. These are, I believe, the 3 selling-points of XMPP.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-19 19:37:15 +00:00
|
|
|
From there tons of features can be implemented and then negotiated (as part of
|
2020-07-19 11:34:44 +00:00
|
|
|
the extensibility) and many things can change to use newer extensions that
|
|
|
|
weren't considered in the core specifications. For example even the
|
|
|
|
serialization format (words of the language applications talk, originally XML)
|
|
|
|
can be changed (just as [EXI][XEP-0322] is doing), and it's also perfectly
|
2020-07-19 19:37:15 +00:00
|
|
|
fine to have non-compliant behaviour as long as it has been negotiated by
|
2020-07-19 11:34:44 +00:00
|
|
|
entities taking part in it. And so on…
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
[XEP-0322]: https://xmpp.org/extensions/xep-0322.html
|
|
|
|
|
2020-07-20 13:23:38 +00:00
|
|
|
The [XSF] (XMPP Standards Foundation, previously known as Jabber Software
|
2020-07-19 13:53:15 +00:00
|
|
|
Foundation) is the entity that did the original work on the protocol and
|
|
|
|
submitted it to the IETF. It now has a sheperding role. There is no
|
|
|
|
requirement that XMPP extensions be brought to the XSF, but it aims to be the
|
2020-07-20 12:22:46 +00:00
|
|
|
place where technical knowledge around XMPP is gathered, so people can get
|
2020-07-20 10:37:55 +00:00
|
|
|
better feedback when submitting their new specification. Developers have
|
|
|
|
already layed out lots of protocol bricks for others to reuse through the XSF.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-20 13:23:38 +00:00
|
|
|
[XSF]: https://xmpp.org
|
2020-07-18 17:40:36 +00:00
|
|
|
[XEP-0001]: https://xmpp.org/extensions/xep-0001.html
|
|
|
|
[XSF_mission]: https://xmpp.org/about/xsf/mission.html
|
|
|
|
|
|
|
|
# How do applications speak the same language in an extensible world?
|
|
|
|
|
2020-07-19 14:19:53 +00:00
|
|
|
This is indeed the core of the problem. While extensibility is one of the
|
|
|
|
strenghs of XMPP, it's also its main weakness, one of the main points of its
|
|
|
|
critics. That said, I believe it's not as bad as they make it look like.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
It is true that most applications are incompatible one way or another, with
|
|
|
|
various degrees of significance, either because they don't implement the same
|
2020-07-20 12:22:46 +00:00
|
|
|
set of extensions, or because an author interprets extensions differently,
|
|
|
|
or simply because of bugs.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-24 09:09:24 +00:00
|
|
|
For the rest of this article I will leave aside interpretation issues and bugs
|
|
|
|
as I consider both of them bugs -- of specifications and/or implementations --
|
|
|
|
and bugs happen everywhere and can be fixed. Generally, determining what is a
|
|
|
|
bug and what is a (unintended?) feature is where the issue lies.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-20 10:36:34 +00:00
|
|
|
While there have been attempts within the XSF at defining common sets of
|
2020-07-18 17:40:36 +00:00
|
|
|
extensions in what is called “Compliance Suites” (currently updated on a
|
|
|
|
yearly-basis: [2020][CS-2020], [2019][CS-2019], etc.), they have in my opinion
|
2020-07-19 14:19:53 +00:00
|
|
|
had mild success for the effort it takes the author to gather feedback and
|
2020-07-20 10:36:34 +00:00
|
|
|
come up with not-so-controversial changes for newer revisions.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-20 12:22:46 +00:00
|
|
|
What these Compliance Suites don't take into account so well, despite recent
|
|
|
|
efforts; and what critics don't account for either when saying XMPP is
|
2020-07-18 17:40:36 +00:00
|
|
|
missing X, or that all implementations should do Y, is that it's not just
|
|
|
|
about features and protocols.
|
|
|
|
|
|
|
|
The process of coming up with a common set of extensions for an implementation
|
|
|
|
requires a lot more groundwork. This includes figuring out who the userbase
|
|
|
|
is, and how the experience for it should be, i.e., design. This process should
|
|
|
|
be applied across a set of implementations, using the same design guidelines and
|
|
|
|
ensuring interoperability.
|
|
|
|
|
2020-07-20 14:20:07 +00:00
|
|
|
It is not enough if somebody using [Conversations] on mobile talks to somebody
|
|
|
|
else using [Dino] on desktop, even if they both follow the Compliance Suites
|
2020-07-24 09:09:24 +00:00
|
|
|
for a given year and can then interop on a “basic” level (which to be honest,
|
|
|
|
is still pretty advanced), they have different design guidelines and there
|
|
|
|
will inevitably be areas where they differ and some features won't behave as
|
2020-07-18 17:40:36 +00:00
|
|
|
expected on the other side. The issue is not that there is no design
|
2020-07-19 14:19:53 +00:00
|
|
|
guidelines, it's that they're not the same.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
[CS-2019]: https://xmpp.org/extensions/xep-0412.html
|
|
|
|
[CS-2020]: https://xmpp.org/extensions/xep-0423.html
|
|
|
|
|
|
|
|
|
2020-07-20 14:20:07 +00:00
|
|
|
# And in practice?
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-19 19:42:15 +00:00
|
|
|
Multiple solutions following this design process already exist, such as
|
|
|
|
[Xabber] and [Tigase]. [Snikket] is a new addition in this domain. You can
|
|
|
|
read about its goals [in the introduction article][snikket-intro] or in a
|
|
|
|
[more detailed explanation][snikket-explanation] from its author. At the time
|
|
|
|
of writing it is composed of a rebranded [Prosody] (server) and Conversations
|
|
|
|
(client), is entirely based on XMPP and federates with the XMPP network. But
|
2020-07-20 10:37:55 +00:00
|
|
|
the important part -- and also why it deserves a name other than “XMPP” -- is
|
2020-07-20 12:22:46 +00:00
|
|
|
its goal: to provide a server and a (set of) client(s) that interoperate
|
|
|
|
properly and have common design guidelines that match the expected userbase.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
2020-07-18 19:43:08 +00:00
|
|
|
Maybe you're not part of Snikket's target, in which case there might someday
|
2020-07-20 14:20:07 +00:00
|
|
|
be a similar solution that's more adapted to your use-case. For the more
|
|
|
|
technical of us who understand the protocol and/or can deal with less unified
|
|
|
|
designs, it may be ok to continue using our current applications and work
|
|
|
|
around these issues ourselves. For the mass audiences I believe this is not an
|
|
|
|
option.
|
2020-07-18 17:40:36 +00:00
|
|
|
|
|
|
|
[Conversations]: https://conversations.im
|
|
|
|
[Dino]: https://dino.im
|
|
|
|
[Prosody]: https://prosody.im
|
2020-07-19 19:42:15 +00:00
|
|
|
[Tigase]: https://tigase.net/tigase-instant-communication
|
|
|
|
[Xabber]: https://www.xabber.com/
|
2020-07-18 17:40:36 +00:00
|
|
|
[Snikket]: https://snikket.org
|
|
|
|
[snikket-intro]: https://blog.prosody.im/introducing-snikket/
|
|
|
|
[snikket-explanation]: https://www.reddit.com/r/xmpp/comments/f0el07/can_someone_explain_to_me_whats_the_point_of/fgto5h0/
|
2020-07-20 10:37:55 +00:00
|
|
|
|
|
|
|
# So why (not) XMPP?
|
|
|
|
|
|
|
|
To the question I set to answer at the beginning I say this: Why does it
|
|
|
|
matter? For whom? My goal is to bring standardization, decentralization, and
|
|
|
|
extensibility to mass audiences. Not to bring XMPP to them. As explained above
|
|
|
|
I believe we need product suites with common design guidelines, and they
|
2020-07-20 14:20:07 +00:00
|
|
|
should include these properties. XMPP has good building blocks but lacks
|
|
|
|
consorted design.
|
2020-07-20 10:37:55 +00:00
|
|
|
|
|
|
|
I want decentralization and standardization to prevent users from being locked
|
|
|
|
in closed -- often also proprietary -- silos such as WhatsApp, Hangouts,
|
2020-07-20 14:20:07 +00:00
|
|
|
Slack, MS Teams, Tik-Tok, or even Signal. And I want extensibility to prevent being
|
|
|
|
stuck in the past and to adapt to the people's needs.
|
2020-07-20 15:31:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
_Comments available on your usual centralized platforms: [reddit] and [HN],
|
|
|
|
but also [mastodon]._
|
|
|
|
|
|
|
|
[reddit]: https://www.reddit.com/r/xmpp/comments/hun47q/what_about_design/
|
|
|
|
[HN]: https://news.ycombinator.com/item?id=23898679
|
|
|
|
[mastodon]: https://post.lurk.org/@pep/104546844162627507
|