0 00:00:00,000 --> 00:00:30,000 Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/49 Thanks! 1 00:00:10,170 --> 00:00:11,170 Hello. 2 00:00:11,850 --> 00:00:14,049 Well, you probably all know 3 00:00:14,050 --> 00:00:16,529 opened over your tears, and NBT 4 00:00:16,530 --> 00:00:18,239 is one of the main developers 5 00:00:19,650 --> 00:00:22,049 of Felix 6 00:00:22,050 --> 00:00:25,319 Fitow and 7 00:00:25,320 --> 00:00:27,149 is here. He's here to tell you about the 8 00:00:27,150 --> 00:00:29,019 last 10 years of open WRP. 9 00:00:31,140 --> 00:00:32,140 Yes, thank you. 10 00:00:40,940 --> 00:00:42,709 So the opening of the art project was 11 00:00:42,710 --> 00:00:44,929 started a bit over 12 00:00:44,930 --> 00:00:47,569 10 years ago, and 13 00:00:47,570 --> 00:00:49,459 I'd like to take this opportunity to 14 00:00:49,460 --> 00:00:51,529 reflect back on where 15 00:00:51,530 --> 00:00:53,659 the whole project came from and 16 00:00:53,660 --> 00:00:55,879 how much it has changed and evolved over 17 00:00:55,880 --> 00:00:57,739 time based on the progress that we've 18 00:00:57,740 --> 00:00:58,969 made. 19 00:00:58,970 --> 00:01:01,579 So first, I'd like to tell you a bit 20 00:01:01,580 --> 00:01:03,769 about what happened in the early 21 00:01:03,770 --> 00:01:05,989 days, as many of you 22 00:01:05,990 --> 00:01:08,989 know, and as the name still implies, 23 00:01:08,990 --> 00:01:11,059 it started out pretty much as a 24 00:01:11,060 --> 00:01:13,219 framework for the old 50 25 00:01:13,220 --> 00:01:14,220 fauji. 26 00:01:14,850 --> 00:01:17,239 The effort to create this foamer 27 00:01:17,240 --> 00:01:19,669 started when basically 28 00:01:19,670 --> 00:01:21,889 it was discovered that this this 29 00:01:21,890 --> 00:01:24,259 device we're using, a Broadcom 30 00:01:24,260 --> 00:01:26,329 chip was using Linux 31 00:01:26,330 --> 00:01:28,249 as its base operating system. 32 00:01:28,250 --> 00:01:31,099 And initially it was a pretty huge 33 00:01:31,100 --> 00:01:33,259 violation because lynxes didn't 34 00:01:33,260 --> 00:01:35,299 bother to release any source code for the 35 00:01:35,300 --> 00:01:37,519 device. But that, of course, didn't stop 36 00:01:37,520 --> 00:01:38,930 interested people from 37 00:01:39,950 --> 00:01:42,259 from trying to hack it, from looking into 38 00:01:42,260 --> 00:01:44,689 the inner workings of the firmware, 39 00:01:44,690 --> 00:01:46,699 discovering the limitations of it, and 40 00:01:46,700 --> 00:01:48,889 then starting to create a replacement 41 00:01:48,890 --> 00:01:50,659 for that firmware. 42 00:01:50,660 --> 00:01:52,759 And this was done in the early days based 43 00:01:52,760 --> 00:01:55,039 on the U.S. Lipsy, Bill Drut, which 44 00:01:55,040 --> 00:01:57,859 was a pretty small and flexible 45 00:01:57,860 --> 00:02:00,439 environment to quickly bring up 46 00:02:00,440 --> 00:02:02,539 code for for a new target 47 00:02:02,540 --> 00:02:04,699 and used Lipsey have the advantage 48 00:02:04,700 --> 00:02:06,919 of being much smaller than G c, 49 00:02:06,920 --> 00:02:10,219 which I think the initial device used. 50 00:02:10,220 --> 00:02:12,439 So it started out by 51 00:02:12,440 --> 00:02:14,989 basically taking the links is 52 00:02:14,990 --> 00:02:17,539 terrible once it was released, 53 00:02:17,540 --> 00:02:19,729 which only happened because many 54 00:02:19,730 --> 00:02:22,309 people, many of which included 55 00:02:22,310 --> 00:02:23,659 were member of the Linux kernel 56 00:02:23,660 --> 00:02:25,939 community, actively fought 57 00:02:25,940 --> 00:02:28,009 for the source code being released. 58 00:02:28,010 --> 00:02:29,989 And there was a lot of compliance 59 00:02:29,990 --> 00:02:32,209 engineering involved in that effort 60 00:02:32,210 --> 00:02:34,069 as well. And some pretty prominent kernel 61 00:02:34,070 --> 00:02:36,199 people also took part in 62 00:02:36,200 --> 00:02:38,629 that. And back then, 63 00:02:38,630 --> 00:02:41,359 I think embedded Linux was still 64 00:02:41,360 --> 00:02:43,549 it was somewhat popular 65 00:02:43,550 --> 00:02:45,829 in some areas, but it wasn't really 66 00:02:45,830 --> 00:02:47,599 all that widespread on Voudrais. 67 00:02:47,600 --> 00:02:49,999 Yet back then there was still the 68 00:02:50,000 --> 00:02:51,949 PVCs works operating system as an 69 00:02:51,950 --> 00:02:53,719 alternative, which had no GPL 70 00:02:53,720 --> 00:02:55,939 requirements and was 71 00:02:55,940 --> 00:02:58,039 much smaller than Linux, but also much 72 00:02:58,040 --> 00:02:59,040 less flexible. 73 00:02:59,960 --> 00:03:02,509 So when Open WRP started 74 00:03:02,510 --> 00:03:04,609 out with the lynxes, terrible it 75 00:03:04,610 --> 00:03:06,679 was, it still resembles a 76 00:03:06,680 --> 00:03:08,809 lot of the structure of of the 77 00:03:08,810 --> 00:03:11,119 lynxes system when running on the system, 78 00:03:11,120 --> 00:03:13,579 even though it was much more minimalistic 79 00:03:13,580 --> 00:03:15,979 than the original firmware, because they 80 00:03:15,980 --> 00:03:17,959 always had the intention of creating 81 00:03:17,960 --> 00:03:20,059 something new from scratch. 82 00:03:20,060 --> 00:03:22,429 So the first step, of course, 83 00:03:22,430 --> 00:03:24,559 one onesta, the code was running 84 00:03:24,560 --> 00:03:26,609 based on the build route and the lynxes 85 00:03:26,610 --> 00:03:28,819 terrible was reworking it to 86 00:03:28,820 --> 00:03:30,829 get rid of this terrible dependency which 87 00:03:30,830 --> 00:03:33,049 weighed in a few hundred megabytes, 88 00:03:33,050 --> 00:03:35,569 I think, or maybe one hundred and fifty. 89 00:03:35,570 --> 00:03:37,849 So the first step was to to get 90 00:03:37,850 --> 00:03:39,859 rid of that and basically only pull in 91 00:03:39,860 --> 00:03:41,929 the required parts, which were much, much 92 00:03:41,930 --> 00:03:43,520 smaller than the entire Tarbell. 93 00:03:44,540 --> 00:03:47,149 And then the the focus 94 00:03:47,150 --> 00:03:49,789 on the initial effort was also to update 95 00:03:49,790 --> 00:03:51,589 the Linux two point four kernel. 96 00:03:51,590 --> 00:03:54,829 This was in 2003 and 2004, 97 00:03:54,830 --> 00:03:57,019 long before we had a working two point 98 00:03:57,020 --> 00:03:58,020 six kernel. 99 00:03:58,730 --> 00:04:00,949 So when when I got 100 00:04:00,950 --> 00:04:03,079 involved in the project, I basically 101 00:04:03,080 --> 00:04:05,179 started with the first 102 00:04:05,180 --> 00:04:08,389 of our several built system rewrites. 103 00:04:08,390 --> 00:04:10,219 I put a lot of effort into creating 104 00:04:10,220 --> 00:04:11,419 something where you could you could 105 00:04:11,420 --> 00:04:13,729 package software for the system with 106 00:04:13,730 --> 00:04:15,079 minimal effort. 107 00:04:15,080 --> 00:04:17,179 And this then also 108 00:04:17,180 --> 00:04:19,639 led to our first actual release 109 00:04:19,640 --> 00:04:20,958 that we did. 110 00:04:20,959 --> 00:04:23,359 We came up with the idea of naming 111 00:04:23,360 --> 00:04:26,329 our releases after vodka based cocktails, 112 00:04:26,330 --> 00:04:28,549 and our first release was called White 113 00:04:28,550 --> 00:04:29,419 Russian. 114 00:04:29,420 --> 00:04:31,579 And the version number is also 115 00:04:31,580 --> 00:04:33,799 interesting because back then we still 116 00:04:33,800 --> 00:04:36,319 believed in at some point eventually 117 00:04:36,320 --> 00:04:38,689 coming up with a 1.0 release 118 00:04:38,690 --> 00:04:41,029 and we felt that we 119 00:04:41,030 --> 00:04:42,769 were getting pretty close to it. 120 00:04:42,770 --> 00:04:44,570 So we called it zero point nine. 121 00:04:46,560 --> 00:04:48,719 And with that release done, we again had 122 00:04:48,720 --> 00:04:51,149 time to to come up with 123 00:04:51,150 --> 00:04:53,339 more interesting developments to work on 124 00:04:53,340 --> 00:04:55,499 that. And actually after the white 125 00:04:55,500 --> 00:04:57,689 Russian release, we made lots of big 126 00:04:57,690 --> 00:04:58,649 changes. 127 00:04:58,650 --> 00:05:00,539 We shifted away from the Broadcom 128 00:05:00,540 --> 00:05:02,909 platform, which the Lanxess device 129 00:05:02,910 --> 00:05:05,009 was based on in the 130 00:05:05,010 --> 00:05:06,449 wide Russian release. We had actually 131 00:05:06,450 --> 00:05:08,339 supported many devices running on the 132 00:05:08,340 --> 00:05:10,769 same platform, but it was still very 133 00:05:10,770 --> 00:05:12,749 much based on the code of the Broadcom 134 00:05:12,750 --> 00:05:13,919 SDK. 135 00:05:13,920 --> 00:05:16,019 So we decided it's going to be 136 00:05:16,020 --> 00:05:18,239 multiplatform and we rewrote 137 00:05:18,240 --> 00:05:19,679 the built system again. 138 00:05:19,680 --> 00:05:22,259 And I was again part of that effort 139 00:05:22,260 --> 00:05:24,719 and we made major changes 140 00:05:24,720 --> 00:05:27,209 to ensure that it's not platform 141 00:05:27,210 --> 00:05:29,759 specific, it's not device specific. 142 00:05:29,760 --> 00:05:32,279 And we're able to to create more features 143 00:05:32,280 --> 00:05:34,619 and more different platforms 144 00:05:34,620 --> 00:05:36,089 to support. 145 00:05:36,090 --> 00:05:38,189 And we actually also came up 146 00:05:38,190 --> 00:05:40,349 with our own configuration system 147 00:05:40,350 --> 00:05:42,989 because the old system was still 148 00:05:42,990 --> 00:05:44,369 still very much inherited. 149 00:05:44,370 --> 00:05:46,799 Parts of the SDK structure, 150 00:05:46,800 --> 00:05:49,019 which includes 151 00:05:49,020 --> 00:05:51,179 the infamous and VRM support, 152 00:05:51,180 --> 00:05:53,579 which is basically just a key value 153 00:05:53,580 --> 00:05:55,919 store dumped into one partition, 154 00:05:55,920 --> 00:05:58,109 which has some device specific 155 00:05:58,110 --> 00:05:59,849 works, is rather limited in 156 00:05:59,850 --> 00:06:01,079 configuration. 157 00:06:01,080 --> 00:06:03,509 And we didn't feel like bringing 158 00:06:03,510 --> 00:06:05,579 that legacy baggage to other 159 00:06:05,580 --> 00:06:07,229 platforms as well. 160 00:06:07,230 --> 00:06:09,299 So we created our own configuration 161 00:06:09,300 --> 00:06:11,399 system and we decided pretty 162 00:06:11,400 --> 00:06:13,169 much from the beginning that we want to 163 00:06:13,170 --> 00:06:15,299 have all configuration handled through 164 00:06:15,300 --> 00:06:17,129 a single system, at least for everything 165 00:06:17,130 --> 00:06:18,480 that's relevant on the system. 166 00:06:19,920 --> 00:06:22,289 Instead of going the traditional Linux 167 00:06:22,290 --> 00:06:24,209 way of just having everything being 168 00:06:24,210 --> 00:06:26,609 configured in its own config file format 169 00:06:26,610 --> 00:06:28,889 and trying to come up with various clever 170 00:06:28,890 --> 00:06:31,109 hacks of automated modifications 171 00:06:31,110 --> 00:06:33,179 to those, we use our own 172 00:06:33,180 --> 00:06:35,309 central configuration storage, which was 173 00:06:35,310 --> 00:06:37,469 designed to fit basically 90 174 00:06:37,470 --> 00:06:40,049 percent of the requirements of a system, 175 00:06:40,050 --> 00:06:42,329 but not to not make 176 00:06:42,330 --> 00:06:44,429 it too complex or complicated. 177 00:06:44,430 --> 00:06:46,649 So we never tried to really put 178 00:06:46,650 --> 00:06:48,899 a cover everything with the single code 179 00:06:48,900 --> 00:06:50,879 because this would have added too much 180 00:06:50,880 --> 00:06:52,709 complexity for the whole system. 181 00:06:52,710 --> 00:06:54,839 And actually, complexity is one of our 182 00:06:54,840 --> 00:06:56,079 main enemies these days. 183 00:06:56,080 --> 00:06:57,629 So I think this trade off was a good 184 00:06:57,630 --> 00:06:58,630 choice. 185 00:06:59,300 --> 00:07:01,399 And with the transition from 186 00:07:01,400 --> 00:07:03,559 from the old white Russian code base and 187 00:07:03,560 --> 00:07:05,509 away from the traditional and VRM 188 00:07:05,510 --> 00:07:07,879 configuration interface, we also 189 00:07:07,880 --> 00:07:10,129 had to basically rewrite our web 190 00:07:10,130 --> 00:07:11,719 interface from scratch. 191 00:07:11,720 --> 00:07:13,849 So it was it was lucky 192 00:07:13,850 --> 00:07:15,559 that some people from the FREEPHONE 193 00:07:15,560 --> 00:07:17,509 project who also needed a new Web 194 00:07:17,510 --> 00:07:19,999 interface for this new code base, decided 195 00:07:20,000 --> 00:07:22,129 to create something that not only fit 196 00:07:22,130 --> 00:07:24,229 their needs, but decided to 197 00:07:24,230 --> 00:07:26,629 to wear it, put it, make it a part 198 00:07:26,630 --> 00:07:28,939 of the open system 199 00:07:28,940 --> 00:07:29,940 as well. 200 00:07:30,530 --> 00:07:32,839 So given the scope of these changes 201 00:07:32,840 --> 00:07:35,539 and how much we did in the short time, 202 00:07:35,540 --> 00:07:37,969 we decided, well, actually we decided 203 00:07:37,970 --> 00:07:40,099 before many of the changes were made, 204 00:07:40,100 --> 00:07:42,169 we decided to call the system kamikaze 205 00:07:42,170 --> 00:07:44,089 because I think this is a fitting name, 206 00:07:44,090 --> 00:07:46,669 given how radically the project changed 207 00:07:46,670 --> 00:07:47,989 during that time. 208 00:07:47,990 --> 00:07:50,329 And again, here you see, 209 00:07:50,330 --> 00:07:52,699 it has a nice recipe and it's 210 00:07:52,700 --> 00:07:54,889 easy to mix and you can have 211 00:07:54,890 --> 00:07:56,449 fun with a cocktail as well as the 212 00:07:56,450 --> 00:07:57,450 system. 213 00:08:00,820 --> 00:08:03,159 But then after Cannes, because 214 00:08:03,160 --> 00:08:05,079 it was released and actually we did 215 00:08:05,080 --> 00:08:07,449 several releases with that name because 216 00:08:07,450 --> 00:08:09,579 at that point in time we didn't have 217 00:08:09,580 --> 00:08:11,859 the time to come up with with a 218 00:08:11,860 --> 00:08:13,749 more fitting names for the individual 219 00:08:13,750 --> 00:08:16,029 releases, because we were so busy hacking 220 00:08:16,030 --> 00:08:18,369 on incremental changes, we decided 221 00:08:18,370 --> 00:08:20,289 that it's time to focus some more on 222 00:08:20,290 --> 00:08:21,669 stabilization. 223 00:08:21,670 --> 00:08:23,559 Of course, at the same time, we also had 224 00:08:23,560 --> 00:08:25,749 the usual churn of adding more targets, 225 00:08:25,750 --> 00:08:27,969 more packages and updated our 226 00:08:27,970 --> 00:08:28,929 compiler. 227 00:08:28,930 --> 00:08:31,419 But the radical 228 00:08:31,420 --> 00:08:33,678 aspects of the changes that we made 229 00:08:33,679 --> 00:08:36,428 is in some ways actually backfired 230 00:08:36,429 --> 00:08:36,908 on us. 231 00:08:36,909 --> 00:08:39,009 So we also, again, had 232 00:08:39,010 --> 00:08:40,659 a very fitting release code name. 233 00:08:43,919 --> 00:08:46,019 And then after we did 234 00:08:46,020 --> 00:08:47,099 the backfire release, 235 00:08:48,480 --> 00:08:50,759 it was again time to to 236 00:08:50,760 --> 00:08:52,919 change or revisit 237 00:08:52,920 --> 00:08:54,749 some of the design decisions that we 238 00:08:54,750 --> 00:08:57,059 made, for instance, Linux, two point 239 00:08:57,060 --> 00:08:59,429 four support that we still had because 240 00:08:59,430 --> 00:09:02,129 we needed the Broadcom wireless drivers. 241 00:09:02,130 --> 00:09:04,469 It was getting stale and it was getting 242 00:09:04,470 --> 00:09:06,879 really annoying and maintaining a system. 243 00:09:06,880 --> 00:09:09,059 I mean, we had at that 244 00:09:09,060 --> 00:09:11,429 time, we had many targets running 245 00:09:11,430 --> 00:09:13,409 Linux, two point six, and we had one 246 00:09:13,410 --> 00:09:15,689 single target, the Broadcom target, 247 00:09:15,690 --> 00:09:17,969 still running Linux, two point four. 248 00:09:17,970 --> 00:09:19,529 And in the meantime, actually, a lot of 249 00:09:19,530 --> 00:09:21,809 development happened on replacing 250 00:09:21,810 --> 00:09:23,969 that binary driver with the open 251 00:09:23,970 --> 00:09:26,069 source. Be forty three driver. 252 00:09:26,070 --> 00:09:27,959 It's still not at the point where it can 253 00:09:27,960 --> 00:09:30,269 replace the binary drivers. 254 00:09:30,270 --> 00:09:32,579 But in the meantime, we also managed to 255 00:09:32,580 --> 00:09:34,859 get a binary driver as a replacement 256 00:09:34,860 --> 00:09:36,839 up and running on the Linux two point six 257 00:09:36,840 --> 00:09:39,059 target, though that one's 258 00:09:39,060 --> 00:09:40,889 not updated as frequently. 259 00:09:41,970 --> 00:09:44,369 So we decided 260 00:09:44,370 --> 00:09:46,259 since since we're going to do some more 261 00:09:46,260 --> 00:09:47,339 changes again. 262 00:09:47,340 --> 00:09:49,529 We this time focused 263 00:09:49,530 --> 00:09:52,169 mostly on the userspace rework 264 00:09:52,170 --> 00:09:53,969 because we still had a system that was 265 00:09:53,970 --> 00:09:56,069 running a lot of code 266 00:09:56,070 --> 00:09:58,409 and much, much of it was 267 00:09:58,410 --> 00:10:00,539 getting very slow and hard to maintain 268 00:10:00,540 --> 00:10:02,699 because it's easy to to create 269 00:10:02,700 --> 00:10:04,829 some simple scripts with Chele. 270 00:10:04,830 --> 00:10:07,229 But once you start making a bigger system 271 00:10:07,230 --> 00:10:09,929 with lots of configuration options, 272 00:10:09,930 --> 00:10:11,909 it gets cumbersome, especially if you 273 00:10:11,910 --> 00:10:14,189 have all these side effects of things 274 00:10:14,190 --> 00:10:15,569 that need to be restarted. 275 00:10:15,570 --> 00:10:18,209 If the configuration changes or 276 00:10:18,210 --> 00:10:20,459 the network setup especially was 277 00:10:20,460 --> 00:10:22,589 getting very complex because we 278 00:10:22,590 --> 00:10:24,659 started supporting many 279 00:10:24,660 --> 00:10:26,759 different configuration types with 280 00:10:26,760 --> 00:10:29,249 complex typologies of bridges, 281 00:10:29,250 --> 00:10:31,349 villans routing setups, we had 282 00:10:31,350 --> 00:10:33,419 complex firewall things and it 283 00:10:33,420 --> 00:10:35,879 was just too cumbersome to keep all that 284 00:10:35,880 --> 00:10:37,649 as shell scripts. 285 00:10:37,650 --> 00:10:40,289 And we also then started 286 00:10:40,290 --> 00:10:42,359 working on IPV six because 287 00:10:42,360 --> 00:10:44,519 it's the protocol of the future and 288 00:10:44,520 --> 00:10:45,900 may well be for some time. 289 00:10:50,960 --> 00:10:53,119 And this is, again, reflected 290 00:10:53,120 --> 00:10:55,309 nicely in the release name, because 291 00:10:55,310 --> 00:10:57,139 a lot of our attitudes of how we did 292 00:10:57,140 --> 00:10:59,269 things previously changed with that 293 00:10:59,270 --> 00:11:01,789 release and much of the userspace 294 00:11:01,790 --> 00:11:04,249 we work, we have the the initial 295 00:11:04,250 --> 00:11:06,229 versions of that in the attitude 296 00:11:06,230 --> 00:11:08,359 adjustment release, but we're only 297 00:11:08,360 --> 00:11:10,459 now bringing it to full potential 298 00:11:10,460 --> 00:11:12,349 with a development that's going on right 299 00:11:12,350 --> 00:11:13,579 now. 300 00:11:13,580 --> 00:11:15,769 So I'd like to take 301 00:11:15,770 --> 00:11:17,869 a short some short time to introduce 302 00:11:17,870 --> 00:11:19,789 some of the components that we we've 303 00:11:19,790 --> 00:11:21,859 built for the embedded system, which 304 00:11:21,860 --> 00:11:23,989 deviate a lot from what you find on 305 00:11:23,990 --> 00:11:26,269 a traditional Linux distribution. 306 00:11:26,270 --> 00:11:28,429 We have our system. 307 00:11:28,430 --> 00:11:30,709 Our service is called Juba's 308 00:11:30,710 --> 00:11:33,319 with the name based on on DBAs. 309 00:11:33,320 --> 00:11:36,469 But unlike DBAs, it's small. 310 00:11:36,470 --> 00:11:38,689 I think with DBAs, the library 311 00:11:38,690 --> 00:11:40,849 itself weighs in way over one 312 00:11:40,850 --> 00:11:42,679 hundred and fifty kilobytes or something 313 00:11:42,680 --> 00:11:44,509 like that. And you need lots of other 314 00:11:44,510 --> 00:11:46,219 things to get it running as well. 315 00:11:46,220 --> 00:11:48,739 And we wanted to have something that's 316 00:11:48,740 --> 00:11:50,929 pretty much equally high level but 317 00:11:50,930 --> 00:11:53,149 more flexible for our requirements for 318 00:11:53,150 --> 00:11:54,559 the embedded systems. 319 00:11:54,560 --> 00:11:56,809 And we now have something where I think 320 00:11:56,810 --> 00:11:59,029 the system service itself is about 321 00:11:59,030 --> 00:12:01,129 20 kilobytes as a compiled binary 322 00:12:01,130 --> 00:12:03,679 and the library is maybe 13 or 15 323 00:12:03,680 --> 00:12:04,669 kilobytes. 324 00:12:04,670 --> 00:12:06,799 And it's still very high level 325 00:12:06,800 --> 00:12:08,779 and in some ways even more high level 326 00:12:08,780 --> 00:12:10,439 than than DBAs. 327 00:12:10,440 --> 00:12:13,099 A while ago, I discovered 328 00:12:13,100 --> 00:12:15,259 in the DBAs manual where it describes 329 00:12:15,260 --> 00:12:17,599 the capital of the system. 330 00:12:17,600 --> 00:12:19,789 If if you need to use this, 331 00:12:19,790 --> 00:12:22,069 you're signing up for some pain. 332 00:12:22,070 --> 00:12:23,269 And that's what the official 333 00:12:23,270 --> 00:12:24,349 documentation says. 334 00:12:24,350 --> 00:12:26,389 So that wasn't really what we were all 335 00:12:26,390 --> 00:12:27,390 interested in. 336 00:12:29,860 --> 00:12:31,929 So we brought a second component to 337 00:12:31,930 --> 00:12:34,029 replace the the old network 338 00:12:34,030 --> 00:12:35,289 scripts that we had. 339 00:12:35,290 --> 00:12:37,599 We now have a system deman that 340 00:12:37,600 --> 00:12:39,759 sets up the whole thing that 341 00:12:39,760 --> 00:12:41,769 we supported with the earlier scripts, 342 00:12:41,770 --> 00:12:44,229 with the bridges and villans and 343 00:12:44,230 --> 00:12:46,749 interfaces with multiple addresses and 344 00:12:46,750 --> 00:12:47,649 all that stuff. 345 00:12:47,650 --> 00:12:49,839 And now we have one CD-ROM 346 00:12:49,840 --> 00:12:51,279 that handles all that. 347 00:12:51,280 --> 00:12:53,259 And unlike the Shell scripts, it can 348 00:12:53,260 --> 00:12:54,639 handle things where you just make a 349 00:12:54,640 --> 00:12:56,739 change to the configuration and tell it 350 00:12:56,740 --> 00:12:58,809 to reload. And it will do the minimum 351 00:12:58,810 --> 00:13:00,699 amount of work necessary to bring up the 352 00:13:00,700 --> 00:13:02,949 new configuration without making 353 00:13:02,950 --> 00:13:05,019 it too hard on the implementor to 354 00:13:05,020 --> 00:13:07,449 to handle that with every single protocol 355 00:13:07,450 --> 00:13:08,889 that we support. 356 00:13:08,890 --> 00:13:11,109 Because we sometimes also 357 00:13:11,110 --> 00:13:13,539 have some complex configuration with with 358 00:13:13,540 --> 00:13:15,699 Tunnell's for IPV six and we 359 00:13:15,700 --> 00:13:17,769 have PBP and we have interfaces 360 00:13:17,770 --> 00:13:19,719 that come and go and all that. 361 00:13:19,720 --> 00:13:21,909 And this needs to be handled in a way 362 00:13:21,910 --> 00:13:24,189 where you just change the configuration 363 00:13:24,190 --> 00:13:26,379 and have the back and handle all these 364 00:13:26,380 --> 00:13:27,309 changes. 365 00:13:27,310 --> 00:13:29,469 So this is the piece of software that 366 00:13:29,470 --> 00:13:30,470 does all that. 367 00:13:31,740 --> 00:13:33,029 And then another thing that we 368 00:13:33,030 --> 00:13:35,219 reimplemented was 369 00:13:35,220 --> 00:13:37,349 we have our own kind of 370 00:13:37,350 --> 00:13:39,479 systemd, but again, much, much 371 00:13:39,480 --> 00:13:41,729 smaller and much more tailored to to 372 00:13:41,730 --> 00:13:43,319 the embedded use case. 373 00:13:43,320 --> 00:13:44,759 It's called Trachte. 374 00:13:44,760 --> 00:13:47,129 And it basically, aside from being 375 00:13:47,130 --> 00:13:49,409 PIDE one and handling the tasks 376 00:13:49,410 --> 00:13:51,479 related to that, the only thing that 377 00:13:51,480 --> 00:13:53,729 it really does is it keeps 378 00:13:53,730 --> 00:13:56,069 track of the processes that were started 379 00:13:56,070 --> 00:13:58,259 by its scripts and make sure 380 00:13:58,260 --> 00:14:00,419 that they are restarted when they 381 00:14:00,420 --> 00:14:01,469 need to be. 382 00:14:01,470 --> 00:14:03,689 And if the configuration changed 383 00:14:03,690 --> 00:14:05,789 and the init script is run again and this 384 00:14:05,790 --> 00:14:08,099 process monitoring demand can decide 385 00:14:08,100 --> 00:14:10,349 whether to to actually 386 00:14:10,350 --> 00:14:12,449 restart the demon or if maybe 387 00:14:12,450 --> 00:14:14,519 nothing changed on the system and it can 388 00:14:14,520 --> 00:14:17,399 just leave the existing instance running. 389 00:14:17,400 --> 00:14:19,559 And this fits into a pattern that 390 00:14:19,560 --> 00:14:21,899 we now keep repeating in many 391 00:14:21,900 --> 00:14:23,879 of the things that we do, which is that 392 00:14:23,880 --> 00:14:26,009 we merged the code path for loading 393 00:14:26,010 --> 00:14:27,869 the configuration and for reloading. 394 00:14:27,870 --> 00:14:30,269 It becomes a big problem with many 395 00:14:30,270 --> 00:14:32,519 of the existing pieces 396 00:14:32,520 --> 00:14:33,689 of software that we found. 397 00:14:33,690 --> 00:14:36,209 As if they have support for reloading 398 00:14:36,210 --> 00:14:38,399 the configuration, it's usually only 399 00:14:38,400 --> 00:14:40,049 added as an afterthought. 400 00:14:40,050 --> 00:14:42,389 And it means that this code 401 00:14:42,390 --> 00:14:44,969 path is usually not as well tested 402 00:14:44,970 --> 00:14:46,349 as other code parts. 403 00:14:46,350 --> 00:14:49,199 And if somebody adds new features, 404 00:14:49,200 --> 00:14:51,359 it's so easy to forget to add them to the 405 00:14:51,360 --> 00:14:53,399 reload path after adding it to the load 406 00:14:53,400 --> 00:14:55,319 path. This is something that we're 407 00:14:55,320 --> 00:14:57,509 basically avoiding by design to to 408 00:14:57,510 --> 00:14:59,669 make sure that if if people add 409 00:14:59,670 --> 00:15:01,469 something and we do have many people in 410 00:15:01,470 --> 00:15:03,899 the community that know scripting fairly 411 00:15:03,900 --> 00:15:05,699 well and that can tweak existing source 412 00:15:05,700 --> 00:15:07,679 codes, they don't always have a good 413 00:15:07,680 --> 00:15:09,839 overview of how the entire system is 414 00:15:09,840 --> 00:15:11,489 built. And we want to make sure that if 415 00:15:11,490 --> 00:15:14,249 such people come and add features, 416 00:15:14,250 --> 00:15:15,899 they should do it in a way that if they 417 00:15:15,900 --> 00:15:18,029 tested and it works, that 418 00:15:18,030 --> 00:15:20,279 other things, more complex things like 419 00:15:20,280 --> 00:15:23,189 configuration, reload, are handled well, 420 00:15:23,190 --> 00:15:24,869 are handled properly as well. 421 00:15:24,870 --> 00:15:26,969 So they don't have to worry about 422 00:15:26,970 --> 00:15:28,859 too many side effects of the changes that 423 00:15:28,860 --> 00:15:29,860 I make. 424 00:15:31,040 --> 00:15:33,229 And we we are also 425 00:15:33,230 --> 00:15:35,629 working on configuration validation 426 00:15:35,630 --> 00:15:37,979 in the back end, because with 427 00:15:37,980 --> 00:15:40,339 the traditional firmware that we had, 428 00:15:40,340 --> 00:15:42,799 we had one web interface that supported 429 00:15:42,800 --> 00:15:45,979 automated updates to configuration, 430 00:15:45,980 --> 00:15:47,929 and it usually did all the work of 431 00:15:47,930 --> 00:15:49,429 keeping track of what needs to be 432 00:15:49,430 --> 00:15:51,169 restarted or what needs to be done to 433 00:15:51,170 --> 00:15:53,839 apply the configuration by itself, 434 00:15:53,840 --> 00:15:55,579 which is way too complex. 435 00:15:55,580 --> 00:15:58,039 If we if you want to have managed 436 00:15:58,040 --> 00:16:00,109 networks where you have a central piece 437 00:16:00,110 --> 00:16:01,699 of software that has a database of the 438 00:16:01,700 --> 00:16:03,769 configuration of all the devices 439 00:16:03,770 --> 00:16:05,539 and you want to support something like 440 00:16:05,540 --> 00:16:07,969 that to or you have things 441 00:16:07,970 --> 00:16:10,219 like a TR sixty nine client which 442 00:16:10,220 --> 00:16:12,379 is used by ISPs to automatically 443 00:16:12,380 --> 00:16:14,209 configure the routers, want to make sure 444 00:16:14,210 --> 00:16:16,699 that pieces of software like this 445 00:16:16,700 --> 00:16:18,499 don't really have to worry about the 446 00:16:18,500 --> 00:16:20,689 intricacies of what needs to be done 447 00:16:20,690 --> 00:16:22,909 after the configuration changed. 448 00:16:22,910 --> 00:16:25,009 So we're doing that all in a single place 449 00:16:25,010 --> 00:16:26,899 and that just makes it easier for 450 00:16:26,900 --> 00:16:28,009 everybody to deal with. 451 00:16:29,270 --> 00:16:31,879 And actually, the Web interface itself 452 00:16:31,880 --> 00:16:34,129 also is also seeing some very big changes 453 00:16:34,130 --> 00:16:36,679 right now because with 454 00:16:36,680 --> 00:16:38,869 the bus service, you can you 455 00:16:38,870 --> 00:16:41,419 can basically add and a new API 456 00:16:41,420 --> 00:16:43,669 to any piece of software in 10 457 00:16:43,670 --> 00:16:45,799 minutes with or if 458 00:16:45,800 --> 00:16:48,019 it's implemented in C with very little 459 00:16:48,020 --> 00:16:50,269 effort. And you can use that that 460 00:16:50,270 --> 00:16:52,939 API from anything running on the system. 461 00:16:52,940 --> 00:16:55,099 So it makes sense to decide that 462 00:16:55,100 --> 00:16:57,529 you may want to have things running 463 00:16:57,530 --> 00:16:59,929 in the browser that talk to components 464 00:16:59,930 --> 00:17:01,039 on the system. 465 00:17:01,040 --> 00:17:03,079 And it's always annoying if whenever you 466 00:17:03,080 --> 00:17:04,608 want to do something like that, you have 467 00:17:04,609 --> 00:17:06,439 to create a new API. 468 00:17:06,440 --> 00:17:08,419 You have to create, for instance, the CGI 469 00:17:08,420 --> 00:17:10,519 script to to do the 470 00:17:10,520 --> 00:17:12,649 actual talking with the system servers. 471 00:17:12,650 --> 00:17:15,078 So we decided we can give 472 00:17:15,079 --> 00:17:18,078 the browser direct access to things 473 00:17:18,079 --> 00:17:20,598 behind you. But running on the system, 474 00:17:20,599 --> 00:17:22,649 of course, there's security concerns for 475 00:17:22,650 --> 00:17:24,409 that as well. But we decided we can 476 00:17:24,410 --> 00:17:26,719 handle all that simply by white listing. 477 00:17:26,720 --> 00:17:28,789 The Web browser can connect, can get 478 00:17:28,790 --> 00:17:30,979 a token and the router 479 00:17:30,980 --> 00:17:32,839 side can decide, OK, this browser may 480 00:17:32,840 --> 00:17:34,459 talk to these and these and these things 481 00:17:34,460 --> 00:17:36,649 running on the system and nothing 482 00:17:36,650 --> 00:17:37,609 else. 483 00:17:37,610 --> 00:17:39,799 And this just cuts down 484 00:17:39,800 --> 00:17:41,899 the number of unnecessary abstraction 485 00:17:41,900 --> 00:17:43,909 layers that you need in order to get code 486 00:17:43,910 --> 00:17:46,339 running. So that just makes 487 00:17:46,340 --> 00:17:48,409 the code smaller, more high level 488 00:17:48,410 --> 00:17:50,569 and easier to use as well, which I think 489 00:17:50,570 --> 00:17:51,590 is a pretty good tradeoff. 490 00:17:53,860 --> 00:17:56,409 So we also focused a lot on 491 00:17:56,410 --> 00:17:59,169 our IPV six integration efforts, 492 00:17:59,170 --> 00:18:01,479 we initially had things like 493 00:18:01,480 --> 00:18:03,939 our DVD running on the system, 494 00:18:03,940 --> 00:18:05,679 which is used by normal Linux 495 00:18:05,680 --> 00:18:07,869 distributions, and we had some 496 00:18:07,870 --> 00:18:09,519 other components from regular Linux 497 00:18:09,520 --> 00:18:10,959 distributions as well. 498 00:18:10,960 --> 00:18:13,089 But we noticed that not only are these 499 00:18:13,090 --> 00:18:15,189 things very big, they're often 500 00:18:15,190 --> 00:18:17,319 not very standard compliant as well, 501 00:18:17,320 --> 00:18:19,449 at least in the corner cases. 502 00:18:19,450 --> 00:18:21,489 And they're really hard to integrate with 503 00:18:21,490 --> 00:18:23,559 the rest of the system because all these 504 00:18:23,560 --> 00:18:25,899 components are typically designed to have 505 00:18:25,900 --> 00:18:28,149 their own kind of APIs, their 506 00:18:28,150 --> 00:18:29,589 own config files. 507 00:18:29,590 --> 00:18:31,749 And there's not not much thought 508 00:18:31,750 --> 00:18:34,389 put into making these things integrate 509 00:18:34,390 --> 00:18:36,609 well with another system that may 510 00:18:36,610 --> 00:18:39,339 have a slightly different design. 511 00:18:39,340 --> 00:18:41,769 So we basically wrote new implementations 512 00:18:41,770 --> 00:18:44,169 from scratch. We are have our own 513 00:18:44,170 --> 00:18:46,479 DHC six and advertisement 514 00:18:46,480 --> 00:18:48,549 client. We decided to to 515 00:18:48,550 --> 00:18:50,679 handle all that in USERSPACE instead of 516 00:18:50,680 --> 00:18:53,259 letting the kernel code do its thing, 517 00:18:53,260 --> 00:18:54,999 just to make sure that we can track all 518 00:18:55,000 --> 00:18:56,979 the prefixes that we get. 519 00:18:56,980 --> 00:18:58,779 We can we can make sure that the kernel 520 00:18:58,780 --> 00:19:00,939 does not do weird things that mess up 521 00:19:00,940 --> 00:19:03,399 the routing tables, which we also manage 522 00:19:03,400 --> 00:19:05,499 in a central piece of software. 523 00:19:05,500 --> 00:19:07,149 And we want to make sure that if you if 524 00:19:07,150 --> 00:19:09,099 you connect a router and you want to run 525 00:19:09,100 --> 00:19:11,529 it as a regular IPV six order 526 00:19:11,530 --> 00:19:13,839 and you get a prefix, then that prefix 527 00:19:13,840 --> 00:19:16,119 is automatically redistributed 528 00:19:16,120 --> 00:19:18,219 to other parts of the network if you 529 00:19:18,220 --> 00:19:19,929 want to. And if you specify that in the 530 00:19:19,930 --> 00:19:22,419 configuration so you don't have to 531 00:19:22,420 --> 00:19:24,639 know in advance too much about 532 00:19:24,640 --> 00:19:26,499 what the setup is going to be, you can 533 00:19:26,500 --> 00:19:28,569 just say, OK, if I'm getting a prefix and 534 00:19:28,570 --> 00:19:30,879 just redistributed to LAN or 535 00:19:30,880 --> 00:19:33,189 you have multiple networks 536 00:19:33,190 --> 00:19:35,079 on different interfaces and you just want 537 00:19:35,080 --> 00:19:37,059 to set up some routing between them. 538 00:19:37,060 --> 00:19:38,799 These are things that with the typical 539 00:19:38,800 --> 00:19:41,049 Linux distribution, it's it's always 540 00:19:41,050 --> 00:19:41,979 a bit of a hassle. 541 00:19:41,980 --> 00:19:43,779 You first have to figure out what what 542 00:19:43,780 --> 00:19:46,179 config files to use and what services 543 00:19:46,180 --> 00:19:48,579 to run. And we want to make sure that 544 00:19:48,580 --> 00:19:50,229 most of these things are really handled 545 00:19:50,230 --> 00:19:51,249 well by default. 546 00:19:52,790 --> 00:19:55,159 And we also handled the whole 547 00:19:55,160 --> 00:19:57,829 CPV sex aspect as a as a server, 548 00:19:57,830 --> 00:20:00,649 we didn't find any good 549 00:20:00,650 --> 00:20:02,929 CPV six servers that fit into the space 550 00:20:02,930 --> 00:20:05,329 constraints of a typical router 551 00:20:05,330 --> 00:20:07,459 because we still run on devices that have 552 00:20:07,460 --> 00:20:09,559 four megabytes of flash and thirty 553 00:20:09,560 --> 00:20:11,149 two megabytes of RAM. 554 00:20:11,150 --> 00:20:13,219 And if we have to waste something 555 00:20:13,220 --> 00:20:15,199 like four hundred five hundred kilobytes 556 00:20:15,200 --> 00:20:17,779 just for a simple HP six server, 557 00:20:17,780 --> 00:20:20,089 maybe just because it needs a particular 558 00:20:20,090 --> 00:20:22,369 SSL library, then that's really a waste 559 00:20:22,370 --> 00:20:23,609 of precious space. 560 00:20:23,610 --> 00:20:25,489 And the more code you have, the harder it 561 00:20:25,490 --> 00:20:27,289 gets to review all of this. 562 00:20:27,290 --> 00:20:29,479 So with the security implications 563 00:20:29,480 --> 00:20:31,609 of these pieces of software, it's good 564 00:20:31,610 --> 00:20:33,499 to have less code to make sure that 565 00:20:33,500 --> 00:20:35,539 people can actually be validated at some 566 00:20:35,540 --> 00:20:36,540 point. 567 00:20:38,950 --> 00:20:41,349 And as I mentioned earlier, we're 568 00:20:41,350 --> 00:20:43,539 also working on a new kind 569 00:20:43,540 --> 00:20:45,699 of Web interface where 570 00:20:45,700 --> 00:20:47,829 we previously had 571 00:20:47,830 --> 00:20:50,109 our Web interface written in Lua 572 00:20:50,110 --> 00:20:52,089 and we had some very complex templating 573 00:20:52,090 --> 00:20:54,309 set up. So the router site was 574 00:20:54,310 --> 00:20:56,439 actually generating HTML code 575 00:20:56,440 --> 00:20:58,899 on the fly with normal forms 576 00:20:58,900 --> 00:21:00,219 and things like that. 577 00:21:00,220 --> 00:21:02,679 So pretty much Web 1.0 578 00:21:02,680 --> 00:21:03,909 stuff. 579 00:21:03,910 --> 00:21:06,159 So we decided we want to migrate this 580 00:21:06,160 --> 00:21:08,739 incrementally with access 581 00:21:08,740 --> 00:21:11,079 to to much of the system 582 00:21:11,080 --> 00:21:13,179 through the Hubert's API, 583 00:21:13,180 --> 00:21:15,249 through adjacent IPCA, that we can 584 00:21:15,250 --> 00:21:17,379 actually put a lot of the complex 585 00:21:17,380 --> 00:21:20,089 logic that typically comprises 586 00:21:20,090 --> 00:21:22,179 the user interface completely on the 587 00:21:22,180 --> 00:21:24,219 client side and get the nice additional 588 00:21:24,220 --> 00:21:26,589 benefit of allowing people 589 00:21:26,590 --> 00:21:29,139 with no experience with embedded devices 590 00:21:29,140 --> 00:21:31,539 to come up with their own eyes 591 00:21:31,540 --> 00:21:33,609 simply by eventually 592 00:21:33,610 --> 00:21:35,979 creating a documented, limited 593 00:21:35,980 --> 00:21:38,139 set of APIs that you can use to 594 00:21:38,140 --> 00:21:39,879 do pretty much everything interesting 595 00:21:39,880 --> 00:21:40,959 with the router. 596 00:21:40,960 --> 00:21:42,819 And then you have some normal Web 597 00:21:42,820 --> 00:21:45,399 developers that can just look at this API 598 00:21:45,400 --> 00:21:46,779 and be mostly familiar with it. 599 00:21:46,780 --> 00:21:48,849 Because, Jason, our PC 600 00:21:48,850 --> 00:21:50,949 is fairly common in 601 00:21:50,950 --> 00:21:53,619 some areas of Web development 602 00:21:53,620 --> 00:21:55,509 and they can create all this by 603 00:21:55,510 --> 00:21:57,579 themselves because if you look at the 604 00:21:57,580 --> 00:21:59,769 landscape of available developers, 605 00:21:59,770 --> 00:22:01,899 there aren't that many that no 606 00:22:01,900 --> 00:22:03,099 embedded systems. 607 00:22:03,100 --> 00:22:05,319 Well, and no web development well 608 00:22:05,320 --> 00:22:07,479 and still want to do web development 609 00:22:10,130 --> 00:22:11,130 in. 610 00:22:15,150 --> 00:22:17,459 So the way that we set up the system, 611 00:22:17,460 --> 00:22:19,739 it makes things actually much 612 00:22:19,740 --> 00:22:22,049 faster because there is a lot of work 613 00:22:22,050 --> 00:22:24,809 involved in templating HTML 614 00:22:24,810 --> 00:22:27,299 and even the mobile devices 615 00:22:27,300 --> 00:22:29,429 are getting much faster with JavaScript 616 00:22:29,430 --> 00:22:31,679 engines. So we might as well just use 617 00:22:31,680 --> 00:22:33,719 all that processing power to create 618 00:22:33,720 --> 00:22:35,789 better looking and better working guys 619 00:22:35,790 --> 00:22:38,099 and add more modularity to all of this 620 00:22:39,150 --> 00:22:41,469 and just free up resources on the router 621 00:22:41,470 --> 00:22:43,979 side where because the space constraints 622 00:22:43,980 --> 00:22:45,979 are still pretty tough in some places. 623 00:22:50,050 --> 00:22:52,119 And again, we came up with a 624 00:22:52,120 --> 00:22:54,399 fitting name, I think, for 625 00:22:54,400 --> 00:22:56,709 the next release that we're working 626 00:22:56,710 --> 00:22:58,809 on, because I think in many 627 00:22:58,810 --> 00:23:01,449 in many areas we're breaking new ground 628 00:23:01,450 --> 00:23:03,609 in terms of what a 629 00:23:03,610 --> 00:23:05,709 what a typical router 630 00:23:05,710 --> 00:23:07,119 design looks like. 631 00:23:07,120 --> 00:23:09,339 And we're breaking a lot of barriers 632 00:23:09,340 --> 00:23:11,499 of existing limitations of what 633 00:23:11,500 --> 00:23:13,959 the routers do and freeing 634 00:23:13,960 --> 00:23:16,029 ourselves from much of the structure of 635 00:23:16,030 --> 00:23:18,339 of the legacy devices where 636 00:23:18,340 --> 00:23:20,109 we already, I think, did a pretty good 637 00:23:20,110 --> 00:23:22,419 job of getting rid of existing 638 00:23:22,420 --> 00:23:24,789 structures and existing design patterns. 639 00:23:24,790 --> 00:23:27,009 But it's time to to come up with 640 00:23:27,010 --> 00:23:29,529 our own coherent set of software. 641 00:23:29,530 --> 00:23:31,599 So I think the the release 642 00:23:31,600 --> 00:23:33,099 name reflects that nicely. 643 00:23:34,520 --> 00:23:36,759 And of course, with all of these names 644 00:23:36,760 --> 00:23:39,079 there, they were legitimate cocktails and 645 00:23:39,080 --> 00:23:41,179 you can enjoy them as well once you're 646 00:23:41,180 --> 00:23:42,349 done with your other work. 647 00:23:46,350 --> 00:23:48,719 So in the third part of the talk, 648 00:23:48,720 --> 00:23:51,839 I'd like to talk a bit more about 649 00:23:51,840 --> 00:23:53,969 what affects the open art 650 00:23:53,970 --> 00:23:55,859 project had on the rest of the industry 651 00:23:55,860 --> 00:23:58,109 or how the rest of the industry 652 00:23:58,110 --> 00:24:00,389 influenced the way that we work 653 00:24:00,390 --> 00:24:01,390 as well. 654 00:24:01,950 --> 00:24:04,319 When the art 50 Fauji 655 00:24:04,320 --> 00:24:06,419 was still somewhat popular, but it 656 00:24:06,420 --> 00:24:08,909 was already losing in popularity compared 657 00:24:08,910 --> 00:24:10,979 to other devices, especially with 658 00:24:10,980 --> 00:24:12,599 a focus shift away from the Broadcom 659 00:24:12,600 --> 00:24:13,619 platforms. 660 00:24:13,620 --> 00:24:16,079 We actually had some some talks with 661 00:24:17,160 --> 00:24:19,439 some representatives of lynxes. 662 00:24:19,440 --> 00:24:21,809 I think they decided to send us some 663 00:24:21,810 --> 00:24:23,909 marketing people and they basically 664 00:24:23,910 --> 00:24:26,339 asked us the question like, why 665 00:24:26,340 --> 00:24:28,169 is our product popular? 666 00:24:28,170 --> 00:24:29,609 They noticed that there was a lot of 667 00:24:29,610 --> 00:24:32,399 popularity attached to the 50 Forgy, 668 00:24:32,400 --> 00:24:34,589 but they did not understand 669 00:24:34,590 --> 00:24:35,549 where it came from. 670 00:24:35,550 --> 00:24:37,859 And they desperately wanted to build 671 00:24:37,860 --> 00:24:39,629 on that success and create another 672 00:24:39,630 --> 00:24:41,699 product just like it that had had 673 00:24:41,700 --> 00:24:42,700 the same success. 674 00:24:43,680 --> 00:24:45,899 But the talks broke down pretty 675 00:24:45,900 --> 00:24:48,149 quickly because they said they didn't 676 00:24:48,150 --> 00:24:50,069 understand. That's actually that's 677 00:24:50,070 --> 00:24:53,309 actually a diverse set of communities 678 00:24:53,310 --> 00:24:54,749 that do different things with these 679 00:24:54,750 --> 00:24:57,089 devices and that the 680 00:24:57,090 --> 00:24:59,189 the whole open source aspect is very 681 00:24:59,190 --> 00:25:00,539 important as well. 682 00:25:00,540 --> 00:25:01,919 And then they 683 00:25:03,060 --> 00:25:05,339 they eventually came up with a device 684 00:25:05,340 --> 00:25:07,409 that they called the 685 00:25:07,410 --> 00:25:09,869 successor of the 50 40. 686 00:25:09,870 --> 00:25:11,609 Well, not officially, but they told us 687 00:25:11,610 --> 00:25:13,469 that this is the product that they came 688 00:25:13,470 --> 00:25:15,569 up with based on the input that they 689 00:25:15,570 --> 00:25:17,879 got. And we 690 00:25:17,880 --> 00:25:19,979 were pretty let down, pretty much 691 00:25:19,980 --> 00:25:22,079 let down by it, because when 692 00:25:22,080 --> 00:25:24,119 when they initially released it, it was 693 00:25:24,120 --> 00:25:26,309 full of proprietary code for which we 694 00:25:26,310 --> 00:25:28,919 had no replacement at that point in time. 695 00:25:28,920 --> 00:25:31,079 And they didn't do much 696 00:25:31,080 --> 00:25:33,359 in terms of efforts for opening 697 00:25:33,360 --> 00:25:34,360 up that code. 698 00:25:35,220 --> 00:25:37,619 And so it took quite a while 699 00:25:37,620 --> 00:25:39,689 to for for the community to 700 00:25:39,690 --> 00:25:41,519 slightly adopt this device. 701 00:25:41,520 --> 00:25:43,769 But progress was too slow for it to 702 00:25:43,770 --> 00:25:45,899 to gain much popularity. 703 00:25:45,900 --> 00:25:48,269 And in addition to that, they used 704 00:25:48,270 --> 00:25:51,239 some chips that were rather quirky 705 00:25:51,240 --> 00:25:53,470 and that didn't help adoption either. 706 00:25:54,930 --> 00:25:57,089 So since those talks, we've 707 00:25:57,090 --> 00:25:59,429 also seen some some strange adoption 708 00:25:59,430 --> 00:26:01,799 of open heart by a few Odoms. 709 00:26:01,800 --> 00:26:03,869 They basically took the system and 710 00:26:03,870 --> 00:26:06,419 we only figured this out by looking into 711 00:26:06,420 --> 00:26:08,999 tarballs of of routers 712 00:26:09,000 --> 00:26:11,279 and looking at where they came from 713 00:26:11,280 --> 00:26:13,709 and what company is mentioned in 714 00:26:13,710 --> 00:26:15,449 the actual source code, because the 715 00:26:15,450 --> 00:26:17,429 router manufacturers typically don't 716 00:26:17,430 --> 00:26:19,049 develop the pieces of hardware 717 00:26:19,050 --> 00:26:20,549 themselves. They just tell the 718 00:26:20,550 --> 00:26:23,039 requirements that they have to odoms 719 00:26:23,040 --> 00:26:25,049 and give them some ideas of what the 720 00:26:25,050 --> 00:26:27,089 branding is going to look like. 721 00:26:27,090 --> 00:26:29,129 Give them some some nice graphics and 722 00:26:29,130 --> 00:26:31,709 some nice design rules, 723 00:26:31,710 --> 00:26:33,689 but don't do the actual development 724 00:26:33,690 --> 00:26:35,999 themselves. So it's up to the Odoms 725 00:26:36,000 --> 00:26:38,489 to to create the working products. 726 00:26:38,490 --> 00:26:40,769 And as we can see in 727 00:26:40,770 --> 00:26:42,839 all sorts releases, they really don't 728 00:26:42,840 --> 00:26:44,939 have a lot of experience with that. 729 00:26:44,940 --> 00:26:47,399 And so we've seen some Odoms 730 00:26:47,400 --> 00:26:48,899 adopt open. 731 00:26:48,900 --> 00:26:51,419 But instead of reusing the components 732 00:26:51,420 --> 00:26:53,579 that we made, they actually took 733 00:26:53,580 --> 00:26:55,769 most of the the 734 00:26:55,770 --> 00:26:58,199 properly working and stable parts 735 00:26:58,200 --> 00:27:00,509 and decided for some reason to replace 736 00:27:00,510 --> 00:27:01,529 those parts. 737 00:27:01,530 --> 00:27:03,899 And some of the other parts 738 00:27:03,900 --> 00:27:05,309 that they kept were actually the ones 739 00:27:05,310 --> 00:27:07,409 that we consider to be more fragile. 740 00:27:07,410 --> 00:27:09,719 So in the end, they try to recreate 741 00:27:09,720 --> 00:27:11,999 their own system, but use 742 00:27:12,000 --> 00:27:13,889 it only as a built system. 743 00:27:13,890 --> 00:27:16,019 And the the product 744 00:27:16,020 --> 00:27:17,819 or the resulting product looked really 745 00:27:17,820 --> 00:27:20,009 horrible in terms of code structure. 746 00:27:20,010 --> 00:27:22,049 And it really shined through that. 747 00:27:22,050 --> 00:27:24,149 They did not understand what they 748 00:27:24,150 --> 00:27:26,339 were working with, but they also had no 749 00:27:26,340 --> 00:27:28,799 intention of contacting us or building 750 00:27:28,800 --> 00:27:31,019 a working relationship with us because we 751 00:27:31,020 --> 00:27:32,279 could have told them many things that 752 00:27:32,280 --> 00:27:33,809 would have saved them a lot of trouble 753 00:27:33,810 --> 00:27:36,149 and re re implementing the code. 754 00:27:36,150 --> 00:27:38,609 But they they decided not talking 755 00:27:38,610 --> 00:27:40,709 is better because they always it was want 756 00:27:40,710 --> 00:27:43,289 to build their own competitive advantages 757 00:27:43,290 --> 00:27:45,539 and which in the usually 758 00:27:45,540 --> 00:27:47,490 in the end end up being disadvantages. 759 00:27:49,440 --> 00:27:51,569 So we decided at some point we need 760 00:27:51,570 --> 00:27:53,849 to go higher up the food chain because 761 00:27:53,850 --> 00:27:55,259 Odoms, they don't understand the 762 00:27:55,260 --> 00:27:57,689 technology well and in many cases 763 00:27:57,690 --> 00:27:59,789 they have to rely on the software 764 00:27:59,790 --> 00:28:01,709 that they get from the chip manufacturers 765 00:28:01,710 --> 00:28:03,599 because otherwise they're going to have a 766 00:28:03,600 --> 00:28:05,699 lot of trouble getting support for 767 00:28:05,700 --> 00:28:07,499 the things that they built. 768 00:28:07,500 --> 00:28:09,689 And if the chip manufacturers 769 00:28:09,690 --> 00:28:12,169 luckily are so much fewer than the ODM. 770 00:28:12,170 --> 00:28:14,369 So if we can get our software injected 771 00:28:14,370 --> 00:28:16,559 there, it easily trickles 772 00:28:16,560 --> 00:28:18,869 down to the rest of the market. 773 00:28:18,870 --> 00:28:21,329 So we actually had or have 774 00:28:21,330 --> 00:28:23,369 some working relationships with a few of 775 00:28:23,370 --> 00:28:25,499 them which have 776 00:28:25,500 --> 00:28:27,569 other or other 777 00:28:27,570 --> 00:28:29,549 kinds of difficulties, depending on which 778 00:28:29,550 --> 00:28:31,169 vendor, if you're talking about. 779 00:28:31,170 --> 00:28:33,449 So we had some some 780 00:28:33,450 --> 00:28:35,849 work done in collaboration with Qualcomm. 781 00:28:35,850 --> 00:28:37,979 Atheros Lanting also 782 00:28:37,980 --> 00:28:40,439 decided that they want to abandon 783 00:28:40,440 --> 00:28:43,349 their own SDK and use OpenTable instead. 784 00:28:43,350 --> 00:28:45,659 And we're also now starting to 785 00:28:45,660 --> 00:28:47,429 get a bit more contact with mediatheque 786 00:28:47,430 --> 00:28:48,430 involving. 787 00:28:50,850 --> 00:28:53,369 So I want to talk a bit about what 788 00:28:53,370 --> 00:28:55,409 the issues are in collaboration with 789 00:28:55,410 --> 00:28:56,639 those chip vendors. 790 00:28:56,640 --> 00:28:59,099 I think one of the most obvious one ones 791 00:28:59,100 --> 00:29:01,889 is a complete difference in motivation, 792 00:29:01,890 --> 00:29:03,599 given that we've been doing this for a 793 00:29:03,600 --> 00:29:05,729 few years and we decide we 794 00:29:05,730 --> 00:29:08,789 want to continue this for a while longer. 795 00:29:08,790 --> 00:29:11,369 One of our main focus is code quality 796 00:29:11,370 --> 00:29:13,499 and long term health of the project. 797 00:29:13,500 --> 00:29:15,869 I think this is a large part of 798 00:29:15,870 --> 00:29:19,019 what made the project itself successful. 799 00:29:19,020 --> 00:29:21,119 But this is something that you see 800 00:29:21,120 --> 00:29:23,219 isn't going on very much inside 801 00:29:23,220 --> 00:29:25,049 big companies. 802 00:29:25,050 --> 00:29:27,149 One thing I see over and over 803 00:29:27,150 --> 00:29:28,949 again is there's always a very, very 804 00:29:28,950 --> 00:29:31,049 strong focus on getting 805 00:29:31,050 --> 00:29:33,509 the next product out as fast as possible 806 00:29:33,510 --> 00:29:35,909 and making it as cheap as possible. 807 00:29:35,910 --> 00:29:38,099 So cost reduction and time to market 808 00:29:38,100 --> 00:29:39,929 are the primary concern. 809 00:29:39,930 --> 00:29:42,089 And it's very hard to to actually go 810 00:29:42,090 --> 00:29:44,339 to a company and tell them we have 811 00:29:44,340 --> 00:29:46,289 this thing and we we're focused on code 812 00:29:46,290 --> 00:29:47,669 quality. And this is going to make your 813 00:29:47,670 --> 00:29:49,889 long term business very successful 814 00:29:49,890 --> 00:29:52,259 if all they're focused on right now is 815 00:29:52,260 --> 00:29:54,479 just barely getting the next product out 816 00:29:54,480 --> 00:29:56,579 the door and then try to figure 817 00:29:56,580 --> 00:29:59,069 out another plan for the future. 818 00:29:59,070 --> 00:30:00,899 But the main issue with their approach is 819 00:30:00,900 --> 00:30:02,969 if they get the product out the door, 820 00:30:02,970 --> 00:30:04,949 then they immediately after get the 821 00:30:04,950 --> 00:30:06,509 pressure to get the next product out the 822 00:30:06,510 --> 00:30:08,609 door. So there's never any time left 823 00:30:08,610 --> 00:30:10,799 to really focus on the long term overall 824 00:30:10,800 --> 00:30:11,919 health. 825 00:30:11,920 --> 00:30:14,279 And another another 826 00:30:14,280 --> 00:30:16,259 very big issue with these companies is 827 00:30:16,260 --> 00:30:18,419 there's always a lot of red tape and 828 00:30:18,420 --> 00:30:19,919 bureaucracy going on. 829 00:30:19,920 --> 00:30:22,049 The bigger the company, the more of 830 00:30:22,050 --> 00:30:23,459 it we get. 831 00:30:23,460 --> 00:30:25,679 And it's always very hard 832 00:30:25,680 --> 00:30:27,419 to convince them to do things in a 833 00:30:27,420 --> 00:30:29,849 particular way when they have lots 834 00:30:29,850 --> 00:30:32,129 of reasons to to not do 835 00:30:32,130 --> 00:30:33,779 what we're saying, which they call 836 00:30:33,780 --> 00:30:34,799 company policy. 837 00:30:38,020 --> 00:30:40,359 So this this pretty much fits in 838 00:30:40,360 --> 00:30:42,459 with another big aspect here, which is 839 00:30:42,460 --> 00:30:44,439 the licensing and the intellectual 840 00:30:44,440 --> 00:30:46,509 property issues, in 841 00:30:46,510 --> 00:30:48,699 many cases they they 842 00:30:48,700 --> 00:30:51,129 want to have their competitive advantages 843 00:30:51,130 --> 00:30:53,199 and they realize that 844 00:30:53,200 --> 00:30:55,389 hardware isn't isn't the only thing 845 00:30:55,390 --> 00:30:57,549 that can differentiate them so themselves 846 00:30:57,550 --> 00:30:58,629 on the market. 847 00:30:58,630 --> 00:30:59,719 And they 848 00:31:00,820 --> 00:31:02,919 they cannot always rely on 849 00:31:02,920 --> 00:31:05,109 price to or 850 00:31:05,110 --> 00:31:07,419 on competing on price to 851 00:31:07,420 --> 00:31:09,519 get their product sold, because 852 00:31:09,520 --> 00:31:11,679 then they reduce their profit a lot as 853 00:31:11,680 --> 00:31:13,749 well. So they decided if we're going 854 00:31:13,750 --> 00:31:15,339 to do this hardware, then we might as 855 00:31:15,340 --> 00:31:18,249 well just create some software advantages 856 00:31:18,250 --> 00:31:20,049 that will make sure that they only buy 857 00:31:20,050 --> 00:31:22,239 our product and not our competitors. 858 00:31:22,240 --> 00:31:23,769 There's only one problem with that. 859 00:31:23,770 --> 00:31:26,349 They aren't particularly good at creating 860 00:31:26,350 --> 00:31:28,569 software for their their hardware. 861 00:31:28,570 --> 00:31:30,969 And so this is also a big reason 862 00:31:30,970 --> 00:31:33,039 why they eventually decided to 863 00:31:33,040 --> 00:31:35,199 to talk to us because 864 00:31:35,200 --> 00:31:37,759 they realized that actually 865 00:31:37,760 --> 00:31:40,419 Odoms were bypassing 866 00:31:40,420 --> 00:31:42,519 their case and building 867 00:31:42,520 --> 00:31:44,649 something based on open warranty, 868 00:31:44,650 --> 00:31:46,899 even with the limitations attached, that 869 00:31:46,900 --> 00:31:49,359 they have more trouble getting support. 870 00:31:49,360 --> 00:31:51,489 So if their customers are doing things 871 00:31:51,490 --> 00:31:53,349 like that, there must be a pretty good 872 00:31:53,350 --> 00:31:54,520 reason for them to do it. 873 00:31:55,990 --> 00:31:58,329 And they I think they they often 874 00:31:58,330 --> 00:32:00,399 still don't understand the 875 00:32:00,400 --> 00:32:02,439 full scope of what's going on there. 876 00:32:02,440 --> 00:32:04,809 And a large part of this is, 877 00:32:04,810 --> 00:32:06,909 at least with some of the vendors that 878 00:32:06,910 --> 00:32:08,769 I've talked to, there are engineering 879 00:32:08,770 --> 00:32:10,899 resources and projects are 880 00:32:10,900 --> 00:32:13,209 controlled by marketing and 881 00:32:13,210 --> 00:32:15,099 they have the least understanding of 882 00:32:15,100 --> 00:32:16,960 what's going on on the technology side. 883 00:32:25,740 --> 00:32:27,399 But even aside from that, there's also 884 00:32:27,400 --> 00:32:29,529 development process issues inside the 885 00:32:29,530 --> 00:32:31,959 companies you have marketing 886 00:32:31,960 --> 00:32:34,299 that that allocates resources for various 887 00:32:34,300 --> 00:32:36,399 short term projects, but then 888 00:32:36,400 --> 00:32:38,679 they can't even get 889 00:32:38,680 --> 00:32:40,929 comparatively simple things right, 890 00:32:40,930 --> 00:32:42,070 like branching 891 00:32:43,360 --> 00:32:46,029 in one of the companies that 892 00:32:46,030 --> 00:32:47,959 did some some consulting work with. 893 00:32:47,960 --> 00:32:50,169 I noticed that they were doing all 894 00:32:50,170 --> 00:32:52,029 of their development in either and 895 00:32:52,030 --> 00:32:54,549 release branches or in customer branches. 896 00:32:54,550 --> 00:32:56,739 And then sometimes when they had a 897 00:32:56,740 --> 00:32:59,139 bit of time, they occasionally merged 898 00:32:59,140 --> 00:33:01,389 chunks of it to the main branch. 899 00:33:01,390 --> 00:33:03,519 But it meant that the main branch was 900 00:33:03,520 --> 00:33:06,099 never actually usable for anybody, 901 00:33:06,100 --> 00:33:08,169 and the merged conflicts kept 902 00:33:08,170 --> 00:33:09,279 getting bigger and bigger. 903 00:33:09,280 --> 00:33:11,349 So often they did mergers 904 00:33:11,350 --> 00:33:13,479 between individual release branches and 905 00:33:13,480 --> 00:33:15,489 mergers between individual customer 906 00:33:15,490 --> 00:33:16,479 branches. 907 00:33:16,480 --> 00:33:18,579 And there was nobody actually 908 00:33:18,580 --> 00:33:20,739 keeping track of a 909 00:33:20,740 --> 00:33:22,539 mainline development branch. 910 00:33:22,540 --> 00:33:24,609 And to make sure that features 911 00:33:24,610 --> 00:33:27,159 that are added once and in one branch 912 00:33:27,160 --> 00:33:29,709 actually kept in multiple branches 913 00:33:29,710 --> 00:33:31,959 means the people usually had 914 00:33:31,960 --> 00:33:34,479 to do the same work twice 915 00:33:34,480 --> 00:33:36,489 or even more times. 916 00:33:36,490 --> 00:33:39,459 And nobody was really paying attention 917 00:33:39,460 --> 00:33:41,889 anywhere where this code goes. 918 00:33:41,890 --> 00:33:44,589 And in some cases, we've even seen that, 919 00:33:44,590 --> 00:33:47,019 that they made multiple mainline 920 00:33:47,020 --> 00:33:49,029 branches based on different business 921 00:33:49,030 --> 00:33:51,189 units where I think 90 percent of 922 00:33:51,190 --> 00:33:52,749 the code was the same. 923 00:33:52,750 --> 00:33:55,119 But for some business units, they decided 924 00:33:55,120 --> 00:33:57,129 that they want to have a different 925 00:33:57,130 --> 00:33:58,269 directory layout. 926 00:33:58,270 --> 00:34:00,729 So they move files around and change 927 00:34:00,730 --> 00:34:01,809 the file names. 928 00:34:01,810 --> 00:34:04,509 And whenever they had to do mergers, 929 00:34:04,510 --> 00:34:06,729 they always had to manually mangle 930 00:34:06,730 --> 00:34:08,829 the changes to between the 931 00:34:08,830 --> 00:34:10,959 different branches to make sure that 932 00:34:10,960 --> 00:34:13,129 the layout somehow fits. 933 00:34:13,130 --> 00:34:15,189 And I don't I 934 00:34:15,190 --> 00:34:17,439 don't know why they did all this effort 935 00:34:17,440 --> 00:34:19,599 with pretty much no gain at 936 00:34:19,600 --> 00:34:21,879 all. And this was one of the companies 937 00:34:21,880 --> 00:34:24,129 that only have dysfunctional mainline 938 00:34:24,130 --> 00:34:25,899 branches. So all of the development was 939 00:34:25,900 --> 00:34:28,299 going on inside the customer branches, 940 00:34:28,300 --> 00:34:30,638 but they still needed multiple mainline 941 00:34:30,639 --> 00:34:32,529 branches that never really worked. 942 00:34:38,540 --> 00:34:40,638 But even aside from the chipset 943 00:34:40,639 --> 00:34:42,499 manufacturers, there's also other 944 00:34:42,500 --> 00:34:44,599 interesting related project 945 00:34:44,600 --> 00:34:45,739 activity going on. 946 00:34:47,239 --> 00:34:49,099 One of the most important ones is 947 00:34:49,100 --> 00:34:51,229 obviously upstream integration of our 948 00:34:51,230 --> 00:34:52,309 patches. 949 00:34:52,310 --> 00:34:54,709 We have several people working 950 00:34:54,710 --> 00:34:56,789 or working on their their target 951 00:34:56,790 --> 00:34:58,939 support and the for a particular 952 00:34:58,940 --> 00:35:00,049 system on CHIP. 953 00:35:00,050 --> 00:35:01,429 And most of the targets that we're 954 00:35:01,430 --> 00:35:03,679 working on are actually not 955 00:35:03,680 --> 00:35:05,569 Linux upstream integrated yet. 956 00:35:05,570 --> 00:35:07,579 So it makes sense for the same people 957 00:35:07,580 --> 00:35:10,069 that do the development inside the open 958 00:35:10,070 --> 00:35:12,349 project to also add mainlines 959 00:35:12,350 --> 00:35:14,299 support to these targets. 960 00:35:14,300 --> 00:35:16,579 And we we also tend to do 961 00:35:16,580 --> 00:35:18,949 the same with at least the 962 00:35:18,950 --> 00:35:21,289 packages that have accumulated many 963 00:35:21,290 --> 00:35:22,339 of the patches. 964 00:35:22,340 --> 00:35:24,919 For instance, I maintain the 965 00:35:24,920 --> 00:35:27,019 key driver inside of OpenTable 966 00:35:27,020 --> 00:35:29,119 and I typically do the development 967 00:35:29,120 --> 00:35:31,309 simultaneously for open heart and 968 00:35:31,310 --> 00:35:32,509 for upstream. 969 00:35:32,510 --> 00:35:34,709 So we want to make sure that in upstream 970 00:35:34,710 --> 00:35:37,249 we get or in open 971 00:35:37,250 --> 00:35:39,409 we get the changes that we make as fast 972 00:35:39,410 --> 00:35:41,479 as possible into the tree because 973 00:35:41,480 --> 00:35:43,099 we have a lot of active users that 974 00:35:43,100 --> 00:35:44,659 regularly check out our development 975 00:35:44,660 --> 00:35:47,139 releases. But we want to make sure that 976 00:35:47,140 --> 00:35:49,159 the big changes that we make don't go 977 00:35:49,160 --> 00:35:50,789 stale in our repository. 978 00:35:50,790 --> 00:35:53,059 So we're working on it on 979 00:35:53,060 --> 00:35:54,769 many things simultaneously in the 980 00:35:54,770 --> 00:35:55,959 upstream projects as well. 981 00:35:57,790 --> 00:35:59,739 And we have other interesting related 982 00:35:59,740 --> 00:36:02,049 projects, one of the biggest ones 983 00:36:02,050 --> 00:36:04,569 that has or or at least the ones, 984 00:36:04,570 --> 00:36:06,489 the one that has been with us for the 985 00:36:06,490 --> 00:36:08,679 longest period of time is 986 00:36:08,680 --> 00:36:10,749 the freephone project, which was an 987 00:36:10,750 --> 00:36:12,909 early adopter from from the 988 00:36:12,910 --> 00:36:13,659 old WRP. 989 00:36:13,660 --> 00:36:15,639 Fifty four time. 990 00:36:15,640 --> 00:36:17,949 They're building community mesh network 991 00:36:17,950 --> 00:36:18,849 projects. 992 00:36:18,850 --> 00:36:21,069 And of course they're using our system 993 00:36:21,070 --> 00:36:23,289 a lot because they're they're from that 994 00:36:23,290 --> 00:36:25,659 the building is open, WRP 995 00:36:25,660 --> 00:36:27,549 plus a few extra things. 996 00:36:27,550 --> 00:36:29,349 So we we've always had a very good 997 00:36:29,350 --> 00:36:31,539 relationship with that project and we get 998 00:36:31,540 --> 00:36:34,029 a lot of feedback from them because 999 00:36:34,030 --> 00:36:36,099 they do test many things that 1000 00:36:36,100 --> 00:36:38,589 other more simply use cases 1001 00:36:38,590 --> 00:36:39,939 usually don't get to test. 1002 00:36:42,450 --> 00:36:44,549 Which brings me to another 1003 00:36:44,550 --> 00:36:46,679 interesting project, I'm sure many 1004 00:36:46,680 --> 00:36:49,169 of you have heard of the buffer 1005 00:36:49,170 --> 00:36:51,719 problem where packets 1006 00:36:51,720 --> 00:36:54,299 accumulate delay over over 1007 00:36:54,300 --> 00:36:56,909 multiple hops in the Internet because 1008 00:36:56,910 --> 00:36:59,339 it's always cheaper to add more memory 1009 00:36:59,340 --> 00:37:01,559 than to actually fix the cueing things 1010 00:37:01,560 --> 00:37:03,119 or add more bandwidth. 1011 00:37:03,120 --> 00:37:05,639 So the buffer project 1012 00:37:05,640 --> 00:37:08,429 maintains its 1013 00:37:08,430 --> 00:37:10,799 it's a bit of a work of art, 1014 00:37:10,800 --> 00:37:13,589 but with strong collaboration 1015 00:37:13,590 --> 00:37:16,499 where they want to build a reference 1016 00:37:16,500 --> 00:37:18,629 router stack that fixes 1017 00:37:18,630 --> 00:37:20,939 the buffer load issues and is built 1018 00:37:20,940 --> 00:37:23,369 upon open and actually is used 1019 00:37:23,370 --> 00:37:25,559 to prototype many things that later 1020 00:37:25,560 --> 00:37:27,659 on make it into the open 1021 00:37:27,660 --> 00:37:28,829 art project. 1022 00:37:28,830 --> 00:37:31,289 And it's also doing a lot of research on 1023 00:37:31,290 --> 00:37:33,629 on IPV six routing 1024 00:37:33,630 --> 00:37:35,849 and how to put it into an 1025 00:37:35,850 --> 00:37:37,949 environment where you have multiple 1026 00:37:37,950 --> 00:37:40,379 routers and you don't have this one big 1027 00:37:40,380 --> 00:37:42,149 layer, two domain for everything. 1028 00:37:43,810 --> 00:37:46,209 And when I mentioned IPV six, 1029 00:37:46,210 --> 00:37:48,429 it's also worthwhile to mention 1030 00:37:48,430 --> 00:37:51,009 that there are two, 1031 00:37:51,010 --> 00:37:53,799 I think, competing IETF projects 1032 00:37:53,800 --> 00:37:55,869 that deal with IPV six routing 1033 00:37:55,870 --> 00:37:58,389 at home, which is Hypnotoad and home that 1034 00:37:58,390 --> 00:38:00,519 and it's nice to see that both of them 1035 00:38:00,520 --> 00:38:01,949 are based on open WRGA. 1036 00:38:05,930 --> 00:38:08,119 And yeah, this is pretty much 1037 00:38:08,120 --> 00:38:10,309 what I have for today, and I hope 1038 00:38:10,310 --> 00:38:11,839 you've brought some good questions for 1039 00:38:11,840 --> 00:38:12,840 me. 1040 00:38:25,560 --> 00:38:27,609 Hello, I'm engineer. 1041 00:38:27,610 --> 00:38:30,249 I know that the justices 1042 00:38:30,250 --> 00:38:32,919 makes makes a living, 1043 00:38:32,920 --> 00:38:35,469 so what is your suggestion, 1044 00:38:35,470 --> 00:38:37,539 suggestion to the companies 1045 00:38:37,540 --> 00:38:39,729 who want to have benefits 1046 00:38:39,730 --> 00:38:42,019 in the software design firm from 1047 00:38:42,020 --> 00:38:44,319 exact rules so that the customers buy 1048 00:38:44,320 --> 00:38:46,599 to get a higher price because it is 1049 00:38:46,600 --> 00:38:49,239 just the price, the faith argument. 1050 00:38:49,240 --> 00:38:50,889 Many companies don't have a chance, 1051 00:38:50,890 --> 00:38:53,049 especially here in Europe or whatever. 1052 00:38:53,050 --> 00:38:55,149 So what should they do to to 1053 00:38:55,150 --> 00:38:57,249 make the benefits and 1054 00:38:57,250 --> 00:38:59,859 the software some some extra widgets 1055 00:38:59,860 --> 00:39:02,139 with your way of open 1056 00:39:02,140 --> 00:39:03,250 source? But what should they do? 1057 00:39:04,570 --> 00:39:05,799 Very good question. Thanks. 1058 00:39:05,800 --> 00:39:08,199 So one of the suggestions that 1059 00:39:08,200 --> 00:39:10,569 that I keep making is to make sure 1060 00:39:10,570 --> 00:39:12,729 that you you split the development 1061 00:39:12,730 --> 00:39:14,949 in two parts so that you have one 1062 00:39:14,950 --> 00:39:17,109 part that takes care of the 1063 00:39:17,110 --> 00:39:19,209 individual project products that need to 1064 00:39:19,210 --> 00:39:20,529 be finished quickly. 1065 00:39:20,530 --> 00:39:22,539 But you also have a separate team which 1066 00:39:22,540 --> 00:39:24,759 can be made of a smaller 1067 00:39:24,760 --> 00:39:26,619 number of people with more technical 1068 00:39:26,620 --> 00:39:28,869 expertize to take care of the long term 1069 00:39:28,870 --> 00:39:31,119 health of the project so that whenever 1070 00:39:31,120 --> 00:39:33,009 you create a new product, you actually 1071 00:39:33,010 --> 00:39:35,259 start from the the latest 1072 00:39:35,260 --> 00:39:37,389 state of the long term health product 1073 00:39:37,390 --> 00:39:39,579 and then do everything you need to do 1074 00:39:39,580 --> 00:39:41,799 to get the product out and finished 1075 00:39:41,800 --> 00:39:42,789 quickly. 1076 00:39:42,790 --> 00:39:44,859 And then you can you can have the 1077 00:39:44,860 --> 00:39:47,169 long term health product or 1078 00:39:47,170 --> 00:39:49,629 project look at the changes 1079 00:39:49,630 --> 00:39:51,639 that the individual customer project's 1080 00:39:51,640 --> 00:39:53,859 made and just make sure that it's 1081 00:39:53,860 --> 00:39:55,989 all cleaned up, re architected 1082 00:39:55,990 --> 00:39:58,389 and fits into the overall long term 1083 00:39:58,390 --> 00:39:59,590 health of prospective. 1084 00:40:01,980 --> 00:40:03,989 I have another question. 1085 00:40:03,990 --> 00:40:06,159 You said that you do parallel in parallel 1086 00:40:06,160 --> 00:40:07,709 the development for some drivers, for the 1087 00:40:07,710 --> 00:40:10,169 mainline kernel and for poverty. 1088 00:40:10,170 --> 00:40:12,119 What are the challenges in converting the 1089 00:40:12,120 --> 00:40:14,219 drivers that are not in the upstream 1090 00:40:14,220 --> 00:40:15,509 kernels? 1091 00:40:15,510 --> 00:40:17,939 These are typically either things that 1092 00:40:17,940 --> 00:40:20,549 are too specialized 1093 00:40:20,550 --> 00:40:23,099 for the mainline kernel that don't really 1094 00:40:23,100 --> 00:40:25,109 or things that are simply not finished 1095 00:40:25,110 --> 00:40:26,129 yet. 1096 00:40:26,130 --> 00:40:28,649 It's typically always, 1097 00:40:28,650 --> 00:40:30,929 always a reason in terms of either 1098 00:40:30,930 --> 00:40:33,059 other mainline people will not like 1099 00:40:33,060 --> 00:40:35,369 this because sometimes it's a hack, 1100 00:40:35,370 --> 00:40:37,409 sometimes it's something that basically 1101 00:40:37,410 --> 00:40:39,599 only we need and other people 1102 00:40:39,600 --> 00:40:40,919 don't. 1103 00:40:40,920 --> 00:40:42,869 And sometimes it's just because something 1104 00:40:42,870 --> 00:40:44,879 is not finished, but it happens to work 1105 00:40:44,880 --> 00:40:46,619 well for for us. 1106 00:40:46,620 --> 00:40:47,620 Thank you. 1107 00:40:51,580 --> 00:40:54,129 One question about the acceleration, 1108 00:40:54,130 --> 00:40:55,509 lately, I've seen some Linux based 1109 00:40:55,510 --> 00:40:57,519 devices that have some sort of 1110 00:40:57,520 --> 00:40:59,799 acceleration of offloading engine 1111 00:40:59,800 --> 00:41:02,799 for IP routing or 1112 00:41:02,800 --> 00:41:03,909 firewalls. 1113 00:41:03,910 --> 00:41:05,859 Is it possible to support this in the 1114 00:41:05,860 --> 00:41:08,019 same way in ATI or is it 1115 00:41:08,020 --> 00:41:10,539 planned or is it even possible? 1116 00:41:10,540 --> 00:41:12,609 It's planned. It's something that I plan 1117 00:41:12,610 --> 00:41:15,379 on researching extensively next year. 1118 00:41:15,380 --> 00:41:17,559 I want to see if it's possible to 1119 00:41:17,560 --> 00:41:19,659 to integrate this properly with net 1120 00:41:19,660 --> 00:41:22,119 filter in a way that could possibly 1121 00:41:22,120 --> 00:41:23,919 be applied upstream. 1122 00:41:23,920 --> 00:41:26,289 But I still have to research 1123 00:41:26,290 --> 00:41:28,539 more about the side 1124 00:41:28,540 --> 00:41:30,549 effects of that because such changes will 1125 00:41:30,550 --> 00:41:32,559 be pretty intrusive and I need to make 1126 00:41:32,560 --> 00:41:34,359 sure that they don't hurt other normal 1127 00:41:34,360 --> 00:41:36,070 use cases inside mainline Linux. 1128 00:41:41,300 --> 00:41:43,459 Does open pretty 1129 00:41:43,460 --> 00:41:45,679 sane binaries, and I was wondering what 1130 00:41:45,680 --> 00:41:47,030 plans there might be for that. 1131 00:41:48,230 --> 00:41:50,579 No, we don't sign binaries yet. 1132 00:41:50,580 --> 00:41:52,639 We have to do 1133 00:41:52,640 --> 00:41:54,709 a lot of work on our release, 1134 00:41:54,710 --> 00:41:56,449 build infrastructure, which will happen 1135 00:41:56,450 --> 00:41:57,889 next year. 1136 00:41:57,890 --> 00:41:59,719 But I think one of the reasons why this 1137 00:41:59,720 --> 00:42:02,389 is not that important is because we 1138 00:42:02,390 --> 00:42:04,459 we can at least I consider the 1139 00:42:04,460 --> 00:42:06,859 open binaries mostly 1140 00:42:06,860 --> 00:42:08,719 something where you can test it. 1141 00:42:08,720 --> 00:42:10,819 But if you're going to use it a lot, 1142 00:42:10,820 --> 00:42:12,979 you want to build your own anyway, 1143 00:42:12,980 --> 00:42:15,109 because open tea is mostly 1144 00:42:15,110 --> 00:42:17,749 targeted at other developers. 1145 00:42:17,750 --> 00:42:19,999 And the whole end user use case 1146 00:42:20,000 --> 00:42:22,129 is mostly an afterthought 1147 00:42:22,130 --> 00:42:24,109 because I think the developer aspect is 1148 00:42:24,110 --> 00:42:25,369 the one that's more missing on the 1149 00:42:25,370 --> 00:42:26,689 market. 1150 00:42:26,690 --> 00:42:28,789 And related question are is the 1151 00:42:28,790 --> 00:42:30,259 source code signed? 1152 00:42:30,260 --> 00:42:32,539 We're using it and you can use 1153 00:42:32,540 --> 00:42:34,039 the git hashes. 1154 00:42:34,040 --> 00:42:35,629 OK, thanks at least. 1155 00:42:35,630 --> 00:42:37,789 Well, when I say we're using it, we're 1156 00:42:37,790 --> 00:42:39,599 not using it as a main repository 1157 00:42:39,600 --> 00:42:41,839 storage, but we usually 1158 00:42:41,840 --> 00:42:43,849 point people that want to download it at 1159 00:42:43,850 --> 00:42:45,079 the git repositories. 1160 00:42:45,080 --> 00:42:46,819 And we just happened to use Svenne 1161 00:42:46,820 --> 00:42:48,559 internally, but it's automatically 1162 00:42:48,560 --> 00:42:49,560 synched. 1163 00:42:52,710 --> 00:42:54,509 What about using open W.T. 1164 00:42:54,510 --> 00:42:57,029 and nonvolatile devices, I saw previous 1165 00:42:57,030 --> 00:42:59,159 efforts, even like I followed closely the 1166 00:42:59,160 --> 00:43:01,109 bauk effort to kind of assimilate the 1167 00:43:01,110 --> 00:43:03,629 Android. I really love that idea of 1168 00:43:03,630 --> 00:43:05,699 having a general purpose built system 1169 00:43:05,700 --> 00:43:07,769 for devices which may need initial 1170 00:43:07,770 --> 00:43:09,869 network connection and may not 1171 00:43:09,870 --> 00:43:12,269 offer a display like also NASA devices 1172 00:43:12,270 --> 00:43:13,379 and stuff like that. 1173 00:43:13,380 --> 00:43:15,479 Um, would you prefer that to 1174 00:43:15,480 --> 00:43:18,059 be developed in Forks of the Open ability 1175 00:43:18,060 --> 00:43:20,399 and keep open the ability based mostly 1176 00:43:20,400 --> 00:43:22,739 on for as a targeting network 1177 00:43:22,740 --> 00:43:23,849 devices, or 1178 00:43:25,140 --> 00:43:27,449 is there any effort going on on expanding 1179 00:43:27,450 --> 00:43:29,699 the target device 1180 00:43:29,700 --> 00:43:30,700 types? 1181 00:43:31,230 --> 00:43:33,329 It depends on what kind of 1182 00:43:33,330 --> 00:43:35,189 development for four things. 1183 00:43:35,190 --> 00:43:37,289 If you have lots of packages that you 1184 00:43:37,290 --> 00:43:40,199 need for for your particular use case, 1185 00:43:40,200 --> 00:43:42,329 then we want to have this as a sort of 1186 00:43:42,330 --> 00:43:44,639 package fit instead of being developed 1187 00:43:44,640 --> 00:43:46,949 inside the open repositories, 1188 00:43:46,950 --> 00:43:49,109 because we are actually trying to offload 1189 00:43:49,110 --> 00:43:51,179 much of the package maintenance to 1190 00:43:51,180 --> 00:43:53,249 to other feeds and other communities, 1191 00:43:53,250 --> 00:43:54,959 because with the limited number of people 1192 00:43:54,960 --> 00:43:57,059 that we have, it's just too much to 1193 00:43:57,060 --> 00:43:58,739 do all the work ourselves. 1194 00:43:58,740 --> 00:44:00,539 But we make sure that the package feed 1195 00:44:00,540 --> 00:44:02,399 list is actually maintained inside our 1196 00:44:02,400 --> 00:44:03,419 repository. 1197 00:44:03,420 --> 00:44:05,489 So you don't have to go 1198 00:44:05,490 --> 00:44:07,439 around digging for us to get all the 1199 00:44:07,440 --> 00:44:08,969 packages. 1200 00:44:08,970 --> 00:44:11,189 But this is something we want this part 1201 00:44:11,190 --> 00:44:12,449 of the work offloaded. 1202 00:44:12,450 --> 00:44:14,159 But if it's something where you need to 1203 00:44:14,160 --> 00:44:16,079 make changes to the core to make things 1204 00:44:16,080 --> 00:44:18,089 work, well, then we of course prefer that 1205 00:44:18,090 --> 00:44:20,519 to be done in the open code base. 1206 00:44:20,520 --> 00:44:22,649 So we were aware of the 1207 00:44:22,650 --> 00:44:24,869 different kinds of use cases that that 1208 00:44:24,870 --> 00:44:27,059 people are using with our code base. 1209 00:44:27,060 --> 00:44:28,679 And we want to make sure that we don't 1210 00:44:28,680 --> 00:44:30,869 have unnecessary forks of the main 1211 00:44:30,870 --> 00:44:31,870 code base. 1212 00:44:33,480 --> 00:44:35,339 Hi there, I two questions, my first 1213 00:44:35,340 --> 00:44:37,469 question is, I know that, like 1214 00:44:37,470 --> 00:44:39,779 with the with the art project, 1215 00:44:39,780 --> 00:44:41,729 sometimes the developers and users have 1216 00:44:41,730 --> 00:44:43,589 been at odds with things like project 1217 00:44:43,590 --> 00:44:44,399 purity. 1218 00:44:44,400 --> 00:44:46,619 Has there been any efforts to try and 1219 00:44:46,620 --> 00:44:48,299 kind of collaborate with those project 1220 00:44:48,300 --> 00:44:49,919 with the other project? 1221 00:44:49,920 --> 00:44:51,989 I'm actually also working 1222 00:44:51,990 --> 00:44:54,119 with the art guys and I'm working 1223 00:44:54,120 --> 00:44:56,399 on making sure that 1224 00:44:56,400 --> 00:44:58,529 they will not have to maintain their 1225 00:44:58,530 --> 00:45:00,300 hackish code base for much longer. 1226 00:45:05,560 --> 00:45:07,659 And my next question also 1227 00:45:07,660 --> 00:45:10,099 has to do with relating to other projects 1228 00:45:10,100 --> 00:45:12,579 is I know that inside Oakland, 1229 00:45:12,580 --> 00:45:14,709 for example, there's been like an idiot 1230 00:45:14,710 --> 00:45:16,479 driver for a wireless card that exists 1231 00:45:16,480 --> 00:45:18,729 solely in the open kernel patches 1232 00:45:18,730 --> 00:45:20,589 for a very long time. 1233 00:45:20,590 --> 00:45:22,339 Are there many efforts to upstream 1234 00:45:22,340 --> 00:45:23,340 patches like that? 1235 00:45:24,460 --> 00:45:26,709 Typically, those efforts 1236 00:45:26,710 --> 00:45:28,659 are made by the people that added the 1237 00:45:28,660 --> 00:45:30,219 package in the first place. 1238 00:45:30,220 --> 00:45:32,379 If it's a package that somebody send 1239 00:45:32,380 --> 00:45:34,479 a patch for a long time ago and it's 1240 00:45:34,480 --> 00:45:36,129 somebody that isn't really active in the 1241 00:45:36,130 --> 00:45:38,379 open desert community, we typically 1242 00:45:38,380 --> 00:45:40,569 don't go around looking for these kinds 1243 00:45:40,570 --> 00:45:42,549 of things to mainline them because that 1244 00:45:42,550 --> 00:45:44,379 would just be too much work for us at 1245 00:45:44,380 --> 00:45:46,119 this point. But if it's something where 1246 00:45:46,120 --> 00:45:48,219 we create something new, we try to 1247 00:45:48,220 --> 00:45:50,349 create it in a way where we can easily 1248 00:45:50,350 --> 00:45:52,059 upstream it, even while it's being 1249 00:45:52,060 --> 00:45:53,060 developed. 1250 00:45:56,750 --> 00:45:58,969 LOL, have you tried to base your belief 1251 00:45:58,970 --> 00:46:01,279 system around something like scratch 1252 00:46:01,280 --> 00:46:03,919 box, something like use a computer 1253 00:46:03,920 --> 00:46:04,920 simulation? 1254 00:46:06,200 --> 00:46:08,329 We haven't really tried it because we 1255 00:46:08,330 --> 00:46:10,419 don't think we really need it. 1256 00:46:10,420 --> 00:46:12,739 We also support some architectures 1257 00:46:12,740 --> 00:46:14,869 where there is no decent cumulous 1258 00:46:14,870 --> 00:46:17,119 support and we have many devices 1259 00:46:17,120 --> 00:46:19,469 that don't really work well with Kumo. 1260 00:46:19,470 --> 00:46:22,339 So we want to make sure that we don't add 1261 00:46:22,340 --> 00:46:24,439 additional restrictions or 1262 00:46:24,440 --> 00:46:26,839 make sure that you get a different 1263 00:46:26,840 --> 00:46:28,909 user experience if you're using a target 1264 00:46:28,910 --> 00:46:30,859 that isn't kümmel supported. 1265 00:46:30,860 --> 00:46:33,169 And in some in some ways, 1266 00:46:33,170 --> 00:46:35,419 the built system already pretty much 1267 00:46:35,420 --> 00:46:38,299 does what we need for for these devices. 1268 00:46:38,300 --> 00:46:40,429 And if I've designed 1269 00:46:40,430 --> 00:46:42,529 most parts to be as easy 1270 00:46:42,530 --> 00:46:45,019 as possible to to change in various 1271 00:46:45,020 --> 00:46:47,089 ways and we we don't feel 1272 00:46:47,090 --> 00:46:49,369 like abandoning our built system in favor 1273 00:46:49,370 --> 00:46:51,349 of another one because we don't see the 1274 00:46:51,350 --> 00:46:52,510 advantages at this point. 1275 00:46:55,340 --> 00:46:57,589 Big headaches, 1276 00:46:57,590 --> 00:47:00,289 are there plans to rename the project? 1277 00:47:00,290 --> 00:47:02,819 No, I don't support the W 1278 00:47:02,820 --> 00:47:04,969 anymore, so it's maybe time to 1279 00:47:04,970 --> 00:47:06,049 rename. 1280 00:47:06,050 --> 00:47:08,299 Well, he could stand for other 1281 00:47:08,300 --> 00:47:10,129 things like wireless router technologies 1282 00:47:10,130 --> 00:47:11,029 or whatever. 1283 00:47:11,030 --> 00:47:13,099 So we don't feel 1284 00:47:13,100 --> 00:47:14,849 like changing the name at this point. 1285 00:47:19,760 --> 00:47:22,019 I just wanted to say 1286 00:47:22,020 --> 00:47:23,399 thanks for doing so much work on this 1287 00:47:23,400 --> 00:47:24,989 project. This is actually how I got into 1288 00:47:24,990 --> 00:47:26,129 Linux. 1289 00:47:26,130 --> 00:47:27,300 Welcome. Thanks so much. 1290 00:47:43,510 --> 00:47:45,429 We seem to be out of questions, so 1291 00:47:47,110 --> 00:47:48,609 thanks, Felix. 1292 00:47:48,610 --> 00:47:50,619 Thank you all for listening and.