WEBVTT

00:00.000 --> 00:14.000
All right, let's see if that works.

00:14.000 --> 00:15.000
It does.

00:15.000 --> 00:17.000
Awesome.

00:17.000 --> 00:18.000
Hello everyone.

00:18.000 --> 00:20.000
Thank you so very much for coming here.

00:20.000 --> 00:21.000
It's a very full room.

00:21.000 --> 00:24.000
So please make sure everyone has a seat.

00:25.000 --> 00:27.000
I am Jelle Rheimhakis.

00:27.000 --> 00:28.000
I'm from the Netherlands.

00:28.000 --> 00:32.000
I've been working on a ladybird for the last year.

00:32.000 --> 00:35.000
And before that, I've been working on surrender to US.

00:35.000 --> 00:38.000
I'm the CEO of the ladybird browser initiative.

00:38.000 --> 00:41.000
I'm also a developer, maintainer.

00:41.000 --> 00:44.000
And you can find me here. Come back to me there.

00:44.000 --> 00:47.000
So let's talk about ladybird.

00:47.000 --> 00:52.000
Ladybird is something that has an origin going all the way back to,

00:52.000 --> 00:57.000
about 2018, 2019, where my colleague Andreas Kling started

00:57.000 --> 01:00.000
the personal project of his called Serenthio S.

01:00.000 --> 01:04.000
Basically an operating system from scratch with the not invented

01:04.000 --> 01:06.000
here syndrome as mantra.

01:06.000 --> 01:09.000
Basically everything needed to be written from scratch.

01:09.000 --> 01:11.000
No third party source code.

01:11.000 --> 01:15.000
And at some point he thought, well, I need some component

01:15.000 --> 01:20.000
in this operating system for rich text display editing.

01:20.000 --> 01:24.000
What better way to do that by using HTML as CSS?

01:24.000 --> 01:28.000
So this is actually one of the first screenshots that he made

01:28.000 --> 01:34.000
of this new rendering components or rendering library.

01:34.000 --> 01:37.000
At that point called lip HTML.

01:37.000 --> 01:40.000
And as you can see, in the very simple thing,

01:40.000 --> 01:44.000
just interpret some CSS, display some divs, and there we are.

01:44.000 --> 01:48.000
We have our first fully fledged browser.

01:48.000 --> 01:52.000
Of course, it took some more work to get to a point where we could actually

01:52.000 --> 01:53.000
display websites.

01:53.000 --> 01:57.000
So a lot of people joined in on the Serenthio S project.

01:57.000 --> 02:01.000
And at the Serenthio Browser, as it was applicable,

02:01.000 --> 02:05.000
I was able to display some fairly complex websites.

02:05.000 --> 02:10.000
So we were able to, well, through with all this the old version of

02:10.000 --> 02:13.000
this bit simpler, but yeah, it started to work.

02:13.000 --> 02:15.000
Which was pretty awesome.

02:15.000 --> 02:18.000
We could start slowly start logging in on websites and interact

02:18.000 --> 02:22.000
with them, display all the difficult things that we normally wouldn't

02:22.000 --> 02:23.000
be able to.

02:23.000 --> 02:28.000
So this was starting to look like a real browser.

02:28.000 --> 02:33.000
Then in 2022, we got to the point where as at one and as a tree

02:33.000 --> 02:37.000
were pretty much tackled, as you can see.

02:37.000 --> 02:42.000
And for the ones of you that don't know, as it is a sort of a compliance

02:42.000 --> 02:46.000
test, how well do browsers conform to certain standards and

02:46.000 --> 02:48.000
certain expected behaviors.

02:48.000 --> 02:52.000
And getting to this 100, 100 score at the Assetary was a really big

02:52.000 --> 02:55.000
undertaking.

02:55.000 --> 03:01.000
Then the same year Andreas decided to continue the work on a

03:01.000 --> 03:06.000
huge Chrome to basically separate it out of the operating system into

03:06.000 --> 03:08.000
a Linux app.

03:08.000 --> 03:09.000
And that's this.

03:09.000 --> 03:12.000
This is one of the first screenshots that we made of the

03:12.000 --> 03:15.000
huge Chrome when started working.

03:15.000 --> 03:20.000
It came to life and this helped immensely with the iterations

03:20.000 --> 03:25.000
because when we were building the operating system and you would

03:25.000 --> 03:28.000
need to change something in the browser, for example, we would need to

03:28.000 --> 03:29.000
compile everything.

03:29.000 --> 03:34.000
So this was just a browser, iterations were much faster.

03:34.000 --> 03:39.000
And everyone really liked working on a separate application like this.

