WEBVTT 00:00.000 --> 00:22.680 Okay, good morning everyone. Welcome to our talk on every level of us. Please let me know 00:22.680 --> 00:28.000 with the mic starts to set for if I'm not holding it. If you can't hear me anymore anyway. 00:28.000 --> 00:34.360 So this is Kaspar. He's giving the second part of the presentation. I'm Koon. I'll be doing 00:34.360 --> 00:43.160 the first part and warm maintainers of every LOS and part of a set of contributors. So 00:43.160 --> 00:49.640 every LOS is our operating system. It's a library operating system for secure memory 00:49.640 --> 00:54.480 safe, low power, internal things and it's written in rest. So some of those things you have 00:54.480 --> 01:01.400 seen from the previous start might be familiar. So in the start I'll be giving a bit of 01:01.400 --> 01:08.680 context showing a bit why we like rest and the embedded ecosystem. So what's every LOS actually 01:08.680 --> 01:14.480 is all about and then Kaspar goes into getting started with every LOS doing some hello 01:14.480 --> 01:19.760 world to networking and we'll wrap up. So first we're in the embedded 01:19.760 --> 01:27.840 that room. So we're doing microcontrollers, limited processing power, slow power, low 01:27.840 --> 01:34.720 memory and we have our single memory space. We don't have our MMO to do virtual memory. 01:34.720 --> 01:43.160 We might have an MPU to do some memory protection but that's about it. Sorry. So our 01:43.160 --> 01:51.400 firmware for bare metal, we don't have an OS that's what we have to provide here I guess. 01:51.400 --> 01:56.280 We need to do threading networking, heap allocations maybe if you need that but we need 01:56.280 --> 02:02.640 to do that manually because we don't get that. We don't like allocations. We like our 02:02.640 --> 02:08.920 deterministic behavior, avoid the panic related to being out of memory on our low memory 02:08.920 --> 02:18.160 systems and memory fragmentation becomes an issue. So we don't want allocations. That's 02:18.160 --> 02:26.040 why we get to rest and the ecosystem. And with rest we can go on about memory safety. I think 02:26.040 --> 02:30.320 you all know about memory safety and rest by now so I will not go into that. I'll go into 02:30.320 --> 02:36.120 other parts of rest and why we want rest. Because rest comes with a lot of other things. 02:36.120 --> 02:41.720 We get to create the shared code from Crate so you have a repository and it's well integrated 02:41.720 --> 02:47.480 into build system. One of the advantages we have here compared to for example C. The 02:47.480 --> 02:52.600 trades that we get interfaces so that we can actually have interoperability between the 02:52.600 --> 02:59.280 different grades. The no SDD feature that's in the language so that you can signal that 02:59.280 --> 03:05.880 you do not do allocations. You do not use the fancy types of the language. It keeps 03:05.880 --> 03:12.520 things simple and well suited for embedded. And there's the Async part that was already shown 03:12.520 --> 03:17.160 in the previous presentation a bit. I'll see you quite a lot more than we'll probably be 03:17.160 --> 03:23.520 talking about it. But it provides Async for the Async forness cooperative multitasking. So 03:23.520 --> 03:28.280 you can actually schedule multiple things on a single stack. Minimal memory overhead. 03:29.280 --> 03:33.200 But at least features together we also like about rest because this actually fosters 03:33.200 --> 03:37.280 a lot of collaboration between different projects. 03:41.280 --> 03:45.280 So what do we get in practice from this ecosystem? Because we had to language features just 03:45.280 --> 03:51.080 now. But what we get for example is the embedded help trades. They provide a set of generic 03:51.080 --> 03:56.280 interfaces that can be used like they can be implemented with peripherals and it provides 03:56.280 --> 04:03.280 like a common interface into those peripherals. So it all looks the same from the user. 04:03.280 --> 04:10.280 For example, driver craze. If you're embedded help trade for Asprety, you write it right 04:10.280 --> 04:16.280 for you just assume that there's an embedded tell implementation on the other side. 04:16.280 --> 04:21.280 And you can write your craze assuming that if you drive for separate from the actual operating 04:21.280 --> 04:28.280 system. And then there's the Async from the frameworks such as embassy. 04:28.280 --> 04:33.280 They implement these interactions that you need. And embassy implemented for the SGM for 04:33.280 --> 04:43.280 the two of the NFNPICO. I think by now a few more. And it provides us with a low memory 04:43.280 --> 04:50.280 async scheduler. So yeah, I can go on and all about this. But the message here is that the ecosystem 04:50.280 --> 04:59.280 of craze around embedded. It's growing and it's great. So you start writing your firmware. 04:59.280 --> 05:05.280 And then at some point you need to find a craze for your artifacts. You need to multitasking 05:05.280 --> 05:11.280 you want networking. And you have to figure out what's out there. And where do I get it? 05:11.280 --> 05:19.280 And maybe even you need something real time. You need actual intrapaste trading. 05:19.280 --> 05:23.280 And it's possible to do this. You can all gather it up and do that. But it's 05:23.280 --> 05:29.280 curating that integrating everything at time consuming. So that's where we get with 05:29.280 --> 05:34.280 a real mess. Because with a real mess, we decided we can integrate this for you. 05:34.280 --> 05:39.280 Make it easier. We have the embedded help rate. We picked the embassy. 05:39.280 --> 05:46.280 Execute our integrated multi-CP with embassy net. And integrate that for you so that you 05:46.280 --> 05:52.280 can use it. And don't have to look around what's out there. So with everything else, 05:52.280 --> 05:58.280 we essentially we started with a scheduler. Classic trading. It's a preemptive scheduler 05:58.280 --> 06:05.280 priority based separate stacks. Classic multi-treading. And we think the embassy executer 06:05.280 --> 06:11.280 put that on top of a thread. And yeah, that runs inside a thread. It's the 06:11.280 --> 06:15.280 kind of async scheduler that we've seen also from the previous presentation where you 06:15.280 --> 06:19.280 can do async programming. And in that way, we support both preemptive 06:19.280 --> 06:23.280 scheduling so that you can have your intrapaste or real time. But also that 06:23.280 --> 06:30.280 our memory asyncfulness scheduling. So that gives us already quite a bit of an 06:30.280 --> 06:38.280 operating system together with those grades. And we want to build on top of that. 06:38.280 --> 06:42.280 Also contribute back to the ecosystem, but also have high level 06:42.280 --> 06:46.280 affections. And one of those examples is what we have is a sensor 06:46.280 --> 06:51.280 abstraction. This means that you have your development board and 06:51.280 --> 06:56.280 their sensors on it. And we want to make it that you don't have to worry 06:56.280 --> 07:01.280 about the exact type of temperature sensor on it. It's just a temperature sensor. 07:01.280 --> 07:04.280 So what we did with the sensor abstraction is you can enumerate the 07:04.280 --> 07:09.280 available sensors on your board. Read out what is there in terms of 07:09.280 --> 07:14.280 sensors. And we provided generic interface into the sensors and 07:14.280 --> 07:18.280 measurements. So that you just can prep whatever sensors out there and 07:18.280 --> 07:23.280 it should work. On the other side, we want to have a way to easily 07:23.280 --> 07:27.280 describe what is on your board. Provide a machine-readable 07:27.280 --> 07:32.280 description of the board currently at YAMO. And this contains the 07:32.280 --> 07:36.280 information on the board, like the microcontroller that's out there, 07:36.280 --> 07:41.280 which peripherals are needed on that board. And the supported features of 07:41.280 --> 07:47.280 that board, does it support network interface. And yeah, this is 07:47.280 --> 07:51.280 done in an format that you can read and the machine can read and it's 07:51.280 --> 07:57.280 not rust code itself. So hopefully that makes things easier. 07:57.280 --> 08:03.280 Yeah, one thing we ran into was that cargo is great in terms of build 08:03.280 --> 08:09.280 system. But cargo will build, will try to build things for you. 08:09.280 --> 08:13.280 You can just enable the features. And if it conflicts, cargo at 08:13.280 --> 08:16.280 some point will tell you with a panic or an error message that 08:16.280 --> 08:20.280 it's conflicts. And one of the things we want to have is that we can 08:20.280 --> 08:24.280 tell you before we start to compile is this going to work on my 08:24.280 --> 08:28.280 board. Does my board support everything needed for this format to run 08:28.280 --> 08:33.280 or the other way around? If I want to run this example, which kind of 08:33.280 --> 08:37.280 boards can I use that are supported by aerial OS? 08:37.280 --> 08:42.280 So for that, we have our own build system that's wrapped around 08:42.280 --> 08:46.280 cargo. It's lace. It's a YAMO-based declarative built 08:46.280 --> 08:49.280 configuration. You can select a required module, 08:49.280 --> 08:53.280 for example. That's working for this one. It abstracts away the 08:53.280 --> 08:56.280 board specific things which features need to be enabled for 08:56.280 --> 09:00.280 specific board, which architectures this board. Lace handles that 09:00.280 --> 09:03.280 for you. You just say, I want this board. I want that working. 09:03.280 --> 09:07.280 And lace will stare at the cargo build system and try to build 09:07.280 --> 09:12.280 it for you. One other thing we did with lace is abstract away 09:12.280 --> 09:15.280 the specific flesh commands. So if you have your board, you just say, 09:15.280 --> 09:22.280 well, lace built flesh and it will flesh the board. And the thing is that 09:22.280 --> 09:28.280 with lace, if you do this normally on with cargo, you have to 09:28.280 --> 09:31.280 park up and talk to them all and you need to add all the specifics of 09:31.280 --> 09:37.280 your board. With lace, we can abstract that away. So I think it's 09:37.280 --> 09:41.280 time for your part. You can demo all these nice features for us. 09:41.280 --> 09:46.280 Thank you, good. So demo is not as sophisticated as the one from 09:46.280 --> 09:51.280 Alexis. I'm going to show you how to get started. Create a simple 09:51.280 --> 09:55.280 blanky with rust. Then attach a sensor. Show you how to add the 09:55.280 --> 09:59.280 ice-creams, and the center driver. Network it up to some TCP 09:59.280 --> 10:03.280 standing and then port it to another board because that is something 10:03.280 --> 10:08.280 we can easily do. All right. And this is how I did this demo on. 10:08.280 --> 10:10.280 It's not going to have 50 to decay, but it doesn't really 10:10.280 --> 10:15.280 matter, which what we're using. All right. So first step, get a basic 10:15.280 --> 10:19.280 blinking LED on this board. We need to create a project from the 10:19.280 --> 10:23.280 template. Define the LED pins and then toggle that in the loop. 10:23.280 --> 10:27.280 And you will see code. But this is also what you don't see. 10:27.280 --> 10:30.280 Right. So here you can see first step. We are also using cargo 10:30.280 --> 10:33.280 generator to generate our template. But you don't see here 10:34.280 --> 10:37.280 anything board specific. Right. With this, you generate the generic 10:37.280 --> 10:41.280 areas of application, consistency of those three files. 10:41.280 --> 10:47.280 We have a main or else cargo terminal with no board specific in 10:47.280 --> 10:50.280 here. And everything is really basic. If you remember from the 10:50.280 --> 10:54.280 talk before, well, it's just the info log. And then we can run 10:54.280 --> 10:57.280 this. Now, we're using Lase to run this. Here's the first time 10:57.280 --> 11:00.280 I specify the board, the Nordic board. This would run 11:00.280 --> 11:03.280 on all the board set area supports. And you would get this 11:03.280 --> 11:07.280 heli-word output. So now we have a basic template. And now we 11:07.280 --> 11:12.280 make a board specific. Because we define an LED pin. 11:12.280 --> 11:16.280 Legacy in line one, we can see we define like a 11:16.280 --> 11:20.280 LED pin. Line five, we get an output. And then 11:20.280 --> 11:24.280 7 to 10, a basic loop with a timer. If you want to use 11:24.280 --> 11:27.280 timer, we have to enable the timer feature on the areas 11:27.280 --> 11:32.280 grid. And with that, we have a blink. This is LED 11:32.280 --> 11:35.280 off, LED off. 11:48.280 --> 11:52.280 Next step, we want to add a specific temperature sensor. 11:53.280 --> 11:58.280 And so, for example, I have HT 31 and I specify, yes. 11:58.280 --> 12:02.280 So, same, same, we need to somehow get the ice-crossy bas, 12:02.280 --> 12:07.280 pinns, rate, initialized driver, and print the 12:07.280 --> 12:10.280 sensor data. So, we don't want to write the driver. So we 12:10.280 --> 12:14.280 find something on the internet. Unfortunately, this one was 12:14.280 --> 12:16.280 not in creator. It's just laying the few here. Please 12:16.280 --> 12:19.280 do the release. Because we didn't put the release of 12:19.280 --> 12:22.920 So here, if you remember this, no, it's not here. 12:22.920 --> 12:25.280 Line 7 has our LED defined. 12:25.280 --> 12:29.320 I now added here that we want to use to TWSPI0. 12:29.320 --> 12:31.160 I express the peripheral and the two pins 12:31.160 --> 12:36.000 we're using in line 89, pin 26 and 27. 12:36.000 --> 12:38.600 That's the board specific stuff. 12:38.600 --> 12:43.960 And with that in place, we initialize the I square C. 12:43.960 --> 12:47.680 Sensor here, like line 9, it's just like a contract constructor. 12:47.680 --> 12:49.120 We want to do a bit of configuration. 12:49.120 --> 12:50.320 Line 5 to 7. 12:50.320 --> 12:52.320 You can see it's something that we do in Arial. 12:52.320 --> 12:55.880 Like line 7, it's a constant function that figures out 12:55.880 --> 12:57.800 like a frequency from a range. 12:57.800 --> 13:00.800 Because you realize that these MCUs, they have like 13:00.800 --> 13:03.360 specific in a range like they don't, 13:03.360 --> 13:05.040 you can't do an arbitrary frequency. 13:05.040 --> 13:07.200 You have like a front, you can do a 100k. 13:07.200 --> 13:10.280 So usually, the exact frequency doesn't really matter. 13:10.280 --> 13:12.520 And if you want to purchase stuff across the board's 13:12.520 --> 13:13.600 arranged is fine. 13:13.600 --> 13:15.720 So this is what we're doing here. 13:15.720 --> 13:20.400 Arial knows which frequency it can do on the specific board 13:20.400 --> 13:23.440 we're compiling to for and then choose to like the highest 13:23.440 --> 13:24.680 of those. 13:24.680 --> 13:27.680 This is like one of our portability tricks. 13:27.680 --> 13:30.840 So with I express the initialized line 14, 13:30.840 --> 13:35.480 the initialized driver, one line, very nice. 13:35.480 --> 13:38.720 Line 18, we get the measurement, line 22. 13:38.720 --> 13:42.160 We print it using the logging and then we 13:42.160 --> 13:44.040 do loop again and do this. 13:44.040 --> 13:48.800 So if we execute this, I'm not as brave as a lexat 13:48.800 --> 13:49.840 onto demo life here. 13:49.840 --> 13:52.000 But this is the output you can see. 13:52.000 --> 13:54.200 It's was a bit colder in the office I built this demo. 13:54.200 --> 13:56.400 It's 19 degrees. 13:56.400 --> 13:57.560 Yeah. 13:57.560 --> 13:58.840 All right, let's move on. 13:58.840 --> 14:01.640 We want to network this up. 14:01.640 --> 14:05.240 So we need to do some TCP sent, integrate an domain loop, 14:05.240 --> 14:06.960 and then settle with the build system 14:06.960 --> 14:11.080 to enable the networking. 14:11.080 --> 14:12.760 Yeah, I was laughing when I saw a lexat slide 14:12.760 --> 14:14.640 because he also did some TCP sent. 14:14.640 --> 14:16.040 If you would have it side by side, 14:16.040 --> 14:18.720 it looks almost exactly the same, right? 14:18.720 --> 14:23.800 Even let the static IPv4 address hard coded in. 14:23.800 --> 14:25.240 Don't do that nowadays. 14:25.240 --> 14:29.160 What you don't see here is what he had to do. 14:29.160 --> 14:31.080 It's like a setting up of the network stack, 14:31.080 --> 14:34.760 whether the Wi-Fi and the connection everything. 14:34.760 --> 14:38.000 Because here for the array of metrics in the line 3, 14:38.000 --> 14:40.160 where you get a network stack, and actually 14:40.160 --> 14:42.600 the system and the build system know how to configure this. 14:42.600 --> 14:44.880 So for the board, we're using the NFTK, 14:44.880 --> 14:48.080 the build system shows the USB Ethernet networking, 14:48.080 --> 14:50.280 and sets everything up and the network task. 14:50.280 --> 14:52.000 So for this implementation, 14:52.000 --> 14:54.120 really we just take the network stack 14:54.120 --> 14:57.120 and do the TCP sendings. 14:57.120 --> 14:57.960 That is straightforward. 14:57.960 --> 15:00.200 Create a socket, connect, write everything, 15:00.200 --> 15:03.000 flush it, and be done with it. 15:03.000 --> 15:06.800 Yeah, and I worked around, I worked around the buffer 15:06.800 --> 15:09.320 lifetime issues by just having it look into the function. 15:09.320 --> 15:13.600 So this reconnects every time realises the buffer. 15:13.600 --> 15:17.160 So with that report with that function, 15:17.160 --> 15:18.160 back to our main loop. 15:18.160 --> 15:20.680 Now instead of printing to the logging, 15:20.680 --> 15:22.520 we printed to the buffer to string. 15:22.520 --> 15:24.120 Here I'm using a heapless string. 15:24.120 --> 15:27.880 It gets allocated here on the stack or in the future, 15:27.880 --> 15:30.080 but it's a pity bed. 15:30.080 --> 15:32.760 Anyhow, there's the buffer now, and we call our report 15:32.760 --> 15:34.240 function in line 6. 15:34.240 --> 15:36.640 And with that we send the stuff off. 15:36.640 --> 15:39.120 I have my favorite sophisticated server package 15:39.120 --> 15:40.040 on the other side. 15:40.040 --> 15:41.640 No, ah, first build system, sorry. 15:41.640 --> 15:42.480 Yeah. 15:42.480 --> 15:44.240 So now we first have to interact with LES. 15:44.240 --> 15:46.520 On the left side, you see we want to use TCP, 15:46.520 --> 15:50.120 and we added for the right, and for the string buffer, 15:50.120 --> 15:51.200 I use the embedded I always think, 15:51.200 --> 15:52.600 and heapless dependencies. 15:52.600 --> 15:56.840 That's ecosystem creates very nice to reuse. 15:56.840 --> 15:59.600 And here, first, we have to add this network select. 15:59.600 --> 16:03.440 This is not in cargo because LES needs to know 16:03.440 --> 16:05.520 if the board has network, and it does know 16:05.520 --> 16:07.080 which kind of network it is. 16:07.080 --> 16:11.640 That's why we have this extra configuration in LES. 16:11.640 --> 16:13.760 So now with the network select in place, 16:13.760 --> 16:15.600 this would not compile any more on boards 16:15.600 --> 16:18.720 where we don't know if there's a network interface. 16:18.720 --> 16:24.160 Anyhow, for set in place, we can get that data on. 16:24.160 --> 16:27.520 I omitted the whole host configuration of the USB 16:27.520 --> 16:30.080 Ethernet enriching a providing DHCP server to that, 16:30.080 --> 16:35.480 but you get to just like the node part is done with that. 16:36.000 --> 16:40.040 OK, so now what if I wanted to run this on a different hardware? 16:40.040 --> 16:43.160 Like, I'm going to put this to the rest part of Tico. 16:43.160 --> 16:44.800 The only thing that was actually board specific 16:44.800 --> 16:49.160 was where the pinouts and the choice of ice-craft C peripherals. 16:49.160 --> 16:52.600 So by changing those four lines, here I added like a whole new, 16:52.600 --> 16:56.280 using config, like, waspondition compilation. 16:56.280 --> 16:57.960 A whole new case for compilation. 16:57.960 --> 16:59.480 So it also works on the previous board, 16:59.480 --> 17:00.920 but if I wanted to put it to Tico, 17:00.920 --> 17:03.520 those as the four lines I would need to change. 17:03.520 --> 17:07.200 And with those four line changes, it works on this, 17:07.200 --> 17:08.320 actually I didn't follow through with it. 17:08.320 --> 17:10.040 It compiles and it probably runs. 17:10.040 --> 17:11.840 It didn't solder the fixed, right? 17:11.840 --> 17:13.960 But the idea here is four lines, 17:13.960 --> 17:17.520 and it runs on a completely different mic controller. 17:17.520 --> 17:22.080 And that's it for getting started. 17:22.080 --> 17:22.960 What are we doing next? 17:22.960 --> 17:24.520 We're about to release version three. 17:24.520 --> 17:26.120 The version O3. 17:26.120 --> 17:28.760 Oh, yes. 17:28.760 --> 17:31.040 We're like filling with a change box still. 17:31.040 --> 17:33.440 That adds integration of Bluetooth low energy. 17:33.440 --> 17:35.960 Using the troubled stack, we now have native board 17:35.960 --> 17:38.080 with networking, also coming in, I think, 17:38.080 --> 17:39.600 probably before the recess. 17:39.600 --> 17:43.440 And we have more Yamil to describe the actual boards, 17:43.440 --> 17:46.000 move stuff out of the rust code and into Yamil, 17:46.000 --> 17:49.440 because that's much easier to handle at scale. 17:49.440 --> 17:52.360 And after that, we're going to take the secure software updates 17:52.360 --> 17:53.600 and better power management. 17:56.880 --> 17:58.800 OK, so wrapping up, up. 17:58.800 --> 18:01.040 And what everything else does is like what you've seen 18:01.040 --> 18:04.480 for with the ESP stuff, we try to get all these little things 18:04.480 --> 18:07.400 that people have to care about to get started, 18:07.400 --> 18:08.880 do it one thread, right? 18:08.880 --> 18:11.160 So you can actually concentrate on the business logic. 18:11.160 --> 18:14.240 So we integrate the rim of the rust ecosystem 18:14.240 --> 18:16.720 and make it easily approachable. 18:16.720 --> 18:18.840 And we think that that makes a better rust really easy 18:18.840 --> 18:19.480 to get started. 18:23.120 --> 18:27.200 So now you're thinking, why did they use IPv4 in 2026? 18:29.040 --> 18:30.760 And hopefully, you're also thinking that this locks 18:30.760 --> 18:33.800 awesome, and you want to try it. 18:33.800 --> 18:34.800 Thank you. 18:34.800 --> 18:35.800 Thank you. 18:35.800 --> 18:44.600 APPLAUSE 18:44.600 --> 18:46.400 So if you have questions, we probably meet outside. 18:46.400 --> 18:48.000 Oh, we have questions, time for questions. 18:48.000 --> 18:50.200 We have time, OK. 18:50.200 --> 18:51.200 Seven minutes. 18:51.200 --> 18:52.800 Wow. 18:52.800 --> 18:54.600 You have to answer the question you have to mind. 18:54.600 --> 18:56.200 OK, I can do it like this. 18:56.200 --> 18:58.760 OK, that's good. 18:59.560 --> 19:03.160 OK, thank you for your call. 19:03.160 --> 19:06.920 And now the question, here is 2026. 19:06.920 --> 19:09.600 Next year, CRA will take effect. 19:09.600 --> 19:12.640 Next year, the CRA cybersecurity resilience 19:12.640 --> 19:14.280 will take effect. 19:14.280 --> 19:17.880 And it requires that you should ship your software 19:17.880 --> 19:21.520 in secure configuration by default. 19:21.520 --> 19:27.000 And my question is, all of the hardware you support, 19:27.000 --> 19:29.320 actually supports MPU. 19:29.320 --> 19:30.680 Why are you not using it? 19:34.960 --> 19:38.360 Yeah, so there's two things. 19:38.360 --> 19:40.920 Why is the architecture not split in the OS 19:40.920 --> 19:44.000 and the application like talk to us? 19:44.000 --> 19:46.560 That would be one way to use the MPU 19:46.560 --> 19:48.120 have like a hard separation between it. 19:48.120 --> 19:49.560 Because this is a library. 19:49.560 --> 19:51.680 So the application gets compliant. 19:51.680 --> 19:53.360 And the network stack and everything 19:53.360 --> 19:54.760 is just a building block of one application. 19:54.760 --> 19:56.560 It's one application, one address space. 19:56.560 --> 19:57.720 This is how it works, right? 19:57.720 --> 19:58.760 It's like one application. 19:58.760 --> 20:02.000 What we don't do is we split the OS and the application 20:02.000 --> 20:06.720 because we like this architecture. 20:06.720 --> 20:09.160 We'll do that before. 20:09.160 --> 20:12.240 Like for example, talk to us, and... 20:12.240 --> 20:14.680 OK, you like it. 20:14.680 --> 20:21.600 And how will your security assessment look like 20:21.600 --> 20:24.000 that you will defend this, that it is secure? 20:24.000 --> 20:26.440 Because you target IoT specifically. 20:26.440 --> 20:27.480 So it's networked. 20:27.480 --> 20:32.560 It will potentially transfer some critical sensitive 20:32.560 --> 20:35.560 information. 20:35.560 --> 20:37.440 Do you believe it is secure? 20:37.440 --> 20:40.360 Actually. 20:40.360 --> 20:41.720 Should we talk about this outside? 20:41.720 --> 20:45.920 Yeah, because it's very wide, right? 20:45.920 --> 20:46.520 By good question. 20:52.840 --> 20:54.560 We need to really question what's coming, right? 20:54.560 --> 20:56.400 Yeah, yeah. 20:57.360 --> 21:00.880 Do you plan to support DVI-3 at some point? 21:00.880 --> 21:02.080 Sorry, I think you get it. 21:02.080 --> 21:03.440 Could you repeat that? 21:03.440 --> 21:06.880 Do you have any plans for DVI-3 support for desk 21:06.880 --> 21:07.440 or something? 21:07.440 --> 21:09.080 Yeah, we're not doing DVI-3. 21:09.080 --> 21:12.560 DVI-3 mixes like policy and configuration and stuff. 21:12.560 --> 21:14.760 What we're going to do is just parse the DVI-3 21:14.760 --> 21:17.800 of ZFIA out using LLMs and convert it to our format, 21:17.800 --> 21:20.800 which we think is better. 21:20.800 --> 21:22.080 No, DVI-3. 21:22.080 --> 21:24.280 Because DVI-3, I mean, it's great on Linux 21:24.280 --> 21:26.080 because it does runtime configuration, 21:26.080 --> 21:28.680 which we don't need, for example, ZFIA doesn't use. 21:28.680 --> 21:31.840 And if you don't use the runtime configuration 21:31.840 --> 21:34.520 at the option of compiling to something 21:34.520 --> 21:36.720 readable at runtime, device-3 itself 21:36.720 --> 21:38.720 is not a great description format, right? 21:38.720 --> 21:40.520 So we don't want to use this data format. 21:40.520 --> 21:42.760 But these days, we actually try it nowadays. 21:42.760 --> 21:44.920 It doesn't really matter what format the machine 21:44.920 --> 21:46.960 readable stuff is in, right? 21:46.960 --> 21:49.280 So seriously, we're like, yes, like our own stuff, 21:49.280 --> 21:50.880 which is called the structured board description, 21:50.880 --> 21:52.680 which is super simple, Yamil saying which LED 21:52.680 --> 21:54.080 which color which pin. 21:54.080 --> 21:57.360 And we can easily pull that out of the ZFIA device piece 21:57.360 --> 21:59.280 or generate it from the data sheets using LLMs. 21:59.280 --> 22:01.920 So the actual device cannot does a method this days. 22:11.720 --> 22:12.720 Any other question? 22:12.720 --> 22:13.720 There's one question. 22:13.720 --> 22:15.520 Oh, sorry, we're going to do this. 22:15.520 --> 22:24.760 Do you implement any memory protection? 22:24.760 --> 22:27.800 I'll say a bunch of runs on size codes, 22:27.800 --> 22:28.920 a new dialog wrong. 22:28.920 --> 22:31.400 Can you do implement that for tasks 22:31.400 --> 22:34.040 or any sort of task restarting for Panics 22:34.040 --> 22:35.680 or anything like that? 22:35.680 --> 22:37.040 Yeah, similar question to this. 22:37.040 --> 22:40.840 So what we do is we have it in a branch. 22:40.840 --> 22:42.960 We actually using the MPU to protect our stacks 22:42.960 --> 22:43.960 because we have multiple stacks. 22:43.960 --> 22:47.200 So we use, we have that zone for that declaration, 22:47.200 --> 22:48.120 but it's a library. 22:48.120 --> 22:49.720 So it's not different process. 22:49.720 --> 22:51.640 This is all one rust thing. 22:51.640 --> 22:55.320 So we cannot easily have a threat in a different memory space 22:55.320 --> 22:57.600 or differently protected that just work. 22:57.600 --> 23:00.360 What we could do is have like a separately compiled thing 23:00.360 --> 23:02.040 and just a completely different architecture. 23:02.040 --> 23:04.080 Talk to us that we don't do this. 23:04.080 --> 23:05.160 Just a different architecture. 23:05.160 --> 23:18.160 Do you support matter, threat, zig-be, or only. 23:18.160 --> 23:20.760 It's integrated yet. 23:20.760 --> 23:22.920 We make our espaciously embassy. 23:22.920 --> 23:26.120 So the APIs embassy, I'm pretty sure that the RS 23:26.120 --> 23:28.920 met a embassy example would run basically unmodified 23:28.920 --> 23:30.160 on our unreal. 23:30.160 --> 23:31.520 And we have it in a roadmap to just 23:31.520 --> 23:33.360 integrate and make an example out of this. 23:33.360 --> 23:36.080 So in theory, yes, of course, but it's not integrated 23:36.080 --> 23:36.960 as well as it could be. 23:47.120 --> 23:49.960 Do more questions. 23:49.960 --> 23:51.360 OK, thank you. 23:51.360 --> 23:52.000 Thank you.