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.