03:39.000 --> 03:45.000
Then in 2024, Andreas came into contact with Chris Wantrath,

03:45.000 --> 03:51.000
founder of GitHub, to start a new initiative, the

03:51.000 --> 03:53.000
Ladybird browser initiative.

03:53.000 --> 03:57.000
Basically to safeguard some of the principles, everyone around the project

03:57.000 --> 04:02.000
would like to have for Ladybird and to have a place to get funding,

04:02.000 --> 04:06.000
and to make sure that that funding gets to the right people and right

04:06.000 --> 04:08.000
places.

04:08.000 --> 04:10.000
So what are those principles behind Ladybird?

04:10.000 --> 04:15.000
We are building a new web engine based on web standards.

04:15.000 --> 04:18.000
A new web engine as in, we're not a programming for.

04:18.000 --> 04:19.000
We don't wrap programming.

04:19.000 --> 04:20.000
We're not gecko.

04:20.000 --> 04:21.000
We're not Safari.

04:21.000 --> 04:24.000
We're something completely new.

04:25.000 --> 04:27.000
And we are basing it on web standards.

04:27.000 --> 04:31.000
There's been a lot of work in writing web specifications in the last years,

04:31.000 --> 04:36.000
and we have tried to use these as much as possible.

04:36.000 --> 04:38.000
I'm sorry.

04:38.000 --> 04:42.000
Oh, yeah, go ahead.

04:42.000 --> 04:46.000
We've been trying to use these as much as possible to build Ladybird.

04:46.000 --> 04:49.000
We're not going to monetize anything around the browser.

04:49.000 --> 04:50.000
We're not going to sell it.

04:50.000 --> 04:51.000
We're not going to sell user data.

04:51.000 --> 04:54.000
We're not going to accept default search deals.

04:54.000 --> 04:57.000
We're going to rely on donations and sponsorships.

04:57.000 --> 05:02.000
And we try to become as independent as possible by making these donations

05:02.000 --> 05:04.000
and sponsorships no strings attached.

05:04.000 --> 05:10.000
Meaning we will accept your money, but we can't promise anything.

05:10.000 --> 05:12.000
We won't do anything for the money,

05:12.000 --> 05:17.000
except what the initiative thinks is right for Ladybird.

05:18.000 --> 05:21.000
And our goals with Ladybird are to render the actual live web

05:21.000 --> 05:23.000
with acceptability, security, and performance.

05:23.000 --> 05:25.000
Well, of course, you need to be able to use it.

05:25.000 --> 05:27.000
And this is a huge task.

05:27.000 --> 05:30.000
We want to advance the web platform by implementing and improving

05:30.000 --> 05:31.000
graphics.

05:31.000 --> 05:33.000
So we've been using these web specs.

05:33.000 --> 05:37.000
We've been giving back to the communities around these web

05:37.000 --> 05:41.000
specs by reporting bugs, by sending in improvements.

05:41.000 --> 05:43.000
And of course, we want to increase

05:44.000 --> 05:46.000
the web engine diversity.

05:46.000 --> 05:51.000
Because everything has become one big Chromium Gecko Safari world.

05:51.000 --> 05:55.000
There are some new engines out there, but we think we can

05:55.000 --> 05:57.000
speed things up a bit.

05:57.000 --> 06:00.000
And we would like to have a lot of fun while doing so.

06:00.000 --> 06:01.000
And we are.

06:01.000 --> 06:03.000
So what's the timeline here?

06:03.000 --> 06:04.000
We are there.

06:04.000 --> 06:07.000
Next year, we're going to have an alpha release.

06:07.000 --> 06:10.000
It's catered towards the technical people.

06:11.000 --> 06:14.000
And it will be for the Linux and macOS platforms.

06:14.000 --> 06:18.000
Windows will be there at some point, just not yet.

06:18.000 --> 06:22.000
And the next two years will see a better release and a production

06:22.000 --> 06:25.000
list for all platforms.

06:25.000 --> 06:30.000
So, well, we, so let me just give you a quick demo on what

06:30.000 --> 06:34.000
we can do.

06:34.000 --> 06:37.000
For people who don't know, we have this browser that just,

06:37.000 --> 06:39.000
well, I don't have Wi-Fi here.

06:39.000 --> 06:42.000
Okay, let's skip the entire demo there.

06:42.000 --> 06:46.000
I'm not going to set up Wi-Fi in my precious minutes.

06:46.000 --> 06:50.000
But websites like FOS them and Swift and even

06:50.000 --> 06:52.000
shader toy are just working.

06:52.000 --> 06:56.000
Since a couple of months we've had major improvements in web

