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.