《黑客帝国》的一周
A week in Matrix

原始链接: https://piegames.de/dumps/a-week-in-matrix/

这段反思叙述了管理 Matrix 社区空间的艰辛,强调了该平台在营销上自诩为“Discord 替代品”与实际技术脆弱性之间的巨大差距。 作者详细列举了反复出现的问题,包括权限设置会自行重置的“空间”功能、导致误封的不透明审核政策,以及由 Dendrite 等家庭服务器配置错误引起的晦涩联邦报错。由于客户端表现不一致且缺乏适当的工具,即便是调查封禁或修复房间可见性这类简单任务,往往也需要花费数小时进行手动干预或使用“变通方法”。 作者认为,虽然 Matrix 在处理简单的点对点消息时表现良好,但在管理大型社区时却显得力不从心。他们对官方渠道所宣传的理想化、无缝的使用体验感到沮丧,认为这与他们必须不断修补的“腐烂地基”形成了鲜明对比,并由此产生了一种被“精神操控”的感觉。最终,这篇文章批判了 Matrix 宏大的去中心化、多元互操作性理想,与该生态系统在实际高级社区管理中极其不可靠的现实之间的脱节。

关于“Matrix的一周”的Hacker News讨论,凸显了Matrix在技术潜力与现实可用性之间的巨大鸿沟。 批评者认为,Matrix背负着沉重的“设计债”,很大程度上是因为该项目主要由热衷钻研技术的开发者驱动,他们往往将技术上的优雅置于用户体验(UX)之上。为非技术人员管理服务器的用户反映,该平台存在持续性问题,包括状态同步失败、解密错误以及客户端生态混乱(Element与Element X之争)。缺乏面向普通用户普及的清晰统一路径,再加上不同服务器实现之间迁移困难,使得自建服务器和扩展变得十分棘手。 然而,支持者则为Matrix辩护,称其是满足联邦式、多设备加密群聊等复杂需求的唯一可行开源方案。尽管他们承认目前存在的挫败感,但也指出较新的“Element X”客户端已有改进,并强调像XMPP这样的替代协议虽然可行,但也面临严重的碎片化和设置障碍。 总的来说,舆论共识认为,虽然Matrix技术强大,但对于普通用户而言,它仍然是一个令人“抓狂”的工具;其架构上的复杂性常常阻碍了它成为主流通信标准的愿景。
相关文章

原文