06:56.000 --> 06:58.000
GL and shader support.

06:58.000 --> 07:00.000
And of course, at some point, we need to support web

07:00.000 --> 07:01.000
GPU.

07:01.000 --> 07:03.000
All the things that we need in an actual browser

07:03.000 --> 07:06.000
are starting to become a life.

07:06.000 --> 07:09.000
Basically.

07:09.000 --> 07:13.000
And even more complex websites like this course start

07:13.000 --> 07:15.000
working in Ladybird.

07:15.000 --> 07:18.000
Of course, this all takes a huge amount of effort.

07:18.000 --> 07:21.000
And one of the things that we've put a lot of effort in is

07:21.000 --> 07:25.000
LipGH, which is our JavaScript engine, which was originally

07:25.000 --> 07:27.000
started in Serenity OS.

07:27.000 --> 07:31.000
Of course, and it found its way all the way up to Ladybird.

07:31.000 --> 07:35.000
And this is the results from test262.fi.

07:35.000 --> 07:40.000
Which is a overview of the ECM-A262 test suite results.

07:40.000 --> 07:44.000
And currently, we're on top, meaning that according to the

07:44.000 --> 07:48.000
ECM-A262 spec test, we are the most

07:48.000 --> 07:51.000
compliant of all JavaScript engines out there.

07:51.000 --> 07:52.000
Which is pretty nice.

07:52.000 --> 07:53.000
Woo!

07:53.000 --> 08:02.000
Then there's another test suite called the web platform test.

08:02.000 --> 08:06.000
And the web platform test is a interoperability test suite.

08:06.000 --> 08:10.000
Basically, taking things like all the specifications that are

08:10.000 --> 08:13.000
out there and building tests that try to see if browsers are

08:13.000 --> 08:15.000
adhering to these specs.

08:15.000 --> 08:20.000
But also some behaviors that browsers accept that

08:20.000 --> 08:23.000
that seem to be pretty common.

08:23.000 --> 08:26.000
There might not be a spec for that, but we might want to have a test

08:26.000 --> 08:29.000
for that to make sure that if you're building a browser, then

08:29.000 --> 08:32.000
how sure are we that you're actually behaving like the other browsers?

08:32.000 --> 08:34.000
Well, for us, that's really important.

08:34.000 --> 08:37.000
So we have built a web platform test runner.

08:37.000 --> 08:41.000
And we run this for, well, basically as fast as we can.

08:41.000 --> 08:44.000
It takes a couple of hours to run the entire test suite.

08:44.000 --> 08:48.000
That's about 2.1 million tests in the suite.

08:48.000 --> 08:53.000
It's about 600K of those tests are encoding tests.

08:53.000 --> 08:59.000
So it's a large part of those are actually pretty easy as long as you do

08:59.000 --> 09:00.000
encoding correctly.

09:00.000 --> 09:04.000
But as you can see, currently there's a sort that we're behind

09:04.000 --> 09:06.000
Safari and we're before Flow and Server.

09:06.000 --> 09:11.000
We actually switch place with Flow last month, I think.

09:11.000 --> 09:13.000
But we're getting there.

09:13.000 --> 09:17.000
And this graph, this bar of us is growing faster than all the

09:17.000 --> 09:21.000
other browsers are in the web platform test suite.

09:21.000 --> 09:26.000
So this is a really nice way for us to not only see what we're doing

09:26.000 --> 09:29.000
if that's all right, if that's correct for what we're doing.

09:29.000 --> 09:35.000
But also to display, to show to other people what we're currently achieving.

09:35.000 --> 09:39.000
Yeah, so a quick overview of Lady Bird.

09:39.000 --> 09:40.000
It's a full-set browser.

09:40.000 --> 09:42.000
It's written in C++.

09:42.000 --> 09:44.000
It's licensed under 2BSD.

09:44.000 --> 09:49.000
And our goal is to write all the web deck from scratch.

09:49.000 --> 09:53.000
And by that I mean, if something is inherently a web technology,

09:53.000 --> 09:55.000
then we want to write that from scratch.

09:55.000 --> 09:57.000
We're not going to use other code.

09:57.000 --> 09:58.000
We're not going to copy anything.

09:58.000 --> 10:00.000
We're not going to steal anything.

10:00.000 --> 10:03.000
We're going to just dive into the specifications that are out there

10:03.000 --> 10:05.000
and write it ourselves.

10:05.000 --> 10:10.000
Of course, some things you could consider to be not web technology.

10:10.000 --> 10:14.000
And for us, that means things like to the restoration,

10:14.000 --> 10:18.000
audio decoding, image decoding.

