WEBVTT 00:00.000 --> 00:12.000 Let's welcome the next speaker, it's Fintan, who's going to talk about radical, local 00:12.000 --> 00:14.000 first code collaboration. 00:14.000 --> 00:15.000 Let's welcome him. 00:15.000 --> 00:30.000 Even better. 00:30.000 --> 00:33.000 Yeah, it's my first time to pause them. 00:33.000 --> 00:35.000 Thanks for sticking around this schedule. 00:35.000 --> 00:38.000 It's so stacked, like it's crazy. 00:38.000 --> 00:41.000 Thanks Nico for organizing everyone else. 00:41.000 --> 00:43.000 Yeah, it's amazing. 00:43.000 --> 00:47.000 I'm Fintan, I work on radical as a maintainer. 00:47.000 --> 00:55.000 I'm like here about local first digital sovereignty, functional programming, and also 00:55.000 --> 00:58.000 like during handstands and calisthenics. 00:58.000 --> 01:04.000 I've been working on radical for six years, just over six years now. 01:04.000 --> 01:07.000 So I'll take you through some of this. 01:07.000 --> 01:12.000 But first, I'd like to say happy Saint Bridges Day, because I'm Irish. 01:12.000 --> 01:18.000 Yeah, a great day for fertility, first day of spring, up women. 01:18.000 --> 01:26.000 So before I get into radical, I have to say that I got into open source software 01:26.000 --> 01:30.000 by working on open source projects on GitHub. 01:30.000 --> 01:34.000 GitHub is the home for open source. 01:35.000 --> 01:41.000 Bush lately, it feels like it's a shaky ground or a shaky foundation that we're building on, 01:41.000 --> 01:43.000 because Microsoft acquired it. 01:43.000 --> 01:50.000 Microsoft is a UF owned entity, and that has implications. 01:50.000 --> 01:54.000 I'm lucky enough to be based in London now, Bush. 01:54.000 --> 02:01.000 In Ireland, and I've never been bound off GitHub, but all there has been due to their 02:01.000 --> 02:04.000 geolocation. 02:04.000 --> 02:11.000 Not only that, the CEO of GitHub stepped down recently, and GitHub is under the arm of the 02:11.000 --> 02:15.000 AI division in GitHub, or in Microsoft. 02:15.000 --> 02:22.000 And they've trained their co-pilot AI on our free and open source software. 02:22.000 --> 02:26.000 So what can we do about it? 02:26.000 --> 02:29.000 Well, GitHub is already decentralized. 02:29.000 --> 02:31.000 This is amazing. 02:31.000 --> 02:39.000 And Bush, radical, does is adds a decentralized network layer on top of that, as well as 02:39.000 --> 02:47.000 bundling the more code collaboration or like the social artifacts inside of GitHub and 02:47.000 --> 02:50.000 disperses this through the decentralized network. 02:50.000 --> 02:55.000 So my colleague Lawrence is in the decentralized internet and privacy room. 02:55.000 --> 03:00.000 He would have talked by now on the whole decentralized element of radical. 03:00.000 --> 03:07.000 So watch the recording of that, but I'll get into more of the code collaboration and local 03:07.000 --> 03:09.000 first end of things. 03:09.000 --> 03:13.000 You might remember this phase from earlier. 03:13.000 --> 03:16.000 Briefly Alex worked on radical. 03:16.000 --> 03:20.000 I was sorry to see him go, but it's okay. 03:20.000 --> 03:23.000 He's better off there. 03:24.000 --> 03:30.000 But he pioneered what we call collaborative objects or cobs. 03:30.000 --> 03:37.000 And these are local first CRDTs that were bundling in GitHub. 03:37.000 --> 03:45.000 So how radical is kind of laid out is we use or abuse Git name spaces. 03:45.000 --> 03:49.000 Every peer has their own name space. 03:49.000 --> 03:54.000 So the simplified version here is got Alice, Bob, and Eve. 03:54.000 --> 03:58.000 And they have their own set of references. 03:58.000 --> 04:01.000 And references just point to commits. 04:01.000 --> 04:12.000 And so in this case, we can jump to the idea of them having a reference to a particular issue. 04:13.000 --> 04:18.000 If we then combine those references, we can create the commit graph. 04:18.000 --> 04:27.000 And we get this graph of an issue where we can start off with a title in the description. 04:27.000 --> 04:35.000 Alice might make one comment, Bob might make another comment in parallel. 04:35.000 --> 04:44.000 Eve labels the issue and so on and so forth until it gets closed. 04:44.000 --> 04:51.000 So the commits contain operations and operations have actions in them. 04:51.000 --> 04:57.000 But then what we need then is to be able to walk this graph. 04:57.000 --> 05:07.000 We do it in a like topological sort with some type breaking and produce some more consumable JSON. 05:07.000 --> 05:18.000 So this is what our like CLIs or web interfaces use to present issues or patches. 05:18.000 --> 05:26.000 One problem with that evaluation function is that one way to do it is through native rust through our library. 05:26.000 --> 05:34.000 And in other ways through the CLIs or through like user owned binaries. 05:34.000 --> 05:41.000 So this gives access to like file system, IO, anything can be like executed. 05:41.000 --> 05:52.000 So this is one problem I'd like you to keep in consideration for a later slide. 05:52.000 --> 06:00.000 Another problem is that all the existing hubs are mostly defined by us at the moment. 06:00.000 --> 06:08.000 So we have issues, we have patches, we have this idea of an identity for repository that's also a Cobb. 06:08.000 --> 06:14.000 And we have the job Cobb which is for like CI, CD kind of stuff. 06:14.000 --> 06:19.000 But as far as we know the others is the empty session. 06:19.000 --> 06:23.000 So in the future we'd like to make this a bit easier. 06:23.000 --> 06:29.000 I might just do a quick show of my terminal to give you an idea of what that looks like. 06:29.000 --> 06:34.000 So here I'm in the heartwood repository with this is where we write the radical protocol. 06:34.000 --> 06:41.000 And if I run rad issue, I can list out the issues. 06:41.000 --> 06:47.000 And if I do rad issue show. 06:47.000 --> 06:54.000 We can see the text, the author, some labels, it's status. 06:54.000 --> 06:58.000 We've got the same for patches. 06:58.000 --> 07:03.000 Something interesting about patches in radical is that they're immutable. 07:03.000 --> 07:18.000 So each revision is a mutable change based on the last one, which is a nice feature because we can interchange revisions easily. 07:18.000 --> 07:31.000 And rollbacked or like choose ones like previous ones that might have been a better implementation, but someone experimented with the revision. 07:31.000 --> 07:34.000 Let me go back. 07:34.000 --> 07:44.000 So something I've been thinking about for the future is maybe using WebAssembly for these Cobbs. 07:44.000 --> 07:47.000 The idea is kind of like a plug-in system. 07:47.000 --> 07:54.000 So WebAssembly kind of gives you the a little bit more security. 07:54.000 --> 07:58.000 One idea in WebAssembly is like this idea of fuel. 07:58.000 --> 08:06.000 So the executable drains from the fuel reserves for each operation. 08:06.000 --> 08:15.000 So it can't run forever in a recursive loop ruining your system somehow. 08:15.000 --> 08:20.000 And another aspect is that it can't access IO. 08:20.000 --> 08:29.000 I think there are some like proposals for interfaces, what their capability based. 08:29.000 --> 08:37.000 So and then also these like binary executables could also be distributed through Git as well. 08:37.000 --> 08:44.000 Maybe hide in them inside Blobs and this makes them distributed through the network as well. 08:44.000 --> 08:48.000 That's more of an idea right now. 08:48.000 --> 08:50.000 We have an experimented with it. 08:50.000 --> 08:58.000 But if anyone is more familiar with like WebAssembly, please come talk to us. 08:58.000 --> 08:59.000 But that's it. 08:59.000 --> 09:03.000 That's kind of the run through of local first experience, 09:03.000 --> 09:11.000 but if you go to Radical, ICLE.xYZ, there's links to our Zulu, 09:11.000 --> 09:16.000 where we chat about the protocol itself. 09:16.000 --> 09:20.000 And yeah, come chat to us, come try out Radical. 09:20.000 --> 09:25.000 Let us know what's not working, what's working, and everything in between. 09:25.000 --> 09:26.000 Thank you. 09:26.000 --> 09:38.000 We're going to take questions. 09:38.000 --> 09:41.000 There is five minutes of a question for Fintan. 09:41.000 --> 09:42.000 Yes. 09:42.000 --> 09:55.000 So how is replication of potentially unwanted artifacts from third party? 09:55.000 --> 09:57.000 It's from third party peers. 09:57.000 --> 10:01.000 Like say spam issues or other content. 10:01.000 --> 10:02.000 Sure, yeah. 10:02.000 --> 10:03.000 That's a good question. 10:03.000 --> 10:05.000 Get that a lot. 10:05.000 --> 10:08.000 So part of it is just a kind of policy system. 10:08.000 --> 10:12.000 So when you notice a node that you don't like, 10:12.000 --> 10:19.000 you can rad block to add it to a block list and your node will start filtering out. 10:19.000 --> 10:21.000 It's pretty rudimentary right now, 10:21.000 --> 10:29.000 but we want to go that up into our richer ecosystem where people can build maybe more automated tools for detecting that. 10:29.000 --> 10:33.000 I'm just doing it for you or even exchange in block lists. 10:33.000 --> 10:39.000 Can you like retroactively get rid of stuff that's been like added that you don't want? 10:39.000 --> 10:48.000 There are ways to like, yeah, it comes to delish prides of cobs, but it's a little bit hard because it's a get graph. 10:48.000 --> 10:54.000 So those objects lie around and you'd have to do some more manual forensics for the giant being. 10:54.000 --> 10:55.000 Yeah, thanks. 10:55.000 --> 10:56.000 Good question. 10:56.000 --> 10:58.000 What were chances? 10:58.000 --> 11:00.000 Yeah. 11:00.000 --> 11:02.000 Thank you. 11:02.000 --> 11:06.000 So the question is about accessibility. 11:06.000 --> 11:10.000 Because I found this is pretty super cool. 11:10.000 --> 11:14.000 I really would like to be able to embark on it. 11:14.000 --> 11:15.000 Yeah. 11:15.000 --> 11:19.000 But I am a little bit worried about the accessibility considerations. 11:19.000 --> 11:23.000 So to give just one example, the script that you used to install. 11:23.000 --> 11:25.000 I was reading it during the talk. 11:25.000 --> 11:26.000 Yeah. 11:26.000 --> 11:29.000 Well, you used colors to mark errors. 11:29.000 --> 11:33.000 And the second example is like, you used zoolip to communicate. 11:33.000 --> 11:36.000 I'm not sure it's the most accessible way to communicate actually. 11:36.000 --> 11:43.000 So do you consider moving while taking accessibility considerations into account at all the levels of the project, 11:43.000 --> 11:45.000 including the communication means? 11:45.000 --> 11:52.000 And for instance, I assume that metrics would be more like it's a higher chance to be accessible right? 11:52.000 --> 11:53.000 Right. 11:53.000 --> 11:54.000 My nature. 11:54.000 --> 11:55.000 Yeah. 11:55.000 --> 11:56.000 I love that question. 11:56.000 --> 11:57.000 Thanks. 11:57.000 --> 11:59.000 And I appreciate that. 11:59.000 --> 12:04.000 Like, I, so to speak blind to these problems. 12:04.000 --> 12:10.000 Because I don't have accessibility issues. 12:10.000 --> 12:12.000 And we're a very small team. 12:12.000 --> 12:15.000 So it's something that I'd love to see. 12:15.000 --> 12:18.000 But I don't know where to start with that. 12:18.000 --> 12:22.000 And I didn't even realize that through the paths accessibility issues. 12:22.000 --> 12:23.000 Yeah. 12:23.000 --> 12:27.000 If you want to chat about it more, I'd love to hear your thoughts. 12:27.000 --> 12:28.000 Yeah. 12:28.000 --> 12:29.000 Thanks for watching. 12:29.000 --> 12:33.000 And I mean, everything was on the slides. 12:33.000 --> 12:37.000 But the slides are not on the page of the conference. 12:37.000 --> 12:38.000 I'm kind of stuck. 12:38.000 --> 12:39.000 Yeah. 12:40.000 --> 12:41.000 Yeah. 12:43.000 --> 12:44.000 Thank you. 12:55.000 --> 12:57.000 First of all, great talk. 12:57.000 --> 12:58.000 Thank you. 12:58.000 --> 13:00.000 And just a comment, but hopefully not an annoying one. 13:00.000 --> 13:04.000 And it's that I do have a assembly like a lot for my job. 13:04.000 --> 13:06.000 So you certainly pick my interest. 13:06.000 --> 13:09.000 If you want to talk about assembly sometime and need advice or anything. 13:09.000 --> 13:10.000 Yeah. 13:10.000 --> 13:11.000 Please. 13:11.000 --> 13:12.000 We should be to chat. 13:12.000 --> 13:14.000 It's, it's called that you're using it. 13:14.000 --> 13:15.000 Yeah. 13:23.000 --> 13:27.000 Do you ever get examples of source code getting lost? 13:27.000 --> 13:29.000 Because the page will go offline? 13:29.000 --> 13:30.000 No. 13:30.000 --> 13:31.000 Yes. 13:31.000 --> 13:32.000 Yeah. 13:32.000 --> 13:37.000 And we have the benefit of people hosting like super seed. 13:37.000 --> 13:40.000 So replicating the whole network. 13:40.000 --> 13:43.000 Which is a fantastic size of 50 gigabytes or so right now. 13:43.000 --> 13:44.000 Yeah. 13:46.000 --> 13:47.000 Next question. 13:47.000 --> 13:48.000 Yeah. 13:48.000 --> 13:49.000 Two actually. 13:49.000 --> 13:51.000 The one is, 13:51.000 --> 13:53.000 What is the scale? 13:53.000 --> 13:57.000 What is the amount of issues that you have imported into radical from an existing project? 13:57.000 --> 13:59.000 If that is something that has happened? 13:59.000 --> 14:00.000 Sure. 14:00.000 --> 14:07.000 And the other one is, if you say, have a, let's say, a primary or, 14:07.000 --> 14:11.000 Let's say, a official repository somewhere, 14:11.000 --> 14:12.000 Yeah. 14:12.000 --> 14:16.000 Can you decide who gets to send you stuff? 14:16.000 --> 14:17.000 Yes. 14:17.000 --> 14:18.000 Yes. 14:18.000 --> 14:23.000 I'm going to cheat and tell you to watch my colleagues talk recording. 14:23.000 --> 14:27.000 Because he's actually got some graphs for numbers. 14:27.000 --> 14:31.000 And then the second question is, again, yeah, there's like the policy system. 14:31.000 --> 14:34.000 So we actually host our own nodes. 14:34.000 --> 14:38.000 That is locked down to repositories that we care about only. 14:38.000 --> 14:42.000 And don't let the rest of the network come in. 14:42.000 --> 14:43.000 Yeah. 14:43.000 --> 14:44.000 Thanks. 14:44.000 --> 14:45.000 Thank you. 14:45.000 --> 14:46.000 Thank you. 14:46.000 --> 14:47.000 Thank you. 14:47.000 --> 14:51.000 Thank you.