Yeah, it was the thing that was trying to understand.
Is it raining?
Can you hear me?
Yes.
Nice.
So, browsing Git repository is good with God with me.
I am Mama Polo.
I did the huge mistake of installing OpenBSD back in 2018.
And here we are.
Life is strange sometimes.
I became a developer a few years later and then I got involved in the Game of 3 project.
And that's why I'm here.
What is the Game of 3 project?
Anyone used God of a herd of it?
Oh, thank you.
As an ecisism, some hands.
Is a distributed version control system.
It was started by Stefan Spurling in 2017.
And it's compatible with Git.
So both in the networking code and in the actual repository on disk.
But it's not a bug for bug implementation.
So we're not just trying to do up a clone of it.
It's a different version control system that is compatible.
And of course, comes from OpenBSD.
So it's designed with privileged separation in mind.
What is inside of it?
Very quickly.
Here, of course, the common line.
I got with a few other helpers in it.
Like God admin, which is unlike Git.
We split the things.
A few of the subcommands.
But if you use SVN, you probably hear something similar with SVN.
And SVN had been.
God is a common line too for committing and running Diff and Blame.
And all the other operation.
God admin is for managing the Git repository on disk.
We have a nice and courses interface, which is stock.
We have our own Git repository server with an on SSH support even.
I mean, it's awesome.
Yeah.
SSH, but it supports that as well.
We have a fairly new thing, which is God's SD.
But Stefan did a talk, I think, two years ago.
And here, Terraforming is probably not as described on the map page,
but give the idea.
And we have today, main character, which is God WebD.
God WebD is a web interface for browsing set of repositories,
looking at the comment log, at the Blame.
If you ever use the forge, you kind of know what it means to browse
a Git repository on a web UI.
And what I would like to try today is do a little bit of a history thing.
So instead of just presenting what it is, I would like to start with the history
how we got merge inside our tree, and how it evolved until today.
So at first, we had God Web.
Notice that there is no D at the end, because it was a CGI script written
by trace summary in back in 2020.
And then sometime later, I started working on the demon version,
so I got WebD in 2022.
And yes, some notes on when the thing were available initially.
At some point, we removed God Web, the CGI one, just to keep God WebD.
And yeah, since then, a few things happened.
Some code changed, and let's start with the beginning, though.
So in the beginning, God WebD was the kind of usual OpenDSD demon.
So I mean, usually start by transmogrifying all the demons,
and then you repout the logic, and you make your own.
But it was very simple.
It had just a power in process, and it split.
And I was called sockets back in a day, and then it got renamed to serve
because it made much more sense to handle the request.
So you read the fast CGI, because it based on fast CGI.
So it runs behind HDPD.
And it passes the request and generates the view, like nothing incredibly fancy.
But, oh, first of all, a parenthesis in the LibEx Act,
because this is something that I think is quite interesting.
It's not directly tied to how God WebD works and how the web application is,
but it's a nice, I think, design from the Game of 3 project.
So I talk about privilege separation before, and this is a way to achieve it.
So basically, we have our own internal library to handle all the,
I mean, to interact with a GitHub repository, because,
I don't know, to, we have API, internal APIs to make commits,
to run rebays, to blame files, to interact with the devs and whatnot.
And all the parts in our library that are touching the files on disk
or are talking with external servers are properly
sandboxed on OpenVSD. So each one of them, I have some example.
I got GridBlob, got GridCommate, got GridObjects.
Those are standalone programs, which are not available in the path.
They are installed on the LibEx Act, of course.
And they are running a very, very strict pledge.
I'm assuming you have a fairly quick idea of rough ideas, or what pledges.
I think it's a mechanism from OpenVSD to sandbox the programs.
So basically, pledge SDDIO, RECFSD means that this programs that have that pledge,
at the start of main, can only talk over file descriptors are already open.
So standard input, standard output, that is, standard error.
And can receive file descriptors.
And so it means that all the parsing code from object that you fetch from the internet,
from whoever server, for whatever, they are parsing a very strict and sanitized environment.
I mean, it's one of the steps to improve the overall security,
you start to make boundaries at different levels.
So we have this LibEx Act, they are parsing the data,
and then they give back the parsed data to the main process.
Yeah, this is what I've already said.
The whole, I started to talk about different processes initially.
And I should have made a note that we're using IMSG, which is,
I think it originated in BGPD.
I think if I don't remember, if I remember correctly, which is a simple,
more or less way of doing internal process communication with some bells and whistles across different processes.
And that's how, and that's how, for instance, the LibEx Act processes are
talked with the main process using this.
So a bit of a devolution after that.
So the first version, it was like a very, very simple, was basically a CGI script.
Just transform it enough that you could handle more than one request and speak some fast CGI.
So it works.
One of the first things that we did was to implement a small templating system.
Most of it, because print preparation is not a very good way of building web views.
Basically, if you ever try, it doesn't go fast.
It doesn't go on a lot due to all the possible way you have to inject things inside the HTML and whatnot.
Back at the time, I was just playing with the idea of writing a very simple template engine.
And, well, Tracy liked it enough, she didn't like it enough.
And so we got into the tree.
But just showing a stupid example that I copy-pasted from one of the functions that we used to render things.
This is a fairly silly forward.
Slightly, slightly inspired by go templates, but it's fairly small.
One interesting thing of the template library that we're using is that it's completely a compile time.
So you write these fragments in these, they get compiled back to C code.
And then you don't have things around time, like parsing the templates around time and trying to insert things around time.
Then the big split.
This was the first big split that we had.
So we started again with a very simple interface, internal interface, main process and a few copy of the same process handling the request.
And we started to rethink the internal interface of it and try to improve the precept nest.
I hope it's a word of it.
To send box better, the various parts of this web application.
Because at the end of the day, you're running a piece of software,
talking all the day, 24-7, to string it on the internet, and anything can happen.
So we wanted to really try to, as many boundaries and try to reduce the number of pledges or reduces the number of capabilities that the various parts needed down to the,
I mean, hopefully this is the smallest possible set.
And we, this was the first split that we did.
So we had a process that was listening on the fast CGI socket, parsing the fast CGI protocol, having some kind of internal logic like to dispatch,
you ask it for this page and doing some dispatching on the right page and then producing the output code.
That is the output page of the HTML code.
So that is more or less the pipeline itself.
We shouldn't have happened.
And the first split was to try to get the fast CGI parsing code away from the rest.
So we did this split.
So we had the first, now the server process was just handling the fast CGI parsing it.
And the actual process handling of the request of the HTML generation was splitting in and all the process.
This was for us to work around of a small limitation that we had, because by default we were CH routing under WWW.
So that means that you should have had enough free space in there to copy or get repository.
So the thing could actually render them.
And at this point we could lift the CH routing limitation from the second case and still have all the handling of the untrusted clients that are connecting to you.
In a strict down process it does very little, very little code is running there and have the actual code process handling.
In another process it is not CH routing, so you can point it.
I mean you can have your get repository in different place.
Then continue on this kind of trying to reshape the interface to isolate various parts and move them to dedicated processes to sandbox them better.
We did another split recently for the introduction of the authentication feature.
So on the side, first I have another question, who has ever heard of gotub, not getub gotub.
Oh nice.
One other thing that we wanted to do for that was to allow, of course, authentication.
Because you wanted to have your repository in there, but maybe some are private and not intended for other.
People to see them or one not, so we wanted to have an authentication mechanism working in.
And what we came on, what we realized in the end, what make is a way to authenticate the SSH, which is a fairly interesting thing.
I don't think that many people did that.
It's quite cool.
And also doubles as a bought production.
And if I have enough time, I would like to try to do, erase my mouse.
Can I open Firefox in here?
I wanted to do a very, very quick live demonstration of that.
If it's working, it's working.
So, but I don't know if I have internet working here.
I think that's a very effective thought production.
Sorry?
It's a very effective perspective.
Yeah, yeah.
One of the reasons was that because, oh, it's working.
Yes.
And I'm authenticated already.
That's a bummer.
So let's go here for instance.
So, yes.
So this is the main instance, let's say, of the air.
Yeah, I've got the idea we used to, I mean, to show to the people the thing.
And it's by default blocked.
And the thing interesting is that I was talking about authentication.
But one of the things that is very nice about this is, if you see one anonymous,
it means that this actually, let's try it again.
And boom.
I'm authenticated and I can, oops.
Brows this.
I can, I don't know.
Let's see our difficult, for instance.
Papa, I have my logs, I have my trees, I have my fires, I can.
It's very difficult.
It's a projector here.
So, this thing, as was noticed, is also doubles as about protection.
Because, unfortunately, you probably have realized, if you try to host anything on the web,
I don't know the last few years.
The cost and spam from AI scrapers and whatnot is not very nice to say.
And since we're also trying to run this on various more machines with, I mean,
not lots of resources.
It was very, very not nice for the lack of a better adjective.
This is the machine dying from AI scraping.
And that's it.
So, we did the live demo about to end.
Last few slides.
God, God of pages.
It's not a thing.
It's not a name.
It was just the funniest thing I could think for a title.
Another new feature that we introduced.
And it's available from today, because Stefan did the release just a couple of hours ago.
Is the fact that God would be now is also able to serve files from branches and get.
So, if you have a user, you know, get up pages.
You know that you can commit or your HTML and generate the pages on a certain branch.
And then automatically works.
And God would be, you can do more or less the same.
We have more knobs that you can use, for instance.
You can just serve the, your static content under a specific prefix.
So, you can have both your God would be and the preview of a website running on the same.
Beautiful, for instance.
And it respect the authentication.
Now, I show you the authentication only with the, only with the anonymization.
So, like everyone can do that.
But we have some ACL in there.
You can say, this user can only see this, this and that repository.
And it's only allowed to read or it's also allowed to write.
And that kind of thing.
Then closing.
Future work.
Well, this is a wish list, basically, because it's a usual thing.
You know, a lot of things you want to do.
And then sometimes you manage to do them.
Sometimes they just stay there until until you manage to do them.
So, one other thing that we probably will spend some time in the future in God with these in
Proof Caching.
Because we have caching inside the library, inside the internal library that we use.
We have a lot of caching in different places for objects and whatnot.
But the problem is that God with these always closing and re-opening your repository.
So, every time it throws away the cache and that's kind of a bummer.
And then, well, if you've seen the web page, we have a lot, a lot to improve in the overall UI of it.
And I don't know, more nice thing like an outside-by-side-ive, so some kind of integrations.
And yeah, a bit of a rush, but there was all.
If you have any question, I would be very happy to answer them.
Otherwise, I put some links for, I mean, my come on Macedon.
Macedon.
They got our back out of Macedon.
The web page of the project.
They got our homepage.
And the main list in case you're interested to join and see.
Hi.
Thank you.