WEBVTT 00:00.000 --> 00:10.000 Yes, it's just a fun stuff. 00:10.000 --> 00:13.000 I'm really happy to have play more. 00:13.000 --> 00:15.000 Play more. 00:15.000 --> 00:18.000 Play more. 00:18.000 --> 00:21.000 Play more. 00:21.000 --> 00:25.000 I'm very happy to hear about it. 00:25.000 --> 00:26.000 Thank you. 00:26.000 --> 00:27.000 Welcome to my call. 00:27.000 --> 00:31.000 Does everyone hear me well? 00:31.000 --> 00:37.000 At always this question of what happens when you design and implement the entire stack? 00:37.000 --> 00:45.000 Because I have this obsession about operating systems from when I was really young. 00:45.000 --> 00:49.000 So I started building like operating systems like visual by basic. 00:49.000 --> 00:54.000 But no, I got a bit better at it and no, I built them in C++, I guess. 00:54.000 --> 00:57.000 So quick information about me. 00:57.000 --> 01:00.000 As I said, my name is Kenos. 01:00.000 --> 01:03.000 By day, I mostly work on browser engine. 01:03.000 --> 01:06.000 But by night, I like to act on the operating system. 01:06.000 --> 01:08.000 My website is SMNX.sh. 01:08.000 --> 01:13.000 But everything was in the QR code and I will show it again at the end of the slide. 01:13.000 --> 01:16.000 So what are we talking about today? 01:16.000 --> 01:22.000 We are going to talk about my OBE operating system called SKIFTSOS. 01:22.000 --> 01:25.000 It's a game to be this kind of general purpose. 01:25.000 --> 01:29.000 So desktop environment, operating system. 01:29.000 --> 01:37.000 And to build on my phone number, any feature, what I will mean, reach C++ framework. 01:37.000 --> 01:41.000 And obviously I hit POS 6 and I will fight against it. 01:41.000 --> 01:43.000 So what are the goals of this project? 01:43.000 --> 01:46.000 Mostly it's about having fun and learning. 01:46.000 --> 01:53.000 But maybe do a bit of research and try some new up. 01:53.000 --> 01:55.000 So what is the current state of the project? 01:55.000 --> 01:57.000 Is a mainly really only stage. 01:57.000 --> 02:02.000 Most components are mostly proof of concept, meaning that I've basically written 02:02.000 --> 02:06.000 like the 10% of the code that provide like the 30% of the features. 02:06.000 --> 02:11.000 It's a total around 100,000 line of code. 02:11.000 --> 02:15.000 And it features a full desktop. 02:15.000 --> 02:22.000 And so from now on, this talk will follow the good process of the operating system. 02:22.000 --> 02:30.000 And we'll stop at each stages and we will discuss what each of the components and what they do and what they work. 02:30.000 --> 02:36.000 So I have included the build stage in it because building an operating system is already kind of complicated. 02:36.000 --> 02:43.000 So I will talk about the end of from the platform framework to the operating system. 02:43.000 --> 02:48.000 Or we under that then in this system and finally what happened during the run time of the operating system. 02:48.000 --> 02:53.000 So during the build time we'll talk about the build system called cut kit. 02:53.000 --> 02:55.000 So what is cut kit? 02:55.000 --> 03:03.000 Is this kind of cargo inspired build system and package manager for C++? 03:03.000 --> 03:06.000 It's a brutally designed for C++ modules. 03:07.000 --> 03:10.000 And it will mean like it's battery included. 03:10.000 --> 03:14.000 Meaning it will support all the lifecycle of your software. 03:14.000 --> 03:20.000 Meaning it can do linting, fusing, profiling and obviously building your project. 03:20.000 --> 03:24.000 And what is the main idea between a kit is the kit component. 03:24.000 --> 03:29.000 A kit component is like a loose bag of code and data and a manifest. 03:29.000 --> 03:32.000 The describe some piece of the operating system. 03:32.000 --> 03:41.000 For example here I have a component called karmciss.skift which is the kift OS implementation of the. 03:41.000 --> 03:46.000 Karm system framework meaning it's the absorption over all the system APIs. 03:46.000 --> 03:50.000 And to describe this component we use these gis owners structures. 03:50.000 --> 03:55.000 So on the top we have like the name of the component what kind of component in it here it's library. 03:55.000 --> 04:01.000 And then we have like this tiny predicate that tell or this component will enable only if it's here. 04:01.000 --> 04:04.000 Only if it's in the system is skift. 04:04.000 --> 04:08.000 But as you can see so you can it's kind of a white list kind of thing. 04:08.000 --> 04:13.000 Then it will tell what is required. For example here it will require the silver and time. 04:13.000 --> 04:17.000 And if we remove any it will provide a karmciss.imple. 04:17.000 --> 04:19.000 So the implementation of karmciss. 04:19.000 --> 04:21.000 And we can have like multiple implementation. 04:21.000 --> 04:28.000 For example we can have like karmciss.possics that will abstract.possics under karmciss. 04:28.000 --> 04:40.000 Okay so since we started to see a come true kutik let's continue it's calm because calm is really at the bottom at the foundation of the whole operating system. 04:40.000 --> 04:57.000 So what is calm is it's try to be like this big general purpose of library kind of like a cute or like the dotnet framework meaning that it will try to support everything like from a basic data structures up to a full GUI applications. 04:57.000 --> 05:13.000 And and it's split mostly into into two parts the freestanding part of the library which which mean like it's this part of the library that doesn't require any operating system that can be shared amount all the other components. 05:13.000 --> 05:21.000 And mostly all state part that require the operating system mostly like for doing real libraries and you eyes and stuff. 05:21.000 --> 05:27.000 And it takes inspiration again from rust go and see sharp I see the question coming about first. 05:27.000 --> 05:36.000 Yeah. So and it's not written really in C++ it's written in C++ but it's really like this calm flavor C++. 05:36.000 --> 05:44.000 So you know the meme like C++ with C with classes me I prefer like see with lambda modules and coroutines. 05:44.000 --> 05:49.000 We don't use exception because since we want the framework to work at a really low level. 05:49.000 --> 05:57.000 Well, except for now not available so we use a we use a monadic error and the link with a result type and a trauma crop. 05:57.000 --> 06:02.000 And we make use of all the clank safety check we can use. 06:02.000 --> 06:10.000 For example, we use a clank lifetime bound to take that reference doesn't include the object that it's it's been owned for by. 06:10.000 --> 06:21.000 And we use a WV unsafe buffer usage that is kind like unsafe for C++ meaning you cannot use pointer or pointers anywhere in the operating system. 06:21.000 --> 06:26.000 It can only be done in like some kind of unsafe block kind of thing. 06:26.000 --> 06:32.000 And so this is what an yellow world in calm looks like so this is just a yellow world in use of space. 06:32.000 --> 06:35.000 So you can see we have like beautiful C++ modules. 06:35.000 --> 06:45.000 And another really nice specificity of calm is that it's fully async by default meaning that your entry point is a asynchronous task. 06:45.000 --> 06:52.000 And this asynchronous task take a two object that is a system context and a constellation token. 06:52.000 --> 07:03.000 This constellation token kind of work like six term in physics meaning that it will get three girls and try to console every downstream task. 07:03.000 --> 07:08.000 When, for example, the user ask the comment, you have killed this, I don't want it. 07:08.000 --> 07:12.000 It's it's spinning or it's bugging or something. 07:12.000 --> 07:23.000 And here I just like a basic yellow world application so it just does a UI run async and then we pass it just a UI label with a yellow world. 07:23.000 --> 07:28.000 And it's kind of a swift UI slash slash. 07:28.000 --> 07:34.000 Just not compose inspire your library we might see a bit more after. 07:34.000 --> 07:39.000 And obviously since we're in the macro corner of the room we might care more about RPC. 07:39.000 --> 07:43.000 For now we don't really use an idea language. 07:43.000 --> 07:49.000 We use these C++ structs where you just declare like your message. 07:49.000 --> 07:55.000 Then you in this message we have a type that represent the response and then we have the parameters. 07:55.000 --> 08:07.000 And we use the quite limited not for too long capabilities reflection of capabilities of C++ to try to generate code around this. 08:07.000 --> 08:12.000 And although we use this is that you just have to create an IPC client. 08:12.000 --> 08:16.000 Tell it to connect to some kind of IPC endpoint. 08:16.000 --> 08:21.000 For example here it's Trattachel which is or UI server. 08:21.000 --> 08:28.000 And then you can just call it using client.call async and all RPC are asynchronous. 08:28.000 --> 08:34.000 So it will just return some premise that can be awaited and then we can continue. 08:34.000 --> 08:40.000 And obviously no exception we use again this kind of weird macro call code try. 08:40.000 --> 08:46.000 That kind of it's a specialization for a corrupting that's not too much of a detail right now. 08:47.000 --> 08:50.000 So now we saw the base of the framework. 08:50.000 --> 08:52.000 Let's talk about the bootloader. 08:52.000 --> 08:56.000 So the bootloader is not really it's a simple RFI bootloader. 08:56.000 --> 08:59.000 And it usually will follow my slides. 08:59.000 --> 09:03.000 So it's a simple RFI bootloader in kind of work like a system reboot. 09:03.000 --> 09:12.000 Basically just chain load like a RFI executable or it can load a new RFI and then jump into it. 09:12.000 --> 09:15.000 Which will be your kernel. 09:15.000 --> 09:19.000 It has its own tiny boot protocol called N over and over. 09:19.000 --> 09:25.000 Which is basically just a memory map with some added attributes. 09:25.000 --> 09:27.000 For example you can have like a range of memory. 09:27.000 --> 09:34.000 And to this one of the memory that attach some metadata like this is a framework for and this is the size. 09:34.000 --> 09:36.000 But it's quite limited in this way. 09:36.000 --> 09:37.000 Oh yeah. 09:37.000 --> 09:44.000 And finally the bootloader use the exactly the same UI library as the rest of the opening system meaning that you get this. 09:44.000 --> 09:48.000 All this beautifully vector. 09:48.000 --> 09:52.000 Beautiful vector graphic with sopidsalontializate font and such. 09:52.000 --> 09:53.000 So it's really nice. 09:53.000 --> 09:54.000 Okay. 09:54.000 --> 09:55.000 So we saw the bootloader. 09:55.000 --> 10:00.000 So the bootloader will load a new component called the earth microphone. 10:00.000 --> 10:02.000 So what is the earth microphone? 10:02.000 --> 10:06.000 It's what some people might call a pragmatic microphone. 10:06.000 --> 10:10.000 Meaning that you don't strive for academic purity in it. 10:10.000 --> 10:13.000 It's quite small and simple. 10:13.000 --> 10:14.000 I think it's good for learning. 10:14.000 --> 10:16.000 I guess because it's pretty simple. 10:16.000 --> 10:17.000 And but it's implemented everything. 10:17.000 --> 10:19.000 A microphone should do. 10:19.000 --> 10:22.000 And it's a care of core kernel responsibilities. 10:22.000 --> 10:25.000 Which by this I mean IPC preemption memory management. 10:25.000 --> 10:27.000 And I occur dispatch. 10:27.000 --> 10:29.000 And at that we quite simple object model. 10:29.000 --> 10:31.000 I want to describe all of them. 10:31.000 --> 10:32.000 We'll be quite boring. 10:32.000 --> 10:33.000 I guess. 10:33.000 --> 10:35.000 And it's around 25 to school. 10:35.000 --> 10:38.000 Some people say it's better to have less or more. 10:38.000 --> 10:39.000 Okay. 10:40.000 --> 10:44.000 To get a bit more of the value for the code in the kernel. 10:44.000 --> 10:47.000 Let's look at the send. 10:47.000 --> 10:52.000 It's called meaning the Cisco that it's used to send an RPC message. 10:52.000 --> 10:58.000 And as you can see, it's written in a really idiomatic C++. 10:58.000 --> 11:03.000 And we use C++ to make this code quite safer. 11:03.000 --> 11:05.000 For example, here we have a buffer. 11:05.000 --> 11:07.000 That comes from user space. 11:07.000 --> 11:14.000 And every buffer and data that comes from user space is wrapped in this user slide type. 11:14.000 --> 11:16.000 And you cannot access this type. 11:16.000 --> 11:22.000 Up until you have like kind of difference differentiated it with the width function. 11:22.000 --> 11:25.000 And this width function takes another space. 11:25.000 --> 11:31.000 And at the bottom it takes everything you want to access. 11:31.000 --> 11:34.000 And with make sure that everything is map correctly. 11:34.000 --> 11:39.000 And that the user space cannot like move data around or do nasty stuff. 11:39.000 --> 11:41.000 You're used for memory. 11:41.000 --> 11:46.000 And then in the body of the function we see that each task is attached a domain. 11:46.000 --> 11:50.000 And this domain will try to get a channel based on the capabilities. 11:50.000 --> 11:58.000 And then we use this channel to send a message and some capabilities with it. 11:58.000 --> 12:04.000 So that's what everything for the Earth microconol. 12:04.000 --> 12:08.000 Now the next step is the Stratas service layer. 12:08.000 --> 12:11.000 So now we have the exit head of the kernel space and the level of itself. 12:11.000 --> 12:16.000 And now we try to enter the system level stuff. 12:16.000 --> 12:19.000 So Stratas is kind of a loose bag of services. 12:19.000 --> 12:24.000 And when we enter Stratas we enter through Stratas Siem. 12:24.000 --> 12:26.000 The Stratas component manager. 12:26.000 --> 12:32.000 The Stratas component manager is loaded by Earth or microconol as the force executable. 12:32.000 --> 12:38.000 And it will then directly delegate to a process called Strataiini, which is our init system. 12:38.000 --> 12:43.000 That will then read the bunch of manifest and spawn a bunch of services. 12:43.000 --> 12:45.000 But what are those services? 12:45.000 --> 12:48.000 So at the bottom we have Stratas component manager as we say. 12:48.000 --> 12:54.000 And then we have Stratas device that it's for now kind of a big service at all. 12:54.000 --> 12:58.000 All of our device driver. 12:58.000 --> 13:01.000 We might change that later, but right now it's like this. 13:01.000 --> 13:08.000 Then we have the Stratas file system, which all of our virtual file system and all we access it. 13:08.000 --> 13:13.000 Then we have Strataiini put that take your raw HID event from the Stratas device. 13:13.000 --> 13:18.000 And then time then we do something that the UI can better understand. 13:18.000 --> 13:21.000 It's kind of like I-bus kind of thing. 13:21.000 --> 13:25.000 And then we have Stratas file that is for user interface. 13:25.000 --> 13:29.000 But to discuss it, I prefer going into the next chapter. 13:29.000 --> 13:31.000 Then we have application on top. 13:31.000 --> 13:36.000 So the next chapter is about the ideal desktop environment. 13:36.000 --> 13:44.000 And what is ideal is this kind of general purpose like user interface. 13:44.000 --> 13:47.000 It's built on a custom display protocol. 13:47.000 --> 13:50.000 And like it's kind of like way learned, but way simpler. 13:50.000 --> 13:52.000 And it has what we call another tattoo UI. 13:52.000 --> 13:55.000 Meaning that this UI can scale from like a smartwatch. 13:55.000 --> 13:58.000 Up until like a full desktop environment. 13:58.000 --> 14:00.000 And it will and all the have will be the same. 14:00.000 --> 14:06.000 And they just like scale on based on what the device is capable of. 14:06.000 --> 14:14.000 As we say with the butler, it has the same vector based on the pixel at tiers and with the beautiful fonts. 14:14.000 --> 14:18.000 As the rest of the operating system. 14:18.000 --> 14:23.000 Okay, so that's what it for the general architecture of the operating system. 14:23.000 --> 14:25.000 Well, not all of it. 14:25.000 --> 14:33.000 Because all we will know is that operating system are just bootloader for browser engines. 14:33.000 --> 14:38.000 So, skip as it's own browser engine, that's called V. 14:38.000 --> 14:43.000 And V is not really part of the general project. 14:43.000 --> 14:49.000 It's kind of more like my daytime work that I've ported back to the operating system as a fun project. 14:49.000 --> 14:50.000 I guess. 14:50.000 --> 14:54.000 And it's like a full browser engine, meaning that it has like HTML and CSS. 14:54.000 --> 14:58.000 It can render like some web pages I would show them during the demo. 14:58.000 --> 15:01.000 We don't have Gs for now. 15:01.000 --> 15:03.000 And I think it's pretty fast. 15:03.000 --> 15:05.000 So the more time. 15:05.000 --> 15:19.000 So I will use obviously a cute kid to boot my operating system. 15:19.000 --> 15:23.000 We'll do a bunch of ninja invocation. 15:23.000 --> 15:25.000 And we have like. 15:25.000 --> 15:28.000 Yeah, I don't, don't look at the time. 15:28.000 --> 15:31.000 I didn't have the time to implement RCC. 15:32.000 --> 15:35.000 Okay, I can, I can just look at my display, I guess. 15:35.000 --> 15:38.000 I want to full screen it. 15:38.000 --> 15:41.000 No, it's not this. 15:41.000 --> 15:44.000 Okay, so it does like a normal UI. 15:44.000 --> 15:46.000 We will expect like a normal brain system. 15:46.000 --> 15:47.000 So I can unlock it. 15:47.000 --> 15:49.000 And let's show a bit of some application. 15:49.000 --> 15:54.000 So, first of all, we can look at, I don't know, like, we have like, 15:54.000 --> 15:57.000 a calculator stuff. 15:57.000 --> 15:59.000 It does math, obviously. 15:59.000 --> 16:02.000 But you can like switch in like into tablet mode. 16:02.000 --> 16:06.000 And then you just like add up to UI for the new form factor. 16:06.000 --> 16:08.000 And you can switch easily like this. 16:08.000 --> 16:10.000 And then I can close it. 16:10.000 --> 16:11.000 I don't think fancy here. 16:11.000 --> 16:14.000 Then we can look at the web browser. 16:14.000 --> 16:18.000 So I have a, I took some, some abstract of website. 16:18.000 --> 16:20.000 Because we don't have a network stack yet. 16:20.000 --> 16:23.000 But we can look at the homepage of the internet, I guess. 16:23.000 --> 16:28.000 I don't know, not this one, this one. 16:28.000 --> 16:31.000 Yes. And okay, I'll go back to Google. 16:31.000 --> 16:33.000 Because maybe it will be a bit more interesting. 16:33.000 --> 16:35.000 But maybe I know it doesn't work. 16:35.000 --> 16:36.000 Okay, I'm not precise. 16:36.000 --> 16:37.000 Okay, it's okay. 16:37.000 --> 16:39.000 But you can see that the browser is kind of capable. 16:39.000 --> 16:41.000 We don't have like the logo, things are not aligned. 16:41.000 --> 16:43.000 But it's quite nice. 16:43.000 --> 16:44.000 Okay. 16:44.000 --> 16:48.000 And so maybe I can show you another thing. 16:49.000 --> 16:51.000 And it crashed, I guess. 16:51.000 --> 16:52.000 Okay. 16:52.000 --> 16:54.000 Okay. 16:54.000 --> 16:56.000 Sorry about that. 17:00.000 --> 17:02.000 Okay, we're back. 17:02.000 --> 17:03.000 We're so back. 17:03.000 --> 17:05.000 Okay. 17:05.000 --> 17:06.000 Okay. 17:06.000 --> 17:10.000 And obviously, it can run doom, I guess. 17:10.000 --> 17:11.000 Yeah. 17:11.000 --> 17:15.000 Ah, in fact, you will go faster if I go into like tablet mode 17:15.000 --> 17:17.000 because it doesn't show the rest of the UI. 17:17.000 --> 17:20.000 Yes, because we don't have like a GPU acceleration, 17:20.000 --> 17:22.000 it will finish on the CPU as well. 17:22.000 --> 17:24.000 But I can play a bit of doom. 17:24.000 --> 17:28.000 I'm not sure if I'm good at it, so I should be good at it. 17:28.000 --> 17:31.000 Like all the old men here will be, 17:31.000 --> 17:33.000 will be screaming, I guess. 17:33.000 --> 17:37.000 I can kill bodies and some stuff. 17:37.000 --> 17:40.000 Yeah, it does the thing. 17:40.000 --> 17:42.000 You have like a audio. 17:42.000 --> 17:45.000 No, we don't have audio yet. 17:46.000 --> 17:49.000 Audio will be pretty funny. 17:49.000 --> 17:53.000 Well, to be fair, Cam does support audio. 17:53.000 --> 17:55.000 We have like basic audio stuff. 17:55.000 --> 17:57.000 But I didn't hook it up into, 17:57.000 --> 17:59.000 no, we don't do it there. 17:59.000 --> 18:01.000 I won't spoil people. 18:01.000 --> 18:02.000 Mm. 18:02.000 --> 18:03.000 Mm. 18:03.000 --> 18:04.000 Mm. 18:04.000 --> 18:05.000 No. 18:05.000 --> 18:07.000 I lost, I was playing. 18:07.000 --> 18:09.000 Okay. 18:09.000 --> 18:11.000 So we have like the frameworks, 18:11.000 --> 18:13.000 superty, meaning if I run it, 18:13.000 --> 18:15.000 if I run a Cam on Linux, 18:15.000 --> 18:17.000 I will get like audio and stuff. 18:17.000 --> 18:21.000 But in Schiff, I don't have like 18:21.000 --> 18:23.000 audio card or driver. 18:23.000 --> 18:25.000 Okay, then I'm done. 18:25.000 --> 18:26.000 My this. 18:26.000 --> 18:27.000 Okay. 18:27.000 --> 18:29.000 Those are things, those are things. 18:29.000 --> 18:31.000 No, it's not the SDL version. 18:31.000 --> 18:34.000 It's a port called Pure Doom, 18:34.000 --> 18:36.000 that it meant to be easily ported. 18:36.000 --> 18:39.000 We don't have like a for party software running, 18:40.000 --> 18:41.000 I said that the start of the call 18:41.000 --> 18:42.000 I will not support politics, 18:42.000 --> 18:44.000 at least directly. 18:44.000 --> 18:47.000 So it's a bit harder to support software. 18:47.000 --> 18:48.000 Okay. 18:48.000 --> 18:49.000 I will show you another demo, 18:49.000 --> 18:52.000 because I still use that everything can, 18:52.000 --> 18:54.000 can, 18:54.000 --> 18:56.000 it's based on the Cam. 18:56.000 --> 19:00.000 And Cam can be ported to any operating system. 19:00.000 --> 19:02.000 And do you know another operating system? 19:02.000 --> 19:05.000 It's called UFI. 19:05.000 --> 19:08.000 And let's say, 19:08.000 --> 19:10.000 it just sounds like, 19:10.000 --> 19:12.000 where it is. 19:12.000 --> 19:14.000 Hmm. 19:14.000 --> 19:15.000 I think I have some time, 19:15.000 --> 19:16.000 I can, 19:16.000 --> 19:17.000 I don't have to rush, 19:17.000 --> 19:18.000 but let's say, 19:18.000 --> 19:20.000 replace like the name of the bootloader, 19:20.000 --> 19:22.000 but another software called Ver, 19:22.000 --> 19:24.000 was a, 19:24.000 --> 19:27.000 browser.main. 19:27.000 --> 19:28.000 I guess it's, 19:28.000 --> 19:29.000 it's funny, 19:29.000 --> 19:31.000 let's say if it works. 19:31.000 --> 19:33.000 Hmm. 19:33.000 --> 19:34.000 I, 19:34.000 --> 19:35.000 I, 19:35.000 --> 19:37.000 I'm not in the right direction. 19:38.000 --> 19:42.000 It's right. 19:42.000 --> 19:44.000 I feel like, 19:44.000 --> 19:45.000 pre-built it, 19:45.000 --> 19:46.000 it's pretty fast. 19:46.000 --> 19:47.000 C++ module, 19:47.000 --> 19:48.000 baby, I guess. 19:48.000 --> 19:52.000 Sorry, 19:52.000 --> 19:53.000 what? 19:53.000 --> 19:54.000 I do, 19:54.000 --> 19:55.000 I did just before, 19:55.000 --> 19:56.000 so, 19:56.000 --> 19:58.000 okay. 19:58.000 --> 19:59.000 Yeah, 19:59.000 --> 20:00.000 it's, 20:00.000 --> 20:01.000 it's kind of ruined, 20:01.000 --> 20:02.000 the time you have to draw, 20:02.000 --> 20:04.000 okay, yes. 20:05.000 --> 20:07.000 Ah, okay, 20:07.000 --> 20:10.000 it's coming. 20:10.000 --> 20:11.000 Yeah, 20:11.000 --> 20:12.000 browser in the, 20:12.000 --> 20:13.000 in the Wi, 20:13.000 --> 20:16.000 and I think I will go back to my slides now. 20:16.000 --> 20:19.000 Okay, 20:19.000 --> 20:20.000 so, 20:20.000 --> 20:21.000 beyond. 20:21.000 --> 20:22.000 I kind of want, 20:22.000 --> 20:23.000 full, 20:23.000 --> 20:24.000 virtual support, 20:24.000 --> 20:25.000 because, 20:25.000 --> 20:26.000 since virtual has, 20:26.000 --> 20:27.000 like, 20:27.000 --> 20:28.000 every device class, 20:28.000 --> 20:29.000 it will mean that we can, 20:29.000 --> 20:31.000 like, build the rest of the, 20:31.000 --> 20:34.000 operating system without being, 20:34.000 --> 20:35.000 for, 20:35.000 --> 20:36.000 having, 20:36.000 --> 20:37.000 like, the first step is, 20:37.000 --> 20:38.000 like, 20:38.000 --> 20:39.000 porting the NVIDIA driver. 20:39.000 --> 20:40.000 So, 20:40.000 --> 20:41.000 we'll be simple, 20:41.000 --> 20:42.000 a networking, 20:42.000 --> 20:43.000 obviously, 20:43.000 --> 20:44.000 on the disk of file system, 20:44.000 --> 20:45.000 I've, 20:45.000 --> 20:46.000 like, my high on, 20:46.000 --> 20:47.000 like, 20:47.000 --> 20:48.000 GFS, 20:48.000 --> 20:49.000 because it's quite simple, 20:49.000 --> 20:50.000 and seems interesting, 20:50.000 --> 20:51.000 some server, 20:51.000 --> 20:52.000 I don't remember what to talk about this. 20:52.000 --> 20:53.000 Namespacing, 20:53.000 --> 20:54.000 because right now, 20:54.000 --> 20:55.000 everything is, 20:55.000 --> 20:56.000 like, in this one big, 20:56.000 --> 20:57.000 namespace, 20:57.000 --> 20:58.000 but I think it's just a, 20:58.000 --> 21:00.000 a, 21:00.000 --> 21:01.000 as a freelancier, 21:01.000 --> 21:02.000 such in the book, 21:02.000 --> 21:03.000 well, 21:03.000 --> 21:04.000 I, I I I thought, 21:04.000 --> 21:05.000 is it already, 21:05.000 --> 21:06.000 Well, 21:06.000 --> 21:08.000 it's actually like a real idea. 21:08.000 --> 21:09.000 Like, you know, 21:09.000 --> 21:12.000 you know, 21:12.000 --> 21:13.000 Like you need to pour on the people that try to rise, 21:13.000 --> 21:14.000 there, 21:14.000 --> 21:15.000 uh, 21:15.000 --> 21:16.000 there be used on the server, 21:16.000 --> 21:17.000 I think they will love it so, 21:17.000 --> 21:19.000 that's about it for my toll. 21:19.000 --> 21:21.000 So I have some special things. 21:21.000 --> 21:23.000 I just want to thanks Matilda, 21:23.000 --> 21:25.000 because it's my girlfriend and she 21:25.000 --> 21:27.000 sort of forced me to do this tool, 21:27.000 --> 21:28.000 but I kind of join, 21:28.000 --> 21:29.000 Andre, 21:29.000 --> 21:37.480 I also want to thank Lu here, which is my coworker and with her, I'm working on the 21:37.480 --> 21:43.080 browser engine and I want to thank Jordan because it worked a lot of cute kit and also 21:43.080 --> 21:48.600 all of the DVC Discord server and OSD Discord server because what's fun to show my stuff 21:48.600 --> 21:52.760 there and get their feedback and stuff. And obviously all of you for watching this talk. 21:52.760 --> 21:53.760 Thank you. 22:00.000 --> 22:04.000 Thank you. 22:09.000 --> 22:11.000 Mostly 36. 22:11.000 --> 22:12.000 Oh yes. 22:12.000 --> 22:14.000 Which architecture do it's fun? 22:14.000 --> 22:15.000 It's fun. 22:15.000 --> 22:16.000 Mostly on X86. 22:16.000 --> 22:19.000 I think you can just like boot kind of the operating system. 22:19.000 --> 22:22.000 You like reach 5, but not yet. 22:24.000 --> 22:26.000 And it doesn't run on real hardware. 22:26.000 --> 22:30.000 I don't see why it will not seem to use. 22:30.000 --> 22:34.000 We might not have like keyboard interface and mouse because we don't have a USB stack. 22:34.000 --> 22:38.000 And we rely on the PS2 fold back so they can do. 22:38.000 --> 22:41.000 So we will not have like a real hardware. 22:41.000 --> 22:43.000 Maybe you can have like the boot screen working. 22:43.000 --> 22:44.000 Okay. 22:44.000 --> 22:48.000 So I didn't like and get it on real hardware if I have PS2. 22:48.000 --> 22:49.000 Sorry. 22:49.000 --> 22:51.000 I didn't have PS2 in my hardware. 22:51.000 --> 22:55.000 So the question was if you have PS2 on your hardware, it will work. 22:55.000 --> 22:56.000 I think. 22:56.000 --> 22:58.000 Except on the mind over. 22:58.000 --> 22:59.000 Sure. 22:59.000 --> 23:01.000 Okay. 23:01.000 --> 23:05.000 You mentioned that the Windows server has custom protocol. 23:05.000 --> 23:06.000 Yes. 23:06.000 --> 23:09.000 Do clients sign rendering as it is used today? 23:09.000 --> 23:10.000 Yes. 23:10.000 --> 23:11.000 It's a fully client-sized render. 23:11.000 --> 23:15.000 As you can see, Doom doesn't have like the bar on top because I didn't had the time to 23:15.000 --> 23:18.000 think it down and leave some space right. 23:21.000 --> 23:22.000 Question? 23:22.000 --> 23:23.000 Yes. 23:23.000 --> 23:24.000 And that was the UFI. 23:24.000 --> 23:26.000 So the question was. 23:26.000 --> 23:28.000 Is this the UFI from before? 23:28.000 --> 23:29.000 Yes. 23:29.000 --> 23:32.000 It was using GOP to access the frame buffer. 23:34.000 --> 23:38.000 What security mechanisms does your microcode support? 23:38.000 --> 23:42.000 Do you have capabilities or anything like that? 23:42.000 --> 23:49.000 So the question was what are the security measures in the microconel? 23:49.000 --> 23:56.000 The only security is like whatever is guaranteed by having the processes isolated in different 23:56.000 --> 23:57.000 pitch tables. 23:57.000 --> 24:08.000 And the capabilities, we have like a handle table to everything that the each task can access. 24:08.000 --> 24:10.000 Each task has like a domain. 24:10.000 --> 24:13.000 They can like indexing to find pointers to other objects. 24:13.000 --> 24:15.000 It's pretty simple. 24:15.000 --> 24:21.000 And then a domain can be like there like they can kind of represent a tree. 24:21.000 --> 24:23.000 So you can index into the domain of another task. 24:23.000 --> 24:26.000 If you have a capabilities to the domain of this task. 24:26.000 --> 24:30.000 So this way you can like prepare the environment for another task and then spawn it. 24:30.000 --> 24:33.000 Which is pretty simple or text book stuff, I guess. 24:34.000 --> 24:36.000 Yes. 24:44.000 --> 24:45.000 Oh yes. 24:45.000 --> 24:46.000 Okay. 24:46.000 --> 24:48.000 So the question was those the UFI library will run on Linux. 24:48.000 --> 24:49.000 And yes it works. 24:49.000 --> 24:50.000 It works everywhere. 24:50.000 --> 24:53.000 Because I can like a suite quickly. 24:57.000 --> 25:00.000 I can since I have a Linux I will have internet. 25:00.000 --> 25:02.000 So I cannot show my website also. 25:03.000 --> 25:05.000 I did the P. 25:05.000 --> 25:08.000 I cannot type them to stress away. 25:08.000 --> 25:11.000 So I will just I. 25:11.000 --> 25:12.000 Okay. 25:12.000 --> 25:13.000 I like it. 25:13.000 --> 25:14.000 Okay. 25:14.000 --> 25:15.000 It doesn't work. 25:15.000 --> 25:16.000 I don't know. 25:16.000 --> 25:17.000 Okay. 25:17.000 --> 25:18.000 Okay. 25:18.000 --> 25:19.000 You see, it's just work on Linux. 25:19.000 --> 25:21.000 And yeah. 25:23.000 --> 25:24.000 Okay. 25:24.000 --> 25:30.000 The same question that I want to ask like what's the code you managed to state. 25:31.000 --> 25:32.000 Okay. 25:32.000 --> 25:35.000 So the question is how does a state management not work. 25:35.000 --> 25:39.000 So it's this like really hype and trendy way of doing it. 25:39.000 --> 25:40.000 So it's very easy. 25:40.000 --> 25:42.000 And then the place will be UI. 25:42.000 --> 25:43.000 Yes. 25:43.000 --> 25:46.000 It's mostly like a helm architecture. 25:46.000 --> 25:49.000 Which one are we like this funds in here. 25:49.000 --> 25:51.000 I don't want to show me it. 25:51.000 --> 25:52.000 Okay. 25:52.000 --> 25:53.000 Okay. 25:53.000 --> 25:55.000 The people. 25:55.000 --> 25:57.000 Does I have the. 25:57.000 --> 25:58.000 Contrary. 25:58.000 --> 25:59.000 Yes. 25:59.000 --> 26:02.000 I just wanted like you just implement like this a basic state system. 26:02.000 --> 26:04.000 And then you have like messages. 26:04.000 --> 26:08.000 And then you have like a reducer that applied the message under state at the right time. 26:08.000 --> 26:09.000 So it's pretty modern. 26:09.000 --> 26:13.000 Like it's so kind of inspired by a react and reduce kind of thing. 26:13.000 --> 26:16.000 And all the libraries in this same vein. 26:16.000 --> 26:35.000 So the question is. 26:35.000 --> 26:36.000 No idea. 26:36.000 --> 26:37.000 There's a send a question. 26:37.000 --> 26:38.000 So. 26:38.000 --> 26:39.000 Okay. 26:40.000 --> 26:49.000 Okay. 26:49.000 --> 26:50.000 Okay. 26:50.000 --> 26:51.000 Okay. 26:51.000 --> 26:52.000 Okay. 26:52.000 --> 26:54.000 The question correctly. 26:54.000 --> 26:57.000 Can you define your own component for the library? 26:57.000 --> 26:59.000 Oh, yes. 26:59.000 --> 27:00.000 It's just a class. 27:00.000 --> 27:01.000 You have to subclass. 27:01.000 --> 27:04.000 And then you can do this is for like low level stuff. 27:04.000 --> 27:08.000 And then you can like compose them together and ask them to build them together. 27:08.000 --> 27:14.000 So for for example, I've like this is like the simple counter application for your own 27:14.000 --> 27:15.000 The back. 27:15.000 --> 27:17.000 So we don't you might not see it well. 27:17.000 --> 27:18.000 So maybe. 27:18.000 --> 27:20.000 But it just like. 27:20.000 --> 27:23.000 I don't know to to describe it. 27:23.000 --> 27:26.000 But you can assemble stuff like you will do in react. 27:26.000 --> 27:31.000 And if you have to do like a low level like event routine or painting stuff, you can just 27:31.000 --> 27:33.000 subclass the UI node class. 27:33.000 --> 27:35.000 And you can do whatever you want in this. 27:35.000 --> 27:37.000 It's not like there is no. 27:38.000 --> 27:39.000 Second class first class. 27:39.000 --> 27:41.000 You got always in first class. 27:41.000 --> 27:44.000 So stuff. 27:52.000 --> 27:53.000 I mean, the same. 28:00.000 --> 28:02.000 We don't use a need. 28:02.000 --> 28:07.500 We don't use the ellipsi, well, we have like a basic ellipsi because the compiler requires it 28:07.500 --> 28:11.400 So it's just like some basic string function, but it's really simple 28:18.900 --> 28:25.400 Right now we well do use some kind of some of the classic APIs, but right now no 28:25.400 --> 28:31.580 But I think it will be kind of complicated, since everything is like using this C++ 28:31.580 --> 28:37.100 Corrupting so you will need to find a way to translate like asynchronous code into synchronous one 28:37.100 --> 28:41.400 I don't see a blocker, but we didn't work on it yet 28:41.400 --> 29:00.700 I don't know my brain can only read the comics on a mess, so it's probably because of cool something I use