10:18.000 --> 10:20.000
Those are all things that we consider.

10:20.000 --> 10:23.000
Well, that's something that more applications use.

10:23.000 --> 10:25.000
That's not something that's just for a browser.

10:25.000 --> 10:28.000
For that, we do want to use third-party libraries.

10:28.000 --> 10:32.000
So that's a divergence from SerenteOS where everything was nothing

10:32.000 --> 10:34.000
vented here.

10:34.000 --> 10:38.000
This is something where we make use of accessing libraries.

10:38.000 --> 10:42.000
Which helps us a lot in gaining some speed, gaining some momentum

10:42.000 --> 10:44.000
to getting a browser where it needs to be.

10:44.000 --> 10:48.000
And currently it runs on Linux and Mac OS.

10:48.000 --> 10:52.000
Well, something I'd like to highlight is our multi-process architecture.

10:52.000 --> 10:55.000
It's very simplified, but basically what we're doing already

10:55.000 --> 11:01.000
since the browser was built in SerenteOS is we have multiple processes.

11:01.000 --> 11:06.000
And every dotted outline here is you could consider a process.

11:06.000 --> 11:10.000
And these processes talk to each other using IPC.

11:10.000 --> 11:12.000
So for the Chrome, we have a queue to the Chrome.

11:12.000 --> 11:14.000
We have a packet Chrome.

11:14.000 --> 11:16.000
We have a hadless binary.

11:16.000 --> 11:23.000
Those use live web queue in some form or another to talk to the other processes

11:23.000 --> 11:25.000
to display a website.

11:25.000 --> 11:29.000
And how it does so is by using, for example, the request server, which is

11:29.000 --> 11:31.000
responsible for performing requests.

11:31.000 --> 11:35.000
I make sure that everything is sent back neatly in the right order to the process.

11:35.000 --> 11:38.000
We have web content, which is responsible for interpreting the DOM.

11:38.000 --> 11:40.000
The CSS object model.

11:40.000 --> 11:45.000
Layout, painting, and basically it just provides us with a bit map to display.

11:45.000 --> 11:47.000
We have image decoder.

11:47.000 --> 11:51.000
Also provides us with images of images to display.

11:51.000 --> 11:55.000
When we want to decode the JPEC or PNG, it goes in there.

11:55.000 --> 11:57.000
So that's an interesting one.

11:57.000 --> 12:01.000
So for example, let's consider the fact that we're using third-party libraries.

12:01.000 --> 12:05.000
Let's say that there's a security vulnerability in one of those libraries.

12:05.000 --> 12:09.000
We will have contained this vulnerability, hopefully, in that process.

12:09.000 --> 12:11.000
It will not reach the web content part.

12:11.000 --> 12:14.000
It will not reach the user part.

12:14.000 --> 12:18.000
And for example, service workers also run in a separate process.

12:18.000 --> 12:21.000
Both the web worker.

12:21.000 --> 12:24.000
And of course, a lot of future work still to be done.

12:24.000 --> 12:26.000
We want to write new code in Swift.

12:26.000 --> 12:29.000
We have to make sure that the interoperable C++,

12:29.000 --> 12:32.000
considering our garbage collection, it's working there.

12:32.000 --> 12:36.000
We need to do a lot of things like supporting media extensions.

12:36.000 --> 12:41.000
At some point, we want to be able to use Spotify or Netflix in Ladybird.

12:41.000 --> 12:43.000
We need to support that.

12:43.000 --> 12:48.000
We need to do a lot of work in our security model in prevention of fingerprinting of the browser.

12:48.000 --> 12:52.000
And at this point, I would have loved to give you the demo,

12:52.000 --> 12:56.000
but you would have seen that not everything is as fast as it should be.

12:56.000 --> 13:00.000
We still need to do a lot of work in the performance department.

13:00.000 --> 13:05.000
And in the end, because we're working with specs, these specs will be improved.

13:05.000 --> 13:07.000
There will be new proposals out there.

13:07.000 --> 13:11.000
We'd like to implement new proposals as soon as they're out there,

13:11.000 --> 13:14.000
as long as it's a sensible, implementable proposal.

13:14.000 --> 13:16.000
So we need to stay on top of that.

13:16.000 --> 13:22.000
And this is probably something that we need to do for the next couple of decades.

13:22.000 --> 13:23.000
And that's it.

13:23.000 --> 13:25.000
That's Ladybird in a nutshell.

13:25.000 --> 13:29.000
If you'd like to know more, please contact me. I'll be here around this room somewhere.

13:29.000 --> 13:31.000
Thank you very much.

