[00:00.000 --> 00:12.300] Hello, my name is David, also known as Jorik, and I'll be your host for this session on [00:12.300 --> 00:15.540] decentralizing moderation. [00:15.540 --> 00:20.340] Most of this work was actually done by Knuxy and DeSopo. [00:20.340 --> 00:26.620] And it's a work that we have been doing for the past few years, and it started at Element. [00:26.620 --> 00:29.900] And of course, it's about the matrix network. [00:29.900 --> 00:37.380] What we want to do, we want to make moderation something that actually, and not just theoretically, [00:37.380 --> 00:42.300] works in a decentralized federated network. [00:42.300 --> 00:46.140] So what is moderation? [00:46.140 --> 00:52.100] Moderation is something that's defined by the fact that we are communicating, that there [00:52.100 --> 00:59.820] may be rules on this communication, and that we have people who enforce those rules. [00:59.820 --> 01:04.220] The moderation part is the enforcing of those rules. [01:04.220 --> 01:08.620] Again, we are talking about the matrix network. [01:08.620 --> 01:12.860] Network, the network itself, has no clue about rules. [01:12.860 --> 01:16.100] You can have many different kinds of communities. [01:16.100 --> 01:18.660] Some of them are going to be family friendly. [01:18.660 --> 01:21.580] Some of them are going to be much more adult. [01:21.580 --> 01:29.400] Some might be work specific, or sport specific, or politics specific, anything else. [01:29.400 --> 01:36.120] And each one of them can have a different set of rules. [01:36.120 --> 01:39.320] If you do not have moderation, what's going to happen? [01:39.320 --> 01:42.120] Well, this is what's going to happen. [01:42.120 --> 01:50.080] You are happily chatting with your best friends in a room, and suddenly, Marvin decides that [01:50.080 --> 01:56.160] this room must be spammed with stinky French garlic spam. [01:56.160 --> 01:59.720] Who wants stinky French garlic spam in their room? [01:59.720 --> 02:02.560] I don't. [02:02.560 --> 02:09.280] This is where the moderator needs to step in, most likely kick Marvin away, or at least [02:09.280 --> 02:14.680] have a stern talking to Marvin, and get rid of the spam content. [02:14.680 --> 02:19.400] Of course, I'm talking about spam, but in the real world, it can be much, much worse [02:19.400 --> 02:20.400] than spam. [02:20.400 --> 02:26.080] I leave this open to your imagination. [02:26.080 --> 02:30.200] As mentioned, we're talking about federation. [02:30.200 --> 02:39.600] In this case, it means that we have users who connect to one communication room from [02:39.600 --> 02:41.880] a number of servers. [02:41.880 --> 02:47.640] For instance, today, listening to this presentation, I'm going to assume that some users are connecting [02:47.640 --> 02:57.560] from foestem.org, some from matrix.org, and presumably from a number of other servers. [02:57.560 --> 03:03.520] It means that the servers need to agree upon who is a moderator with the authorization [03:03.520 --> 03:10.040] to kick bad users and to get rid of bad content. [03:10.040 --> 03:14.040] That is something that the matrix network already handles. [03:14.040 --> 03:16.200] That's part of the specification. [03:16.960 --> 03:21.960] However, things can quickly become complicated. [03:21.960 --> 03:25.360] You don't have a single room on a server. [03:25.360 --> 03:30.800] You can have users who participate in multiple rooms, can be moderators in some of them, [03:30.800 --> 03:33.600] and not moderators in others. [03:33.600 --> 03:41.520] You can also have moderators who come from different home servers and who share the moderation [03:41.520 --> 03:48.560] burden and the moderation privilege in a number of rooms. [03:48.560 --> 03:49.560] That's possible. [03:49.560 --> 03:55.760] Typically, in the matrix network, you go one step further by introducing moderation [03:55.760 --> 03:57.680] rooms. [03:57.680 --> 04:04.800] Rather than having the moderators operate directly in the room they're moderating, they [04:04.800 --> 04:08.960] are members of a moderation room. [04:08.960 --> 04:15.680] In this moderation room, they use a bot to whom they have delegated the moderation abilities [04:15.680 --> 04:19.000] to perform the day-to-day actions. [04:19.000 --> 04:27.880] When Alice or Fred wish to kick Marvin, they ask Mjolnir, the name of the bot, to do this [04:27.880 --> 04:30.040] on their behalf. [04:30.040 --> 04:32.000] This has a number of advantages. [04:32.000 --> 04:40.080] One of them is that if Alice and Fred are moderators for many rooms, they only need [04:40.080 --> 04:45.240] to kick Marvin once if they need to kick him from all the rooms. [04:45.240 --> 04:49.640] They can also publish and share policy rooms. [04:49.640 --> 04:54.840] This is how we get into the even more federated part. [04:54.840 --> 05:05.080] Those policy rooms are what let rooms and communities work together to define rules, [05:05.080 --> 05:14.040] to define users who have been banned for being toxic and abusive or spammy and who should [05:14.040 --> 05:18.440] not put their foot anymore into any of those rooms. [05:18.440 --> 05:31.000] Generally, that is one step further in the federation of moderation itself. [05:31.000 --> 05:38.200] What you already have with Mjolnir, you have those moderation rooms which can again moderate [05:38.200 --> 05:42.840] a number of individual rooms, so entire communities. [05:42.840 --> 05:47.240] You have those moderation policies that you can publish, you don't have to, and you can [05:47.240 --> 05:52.640] share again federation between those communities. [05:52.640 --> 06:02.320] You also have the side benefit that moderators can operate with some degree of anonymity, [06:02.320 --> 06:08.320] which is good because we have seen a number of cases in which there are reprisals against [06:08.320 --> 06:13.440] moderators when they try to apply the rules. [06:13.440 --> 06:18.640] So at this stage, hey, we have decentralized moderation. [06:18.640 --> 06:20.760] Well thank you for coming and listening to this presentation. [06:20.760 --> 06:26.880] It was a very brief presentation, but it was a very intense one, so thank you. [06:26.880 --> 06:34.360] If you have any questions, oh, before I forget, yeah, if you want to use Mjolnir, you need [06:34.360 --> 06:35.360] to install it. [06:35.360 --> 06:40.160] It's not very hard, there are just six easy steps, I'm not going to read them out loud, [06:40.160 --> 06:46.000] and then you can use Mjolnir, sorry, I meant 10 steps, 10 easy steps, and then you can [06:46.000 --> 06:50.320] use Mjolnir, 16 easy steps. [06:50.320 --> 06:55.320] I mean, who doesn't know how to configure engines or pantalymons, right? [06:55.320 --> 07:06.720] But after these 21 easy steps involving Docker compose, these 23 steps, are we done yet? [07:07.400 --> 07:10.440] Yes, we're done. [07:10.440 --> 07:18.960] So after these 23 steps, the 24th step says that you can now start becoming a moderator [07:18.960 --> 07:20.520] for those rooms. [07:20.520 --> 07:27.040] It's great until you read step 25, which says that if you want to do this with another set [07:27.040 --> 07:32.480] of rooms, you have to repeat everything. [07:32.800 --> 07:40.520] That is a bit complicated, especially since moderators are typically, I mean, yes, some [07:40.520 --> 07:47.080] moderators are highly technologically literate, but some aren't, and they don't need to, or [07:47.080 --> 07:50.440] at least they shouldn't need to. [07:50.440 --> 07:59.280] So the main issue at this stage when we talk of decentralizing moderation is about democratizing [07:59.280 --> 08:01.560] moderation. [08:01.560 --> 08:03.200] How do we do that? [08:03.200 --> 08:11.280] Well that's the entire point of project Mjolnir for all, which has been developed by Knuxy [08:11.280 --> 08:12.800] and Jezopo. [08:12.800 --> 08:19.880] And before I proceed, I would like to continue with a public service announcement. [08:19.880 --> 08:29.760] If you know employers or potential employers for two highly passionate and high level developers, [08:29.760 --> 08:35.160] please get in touch with them, or with me. [08:35.160 --> 08:39.320] So what would we like at this stage? [08:39.320 --> 08:44.440] We would like something simple, something that does not involve the 25 steps mentioned [08:44.440 --> 08:45.440] earlier. [08:45.440 --> 08:50.560] We would like to simply be able to invite Mjolnir, confirm that it's the moderator, [08:50.560 --> 08:53.840] and be done with it. [08:53.840 --> 08:56.440] So can we do that? [08:56.440 --> 08:58.880] Let's see how this works. [08:58.880 --> 09:08.560] Here we are, me and my best pal having a chat in our very own very interesting room. [09:08.560 --> 09:15.160] And just in case, I'm going to set up decentralized moderation for this room. [09:15.160 --> 09:20.920] So let's invite the Mjolnir bot. [09:20.920 --> 09:29.800] This creates two rooms, one of them that is going to be useful for sharing policies. [09:29.800 --> 09:35.200] In case I want to cooperate with other moderators, for instance, and we have a common base of [09:35.200 --> 09:47.200] people who wish to kick, and a moderation room in which we can actually use Mjolnir. [09:47.200 --> 09:49.440] Let's not forget one thing. [09:49.440 --> 10:02.920] We need to make sure that our moderator can moderate. [10:02.920 --> 10:09.520] With this, the moderator is no in position of moderating. [10:09.520 --> 10:20.440] And if someone were to, say, send some spam, oh no, spam has arrived. [10:20.440 --> 10:21.440] Well we should do something. [10:21.440 --> 10:25.440] Okay, I'm not going to do something right now because I'm not planning to demonstrate [10:25.440 --> 10:29.600] all the features of Mjolnir, or of Mjolnir for all. [10:29.600 --> 10:36.400] But we are no in a position where we can do something about it. [10:36.400 --> 10:44.400] So we can kick, we can ban, etc. [10:44.400 --> 10:53.880] The objective here is to ship Mjolnir for all with home servers. [10:53.880 --> 10:59.760] Let's face it, there is still a difficulty involved in setting up Mjolnir for all as [10:59.760 --> 11:03.920] the administrator. [11:03.920 --> 11:08.920] And this difficulty, I would like to consider, is part of the difficulty of setting up the [11:08.920 --> 11:11.440] home server. [11:11.440 --> 11:15.240] Of course, it can also be shipped as standalone. [11:15.240 --> 11:21.240] But as you have seen, if the administrator of the home server or the administrator of [11:21.240 --> 11:28.760] the Mjolnir for all does the necessary steps to set this up, moderators can do something [11:29.760 --> 11:32.440] well, they don't need to set up anything. [11:32.440 --> 11:36.440] It's just two clicks version. [11:36.440 --> 11:44.880] They just need to invite Mjolnir and confirm that Mjolnir is entitled to moderation rights. [11:44.880 --> 11:51.160] We even have a prototype of a user interface that does this with a button in element. [11:51.160 --> 11:55.920] I'm not going to demonstrate it here because I'm going to run out of time. [11:55.920 --> 12:00.320] But that works too. [12:00.320 --> 12:05.440] At this stage, Mjolnir for all doesn't implement the entirety of features of Mjolnir. [12:05.440 --> 12:08.800] It's pretty close, but that would need to be finished. [12:08.800 --> 12:17.000] And once we have all of that, well, this can entirely transform the experience for communities. [12:17.000 --> 12:24.560] Because creating a community is just something that you can do by creating a new room, possibly [12:24.560 --> 12:29.240] creating a space and inviting Mjolnir for all. [12:29.240 --> 12:30.240] And you're done. [12:30.240 --> 12:37.680] None of these messy 25 steps of installation of Mjolnir. [12:37.680 --> 12:43.360] There is one more problem that I'd like to talk about. [12:43.360 --> 12:50.320] Whether it's in a federated world or in a non federated world, at some point you will [12:50.320 --> 12:54.680] need to call for help. [12:54.680 --> 13:00.800] Possibly because you have just witnessed Marvin publishing some French garlic stinky [13:00.800 --> 13:09.720] spam in the room, possibly because you are a victim of abuse, bullying, harassment or [13:09.720 --> 13:11.640] witness of some. [13:11.640 --> 13:17.400] And you wish to attract the attention of moderators on that so that they can do something [13:17.400 --> 13:20.720] about it. [13:20.720 --> 13:27.960] In the current flow, well in element, but it's basically the same thing with other [13:27.960 --> 13:30.820] metrics clients, what do you do? [13:30.820 --> 13:36.360] You click on report, you write a few words to explain that what's going on and you wait [13:36.360 --> 13:39.000] for something to happen. [13:39.000 --> 13:44.480] As you'll see, in many cases, you can wait for a long, long time. [13:44.480 --> 13:50.720] Because on the other side, how do you get access to these goals for help, also known [13:50.720 --> 13:52.760] as moderation requests? [13:52.760 --> 13:58.480] Well, the official workflow in Synapse is the following. [13:58.480 --> 14:00.800] First you need to create an admin account. [14:00.800 --> 14:03.680] It's documented but not standard. [14:03.680 --> 14:10.280] Then you need to write your program to pull a REST API, which is also documented and [14:10.280 --> 14:12.800] also not standard. [14:12.800 --> 14:17.400] Then you're going to see the requests, assuming that your program works and you can do something [14:17.400 --> 14:18.800] about it. [14:18.800 --> 14:22.320] But that's not really ideal, right? [14:22.320 --> 14:27.600] Because first you need to be the admin to get the moderation requests. [14:27.600 --> 14:36.480] And then you need some custom program, surely that's not how it works. [14:36.480 --> 14:43.520] So for one year and something, we've had a new flow in Muernier to replace that. [14:43.520 --> 14:48.320] You need to install engines, you need to set it up, you need to set up Muernier for that. [14:48.320 --> 14:54.200] And instead of having to write a custom tool, you're going to see the requests in the room, [14:54.200 --> 14:57.840] in the moderation room, which is infinitely better. [14:57.840 --> 15:03.160] But it's still not good enough because you need to install the engines for one thing and [15:03.160 --> 15:07.560] because that's only for one home server. [15:07.560 --> 15:13.400] That's still in this paradigm in which you have only one community per home server. [15:13.400 --> 15:17.120] And as we have seen, that's not the case. [15:17.120 --> 15:25.040] It gets worse because to receive the call for help, you'd better hope that the user [15:25.040 --> 15:30.320] is connecting from the same home server as an administrator who can do something about [15:30.320 --> 15:32.000] it. [15:32.000 --> 15:38.440] If, for instance, you are in this room, which I believe is a FOSDEM or .org room, I mean [15:38.440 --> 15:44.720] the room in which you may be listening to this presentation. [15:44.720 --> 15:51.520] I'm going to assume that all the moderators and all the people who can do something have [15:51.520 --> 15:53.280] accounts on FOSDEM.org. [15:53.280 --> 15:57.560] This might not be true, but for the example, let's say that it is. [15:57.560 --> 16:06.920] If you are sending a call for help from an account on matrix.org, then this call for [16:06.920 --> 16:11.800] help is going to be received by administrators for matrix.org. [16:11.800 --> 16:17.680] And if none of the administrators for matrix.org can do anything about FOSDEM.org, for instance, [16:17.680 --> 16:23.160] because they're not members of the room and they do not have moderation rights in this [16:23.160 --> 16:30.360] room, well, in that case, they can do nothing about it. [16:30.360 --> 16:34.240] So that is still broken. [16:34.240 --> 16:39.920] On the upside, that's why what we've been working on, let me tell you about Project [16:39.920 --> 16:46.000] Aristotle, which is one brick that interacts with Muir near for all to implement this call [16:46.000 --> 16:48.800] for help in a decentralized world. [16:48.800 --> 16:51.680] In this case, that is my work. [16:51.680 --> 16:58.760] And the public announcement made by my colleagues is true for me, too. [16:58.760 --> 17:03.000] So what do we want? [17:03.000 --> 17:09.960] We want to take advantage of Muir near for all so that whenever someone calls for help, [17:09.960 --> 17:16.920] the moderator in the room for which help has been requested gets the information. [17:17.240 --> 17:19.840] Moderators, of course. [17:19.840 --> 17:27.800] And these are the people who can actually act upon the situation. [17:27.800 --> 17:32.800] Let's see how that works out in the current state of things. [17:32.800 --> 17:37.120] I'd love to tell you that we have already reached the stage at which this feature is [17:37.120 --> 17:40.360] fully streamlined and integrated into everything. [17:40.360 --> 17:43.120] It's not quite the case yet. [17:43.120 --> 17:51.880] In the current state, we first need to inform Muir near that we want to do this Aristotle [17:51.880 --> 17:55.960] decentralized moderation in our room. [17:55.960 --> 18:04.480] And the second thing we need to do is inform element client that we want to opt in for [18:04.480 --> 18:08.920] this new feature, which is called report moderators. [18:08.920 --> 18:13.600] But once this is done, we can look at that spam. [18:13.600 --> 18:20.040] Oh, no, there is spam and report it. [18:20.040 --> 18:22.840] This is spam. [18:22.840 --> 18:34.160] I don't want no stinky French garlic in my room. [18:34.160 --> 18:36.760] And send the report. [18:36.760 --> 18:41.680] One thing you may notice if you have recent reports is that we are actually confirming [18:41.680 --> 18:44.360] that it has been sent to the moderator. [18:44.360 --> 18:51.520] And also, this report now shows up for all the moderators in the rooms instead of only [18:51.520 --> 18:58.320] showing up for the home server admin who might or might not be in good position to do anything [18:58.320 --> 19:01.160] about it. [19:01.160 --> 19:19.800] And let's end, you know, the moderator has, without having to do anything, a very complicated, [19:19.800 --> 19:29.080] kicked Marvin from the room and removed the offending message. [19:29.080 --> 19:36.760] The reason for which Aristotle is not entirely streamlined yet is because, at the moment, [19:36.760 --> 19:41.880] it uses non-standard extensions to the matrix plural. [19:41.880 --> 19:44.400] These extensions are pretty simple. [19:44.400 --> 19:49.920] They have been submitted for standardization, but they're not part of the standard yet. [19:49.920 --> 19:56.840] Once they are, it becomes possible to enable them by default in element and in other clients [19:56.840 --> 20:02.160] to enable them by default in merely a role, which means that all the messy parts about [20:02.160 --> 20:07.840] setting up the room and setting up element to do that will disappear. [20:07.840 --> 20:15.640] And users can simply call for help using a much more streamlined mechanism that actually [20:15.640 --> 20:20.760] gets the request for help to the person who can do something about it. [20:20.760 --> 20:25.880] Now, let's take a step back. [20:25.880 --> 20:32.800] The development of Mjolnir for all and Aristotle is very advanced, but it's not entirely finished. [20:32.800 --> 20:35.640] So it's still need a little work. [20:35.640 --> 20:41.040] This is work that started its life in the former trust and safety development team at [20:41.040 --> 20:42.920] Element. [20:42.920 --> 20:48.840] Right now, it lives at the address I'm giving you on this slide. [20:48.840 --> 20:54.640] And my hope is that it's going to continue living and progressing because I believe that [20:54.640 --> 21:02.480] it can make a whole lot of change for users on matrix network and possibly even on other [21:02.480 --> 21:04.480] networks. [21:04.480 --> 21:12.000] Well, we are reaching the end of this presentation. [21:12.000 --> 21:17.000] I would like to thank you all for listening to this point. [21:17.000 --> 21:23.160] As mentioned previously, if you know potential employers for highly passionate developers [21:23.160 --> 21:29.680] who enjoy working on privacy, open source and distributed computing, please do not hesitate [21:29.680 --> 21:31.320] to get in touch. [21:31.320 --> 21:38.240] These are all our GitHub handles, but you can also find us on matrix that shouldn't [21:38.240 --> 21:39.240] be too hard. [21:39.240 --> 21:42.200] Thank you very much and have a good day. [21:53.160 --> 21:54.160] Thank you. [21:54.160 --> 21:54.160] Bye.