A user accidentally writes in the room of a Matrix space, resulting in every member of that space getting a notification. Matrix spaces are just regular rooms, and the fallback for old clients which don't support spaces is to render them as completely regular chat rooms. On the other side, new clients that do support spaces have very confusing UI when people start chatting in them, because that's not supposed to happen. (Yet, most clients don't adjust the room permissions in spaces to disallow people to chat in there. That would be too easy.)

I figure out how to get Element Web to display the space as a regular room in order to inspect it (it's in the devtools), give myself admin permissions and adjust the room's permissions to disallow chatting in the space room.

A user reports a spurious ban on the forum, saying they got banned from our Matrix space and have no idea why. A quick Draupnir query for the user handle shows nothing of interest. After some tring around, I query Draupnir for the domain of the user handle instead. Indeed, it finds one entry:

!foQLZposNt3iEpkl5O:example.org

  • m.policy.rule.server (m.ban): … (spam)

Apparently, someone on a moderation list our space is subscribed to banned the user's domain (it looks like it might be a single-user personal instance). I am not in the room !foQLZposNt3iEpkl5O:example.org, which I assume is the policy room from which the ban is coming, and Matrix annoyingly won't tell me its title. But it seems to be public, so I try to join it to find out. My homeserver chokes a little while trying to join me, WARN conduwuit_api::client::sync::v3::joined: timeline for newly joined room is empty, but it then asks another server to backfill the timeline, and then I only have to "clear cache and reload" my client (which will incidentally also mark all my chats as unread, which I'll have to manually clear again afterwards) and I'm in.

The room is one of those community-pooled policy rooms, full of messages of type m.policy.rule.user originating from both mods and moderation bots, which ban people and servers with sometimes very explicit usernames. I search for the domain of the affected user, but Element will only search through messages of type m.messages and thus the search comes in blank. The usual workaround for when the search doesn't work is to export the chat as HTML, then grep through it in the hope that the relevant message is in the exported range. Luckily, the room export indeed includes all message types, and grepping for the domain gives me seven hits.

It turns out, the homeserver of the affected user accidentally had had open registrations at some point in the past, with the expected consequences. Mystery solved. Getting this info took me roughly 40 minutes. It should have been two at most.

Postscriptum: Two weeks later, I get contacted by that user again, they still struggle with being banned. All I can see is that their domain is still on the ban list. I can't find an easy way of making local overrides to the ban list, so there is little we can do but to unsubscribe from the entire ban list, which would potentially expose the entire community to spam and abuse.

While onboarding a new person to our Matrix space, they don't seem to be able to see one of the rooms, despite being "suggested" for that space. After them manually joining that room, it does show up in the space's room list. The issue can be reproduced from various accounts on different homeservers.

Removing and adding the room to the space again does not seem to help. Even tombstoning and recreating the room does not seem to be a solution. However, if one of the space admins joins the room, it suddenly shows up in the space's room list again. When they leave again, the room disappears anew.

We accept the obvious workaround and move on.

After some routine server maintenance, Draupnir stops responding to admin commands. According to the server logs, Draupnir seems to be processing the commands just fine. Some long debugging sessions reveal that this is an outbound federation problem with the Draupnir's homeserver (it is the only account on there). More debugging reveals that this is an issue with the Dendrite default configuration which drops all egress IPv6 traffic for no good reason.

Noticing and debugging the issue took over a month in total, during which the community space was without protection from a moderation bot. I am very glad that we were not hit by a porn&gore spam wave during that time.

Dendrite is kind of deprecated as a homeserver these days, at least it doesn't seem to be the main focus of development and most recent commits are mere dependency bumps. Years ago, when the server was set up, choosing Dendrite seemed like a good decision, because it was easier to deploy and maintain than Synapse and there was a promise for a bright future for the first 2nd generation homeserver implementation. Unfortunately, migrating between Matrix homeserver implementations remains a problem with no satisfying solution, so we're kind of stuck on slowly rotting foundations.

A user accidentally writes in the room of a Matrix space, resulting in every member of that space getting a notification. Again. In the same room as last time, despite me setting the permissions a couple of months ago. I go check, and the permissions have somehow reset themselves. Some testing confirms that the room seems to have desynced, because when I re-apply the permissions change they don't show up for people on other home servers, allowing them to continue chatting in the space room. The workaround is to have someone else on a different homeserver apply the changes and hope that it propagates to sufficiently many other homeservers on the other side of the desync.

A split brained Matrix room like this means that some users might be allowed to chat in that room, and those messages would propagate to other homeservers who haven't received the permissions change. However, homeservers who do would soft-fail those messages, rendering the chat invisible to the other side of the split.

The room is overdue for a room version upgrade anyways, so we end up not investigating this any further for the time being.

My homeserver had degraded federation for a couple of days. The root cause isn't super important, but it was something with DNS (of course) causing server resolution to fail and resulting in the server connecting to its peers on wrong default ports, leading to directional communication breakdown. The issue once identified was quickly fixed, but unfortunately the homeserver did not properly resume operation afterwards: Unfortunately, something desynced along the way, and the server ended up thinking of one account not being in a certain room. Fortunately this was just a bot account, so kicking it from the room and re-inviting it resolved the issue. But still, I wonder: How many others users am I accidentally ghosting because my homeserver just "forgot" about them?

The Matrix Foundation's Mastodon account once again boosts some toot from a person reporting a very happy experience using Matrix. The user looks like they've never joind a group chat larger than a handful of people, mostly use 1:1 DMs and don't know what spaces are. If they self-host, they likely are running a Synapse server with some Element client, but most likely they're just happily chugging along in the matrix.org silo.

I'd like to be happy for them, but I can't help not feeling somewhat gaslit by the stark contrast between the happy stories boosted into my timeline and my personal reality of helping run an actual community in this ecosystem. On a certain level this makes sense: How good a tool is heavily depends on the purpose you use it for, and Matrix undeniably does have its strengths. And the usage patterns for Matrix I find myself in clearly aren't getting as much love and dedication as others. Some are a matter of use case: Focusing on the needs of WhatsApp and Signal users first arguably makes sense. Others are a matter of principle: When the experience suffers from ecosystem software diversity due to interoperability issues, then something fundamental about the project's values is lost. Saying "Matrix is great but only if you use the flagship client on a flagship server made by the flagship company" doesn't have the same ring to it.

Some kind of clash between ideals and financial reality is inevitable to any project with ambition, but expectation management is key here. Because as of right now, the clash between PR touting "we are a serious Discord alternative" on social media all the while the development reality being "spaces are low priority, because they're a feature for more 'advanced' users" is jarring. Maybe I'd be feeling less bitter about all of this if not for all the broken promises over all these years.

联系我们 contact @ memedata.com