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/104 Thanks! 1 00:00:11,410 --> 00:00:13,329 OK. Let's see if things start getting 2 00:00:13,330 --> 00:00:14,330 better or worse. 3 00:00:17,050 --> 00:00:19,029 Yeah. Thank you very much for coming. 4 00:00:19,030 --> 00:00:21,099 I'm really happy to see such 5 00:00:21,100 --> 00:00:23,169 a big crowd that 6 00:00:23,170 --> 00:00:24,940 is seems to be interested in this topic. 7 00:00:26,860 --> 00:00:29,530 I am a Linux kernel developer, 8 00:00:31,390 --> 00:00:33,819 and so obviously I 9 00:00:33,820 --> 00:00:36,489 prefer to speak about the Linux kernel. 10 00:00:36,490 --> 00:00:38,589 Nonetheless, most of the things I want 11 00:00:38,590 --> 00:00:40,509 to say are pretty generic, so you can 12 00:00:40,510 --> 00:00:42,009 apply them to whatever open source 13 00:00:42,010 --> 00:00:43,030 project. It's more or less 14 00:00:44,920 --> 00:00:47,109 some observations about patches and how 15 00:00:47,110 --> 00:00:48,819 they are dealt with in open source 16 00:00:48,820 --> 00:00:50,049 projects. 17 00:00:50,050 --> 00:00:52,449 So while this talk is kind focused, 18 00:00:52,450 --> 00:00:54,519 try to see the general bits 19 00:00:54,520 --> 00:00:55,520 in that. 20 00:00:56,950 --> 00:00:58,479 I have a few assumptions about you 21 00:00:58,480 --> 00:01:00,549 because I think we're I have a quite 22 00:01:00,550 --> 00:01:03,099 an educated audience here, 23 00:01:03,100 --> 00:01:04,180 so I will 24 00:01:05,890 --> 00:01:07,749 hope you have some experiences in hacking 25 00:01:07,750 --> 00:01:10,119 with with source codes and are 26 00:01:10,120 --> 00:01:12,249 somehow able to read a little bit 27 00:01:12,250 --> 00:01:14,019 unify this because I will have some of 28 00:01:14,020 --> 00:01:15,020 them in my slides. 29 00:01:16,780 --> 00:01:18,699 And one thing I want to mention is about 30 00:01:18,700 --> 00:01:20,469 your devices. 31 00:01:20,470 --> 00:01:22,599 I know it's pretty complex, getting 32 00:01:22,600 --> 00:01:24,429 pretty complicated, having mobile phones 33 00:01:24,430 --> 00:01:26,799 and phones and all this with you. 34 00:01:26,800 --> 00:01:28,359 But please make sure that during talks 35 00:01:28,360 --> 00:01:29,590 they are muted 36 00:01:31,000 --> 00:01:32,679 if they are ringing during the talks. 37 00:01:32,680 --> 00:01:34,239 This is at least irritating for the 38 00:01:34,240 --> 00:01:36,459 speaker and I'm also 39 00:01:36,460 --> 00:01:38,239 sometimes in the audience, and I thought 40 00:01:38,240 --> 00:01:40,179 this was pretty annoying during the first 41 00:01:40,180 --> 00:01:42,040 day, so please mute them. 42 00:01:46,110 --> 00:01:48,179 One disclaimer I 43 00:01:48,180 --> 00:01:50,129 am, of course, as the title suggests that 44 00:01:50,130 --> 00:01:52,439 I'm going to present a 45 00:01:52,440 --> 00:01:54,090 bad and ugly patches, but 46 00:01:55,410 --> 00:01:57,509 I don't really want to bashing that does 47 00:01:57,510 --> 00:01:59,039 not mean that I think the people who 48 00:01:59,040 --> 00:02:01,139 created these patches are bad 49 00:02:01,140 --> 00:02:02,369 and ugly. 50 00:02:02,370 --> 00:02:03,370 Not necessarily. 51 00:02:07,710 --> 00:02:10,079 There are lots of causes why, why patches 52 00:02:10,080 --> 00:02:12,209 can be in such a state, and surprisingly, 53 00:02:12,210 --> 00:02:14,399 this is not too different from 54 00:02:14,400 --> 00:02:16,739 what happened in open source projects 55 00:02:16,740 --> 00:02:18,539 and companies. 56 00:02:18,540 --> 00:02:20,279 There might be big companies who have 57 00:02:20,280 --> 00:02:21,929 policy issues about not doing open 58 00:02:21,930 --> 00:02:24,389 source, but there are also 59 00:02:24,390 --> 00:02:25,649 smaller companies who'd like to 60 00:02:25,650 --> 00:02:27,419 contribute and face the same problems, 61 00:02:27,420 --> 00:02:29,639 like I'm not sure developers 62 00:02:29,640 --> 00:02:31,499 or open source projects. 63 00:02:31,500 --> 00:02:33,449 Very often it's just a too high workload, 64 00:02:33,450 --> 00:02:36,659 or they have to create a patch 65 00:02:36,660 --> 00:02:38,759 as a side effect to focus on another 66 00:02:38,760 --> 00:02:40,379 thing, and then they don't have time to 67 00:02:40,380 --> 00:02:42,359 clean it up while they work on some 68 00:02:42,360 --> 00:02:43,919 hardware. Get a new gadget and then the 69 00:02:43,920 --> 00:02:45,599 old gadget is not interesting anymore, 70 00:02:45,600 --> 00:02:46,859 and they couldn't finish the Old Patch. 71 00:02:46,860 --> 00:02:48,929 All of this stuff happens, and 72 00:02:48,930 --> 00:02:50,909 it's one reason why why we have patches, 73 00:02:50,910 --> 00:02:53,009 which needs a bit further life 74 00:02:53,010 --> 00:02:54,449 or a bit more attention. 75 00:02:55,470 --> 00:02:58,499 And yes, there are also bad coders, but 76 00:02:58,500 --> 00:03:00,779 we won't talk about those patches 77 00:03:00,780 --> 00:03:02,159 too much here. 78 00:03:02,160 --> 00:03:04,289 So this is not about bashing 79 00:03:04,290 --> 00:03:06,419 yet. This is about improving the 80 00:03:06,420 --> 00:03:07,420 situation. 81 00:03:10,350 --> 00:03:12,869 I want to mention a few projects 82 00:03:14,610 --> 00:03:16,319 I encountered. 83 00:03:16,320 --> 00:03:17,549 First one is Osmo. 84 00:03:17,550 --> 00:03:19,649 Com B-BBEE, which was pretty surprising 85 00:03:19,650 --> 00:03:21,749 because they themselves 86 00:03:21,750 --> 00:03:23,069 don't use a Linux kernel. 87 00:03:24,210 --> 00:03:25,119 I have. 88 00:03:25,120 --> 00:03:27,209 Yeah. Well, this is one of their Motorola 89 00:03:27,210 --> 00:03:28,979 phones they're using. 90 00:03:28,980 --> 00:03:30,899 It's not powerful enough to use a Linux 91 00:03:30,900 --> 00:03:31,900 kernel. 92 00:03:32,490 --> 00:03:34,569 Still, I was for a short time 93 00:03:34,570 --> 00:03:36,689 a bit involved in the development, 94 00:03:36,690 --> 00:03:38,909 and I came when I was reading 95 00:03:38,910 --> 00:03:40,739 the mailing list. I found it. 96 00:03:40,740 --> 00:03:42,479 Well, this is an excerpt of a mail 97 00:03:42,480 --> 00:03:45,359 thread, and there was one person 98 00:03:45,360 --> 00:03:47,969 saying, OK, I've got this USB cable, 99 00:03:47,970 --> 00:03:50,309 which he needed to to connect 100 00:03:50,310 --> 00:03:52,439 to the phone, and it doesn't work in 101 00:03:52,440 --> 00:03:53,440 the Linux kernel. 102 00:03:54,990 --> 00:03:57,179 Being a hacker, he was he 103 00:03:57,180 --> 00:04:00,059 was able to fix the Linux kernel himself 104 00:04:00,060 --> 00:04:01,739 because he just found out, OK, it was a 105 00:04:01,740 --> 00:04:04,199 cable which has just in you use b ID. 106 00:04:04,200 --> 00:04:06,629 So he modified 107 00:04:06,630 --> 00:04:08,939 the driver to recognize 108 00:04:08,940 --> 00:04:11,069 this and use video so 109 00:04:11,070 --> 00:04:13,529 he could work and focus and follow 110 00:04:13,530 --> 00:04:16,139 his main focus working with the phone. 111 00:04:16,140 --> 00:04:17,140 He 112 00:04:18,839 --> 00:04:20,518 sends the patch to the mailing list, and 113 00:04:20,519 --> 00:04:22,889 you can see it's it's pretty simple. 114 00:04:22,890 --> 00:04:24,959 It's just adding two lines lower line 115 00:04:24,960 --> 00:04:27,119 as he defines the new 116 00:04:27,120 --> 00:04:29,299 idea and put the new ID in the 117 00:04:29,300 --> 00:04:31,439 the table for the driver so it gets 118 00:04:31,440 --> 00:04:32,519 recognized. 119 00:04:32,520 --> 00:04:33,419 It's pretty simple. 120 00:04:33,420 --> 00:04:35,699 You can't really do much 121 00:04:35,700 --> 00:04:36,700 wrong with that. 122 00:04:37,950 --> 00:04:40,079 And then I 123 00:04:40,080 --> 00:04:41,529 asked him, Hey, well, what do you do 124 00:04:41,530 --> 00:04:43,859 incident intend to send this to mainline? 125 00:04:43,860 --> 00:04:46,679 Because I mean, for you, it was just 126 00:04:46,680 --> 00:04:47,639 a short exercise. 127 00:04:47,640 --> 00:04:49,049 But other people not having this 128 00:04:49,050 --> 00:04:51,299 knowledge, they might be really happy if, 129 00:04:51,300 --> 00:04:53,489 of course, the hardware gets detected 130 00:04:53,490 --> 00:04:54,869 by default. 131 00:04:54,870 --> 00:04:57,659 And yeah, he was interested, 132 00:04:57,660 --> 00:04:59,999 but he had not thought of this before. 133 00:05:00,000 --> 00:05:02,219 So he just needed a little input 134 00:05:02,220 --> 00:05:04,589 and wanted to send this upstream, and 135 00:05:04,590 --> 00:05:06,989 it was pretty s just a simple 136 00:05:06,990 --> 00:05:09,149 patch. It didn't need very much. 137 00:05:10,380 --> 00:05:12,599 What is, of course, required is a 138 00:05:12,600 --> 00:05:15,179 patch header having a description 139 00:05:15,180 --> 00:05:17,729 of what this patch does and 140 00:05:17,730 --> 00:05:19,589 you need this famous signed off line. 141 00:05:19,590 --> 00:05:21,149 So it's a real name and your address. 142 00:05:21,150 --> 00:05:22,150 So 143 00:05:23,910 --> 00:05:25,409 in case something is wrong with the 144 00:05:25,410 --> 00:05:27,629 patch, everyone knows who 145 00:05:27,630 --> 00:05:28,630 to contact 146 00:05:30,330 --> 00:05:31,439 this. 147 00:05:31,440 --> 00:05:33,630 Adding a new ID is a pretty simple 148 00:05:35,940 --> 00:05:37,619 process, which happens very often in the 149 00:05:37,620 --> 00:05:40,529 kernel. So to be honest, it's a very, 150 00:05:40,530 --> 00:05:42,659 very descriptive 151 00:05:42,660 --> 00:05:43,799 patch description text. 152 00:05:43,800 --> 00:05:45,299 It could have been shorter, but even this 153 00:05:45,300 --> 00:05:47,279 descriptive version, as you can guess, 154 00:05:47,280 --> 00:05:49,379 should not take more than 155 00:05:49,380 --> 00:05:51,659 one minute or so to type 156 00:05:51,660 --> 00:05:52,660 in. 157 00:05:53,010 --> 00:05:55,319 And this guy 158 00:05:55,320 --> 00:05:57,059 added the patch headers send it in, and I 159 00:05:57,060 --> 00:05:59,279 think between sending the patch and 160 00:05:59,280 --> 00:06:01,379 applying to the USB 161 00:06:01,380 --> 00:06:03,300 tree was a matter of a few hours. 162 00:06:04,500 --> 00:06:06,659 So, yeah, patches 163 00:06:06,660 --> 00:06:08,159 can take quite a while, but sometimes 164 00:06:08,160 --> 00:06:09,149 it's pretty fast. 165 00:06:09,150 --> 00:06:11,309 And from personal communication, 166 00:06:11,310 --> 00:06:13,469 I recall that this 167 00:06:13,470 --> 00:06:15,389 guy was kind of happy to have his first 168 00:06:15,390 --> 00:06:17,039 call, as was his first kernel patch 169 00:06:17,040 --> 00:06:19,529 accepted. And so, yeah, 170 00:06:19,530 --> 00:06:20,640 he felt good about it. 171 00:06:22,830 --> 00:06:25,379 So this was an example, good example 172 00:06:26,810 --> 00:06:28,949 of the patch flaw, how it went out 173 00:06:28,950 --> 00:06:30,899 of the original project and 174 00:06:32,430 --> 00:06:34,229 went to where it belongs to to the 175 00:06:34,230 --> 00:06:36,089 upstream project, namely the Linux 176 00:06:36,090 --> 00:06:37,090 kernel. 177 00:06:37,800 --> 00:06:39,899 If you want to do that 178 00:06:39,900 --> 00:06:42,239 and don't know these tools yet, 179 00:06:42,240 --> 00:06:44,369 I wouldn't try to want to do a short 180 00:06:44,370 --> 00:06:45,370 recommendation. 181 00:06:46,380 --> 00:06:48,569 The first one is the famous 182 00:06:48,570 --> 00:06:50,969 Czech patch Perl script, 183 00:06:50,970 --> 00:06:52,589 which checks for typical flaws. 184 00:06:54,030 --> 00:06:56,039 Please use it even if you're an 185 00:06:56,040 --> 00:06:58,649 experienced kernel hacker. 186 00:06:58,650 --> 00:07:00,809 It's so easy to to get some whitespace is 187 00:07:00,810 --> 00:07:04,079 wrong, and so just run over it and 188 00:07:04,080 --> 00:07:06,029 have your patch checked. 189 00:07:06,030 --> 00:07:08,129 And what's really useful is if you 190 00:07:08,130 --> 00:07:10,109 don't know who is who in the kernel 191 00:07:10,110 --> 00:07:12,359 community and who to send patches to 192 00:07:12,360 --> 00:07:14,669 theirs to get maintainer Perl script. 193 00:07:14,670 --> 00:07:16,919 Just pass your patch file 194 00:07:16,920 --> 00:07:18,989 to that script, and it will print a list 195 00:07:18,990 --> 00:07:20,370 of email addresses who 196 00:07:21,660 --> 00:07:22,889 to whom you should. 197 00:07:22,890 --> 00:07:24,720 You should send the patch to 198 00:07:25,800 --> 00:07:27,239 if you work more with them. 199 00:07:28,290 --> 00:07:29,789 It makes sense to have a look at the 200 00:07:29,790 --> 00:07:32,129 command line options, but meanwhile 201 00:07:32,130 --> 00:07:33,449 they have pretty sane defaults. 202 00:07:33,450 --> 00:07:35,519 So if it's just if you 203 00:07:35,520 --> 00:07:37,649 use it occasionally, you just use them 204 00:07:37,650 --> 00:07:39,269 like here without any options and they 205 00:07:39,270 --> 00:07:41,879 will give you reasonable 206 00:07:41,880 --> 00:07:42,880 results. 207 00:07:43,770 --> 00:07:45,899 So that was what I think was 208 00:07:45,900 --> 00:07:47,339 a good example. 209 00:07:47,340 --> 00:07:48,479 Somebody hacked something. 210 00:07:48,480 --> 00:07:50,609 It was worthwhile adding to the Linux 211 00:07:50,610 --> 00:07:51,929 kernel, and she took the 212 00:07:53,730 --> 00:07:55,200 necessary steps to do that. 213 00:07:58,910 --> 00:08:00,019 The next thing is 214 00:08:01,520 --> 00:08:03,949 the zippered that to kernel 215 00:08:03,950 --> 00:08:06,259 zipper that too was, oh yeah, 216 00:08:06,260 --> 00:08:08,629 I think in 2007 217 00:08:08,630 --> 00:08:10,699 or something, it was a small 218 00:08:10,700 --> 00:08:12,769 device intended for instant 219 00:08:12,770 --> 00:08:14,039 messaging everywhere. 220 00:08:14,040 --> 00:08:16,219 So it's a 221 00:08:16,220 --> 00:08:18,499 small p h of 70 base 222 00:08:18,500 --> 00:08:20,799 arm based mini computer. 223 00:08:20,800 --> 00:08:23,209 I think this size, it has this 224 00:08:23,210 --> 00:08:25,639 small display, keyboard, Wi-Fi. 225 00:08:27,290 --> 00:08:29,509 Well, there's lots of devices 226 00:08:29,510 --> 00:08:31,849 like this around, but a few 227 00:08:31,850 --> 00:08:34,069 years ago they were sold pretty 228 00:08:34,070 --> 00:08:36,139 cheap for like ten or fifteen dollars and 229 00:08:36,140 --> 00:08:38,269 you could get heaps of them and 230 00:08:38,270 --> 00:08:40,489 they are quite easily hackable, 231 00:08:40,490 --> 00:08:42,740 which makes them interesting devices 232 00:08:44,030 --> 00:08:46,339 and they 233 00:08:46,340 --> 00:08:48,739 have some support 234 00:08:48,740 --> 00:08:50,809 in the mainline kernel, these 235 00:08:50,810 --> 00:08:51,889 devices. 236 00:08:51,890 --> 00:08:53,449 But it's a bit rough. 237 00:08:53,450 --> 00:08:55,849 So there's an extra kernel around 238 00:08:55,850 --> 00:08:57,949 in the net to to make it, to make 239 00:08:57,950 --> 00:08:58,950 it run more smoothly 240 00:09:01,130 --> 00:09:02,989 and in that kernel. 241 00:09:02,990 --> 00:09:04,580 I found this patch 242 00:09:07,400 --> 00:09:09,199 which where you can see if you read the 243 00:09:09,200 --> 00:09:11,659 description, mentions that 244 00:09:11,660 --> 00:09:13,610 if it is not applied, 245 00:09:15,440 --> 00:09:17,389 the device will crash if you use 246 00:09:17,390 --> 00:09:18,649 frequency scaling. 247 00:09:18,650 --> 00:09:20,389 And of course, you want to use frequency 248 00:09:20,390 --> 00:09:22,010 scaling because it's good for battery. 249 00:09:23,780 --> 00:09:25,309 And this is why I think it's a bad patch 250 00:09:25,310 --> 00:09:26,719 because it's not in mainline. 251 00:09:26,720 --> 00:09:29,029 I I really want to be Linux, 252 00:09:29,030 --> 00:09:31,249 the kick ass operating 253 00:09:31,250 --> 00:09:33,239 system that you can if you want to hack 254 00:09:33,240 --> 00:09:35,239 something and be creative with a device. 255 00:09:35,240 --> 00:09:37,459 And I want the Linux kernel to just 256 00:09:37,460 --> 00:09:39,979 grab it and work is as good as possible. 257 00:09:39,980 --> 00:09:42,229 So you don't have to spend on on fixing 258 00:09:42,230 --> 00:09:44,329 things, but concentrate on what you want 259 00:09:44,330 --> 00:09:46,369 to do with the device. 260 00:09:46,370 --> 00:09:48,739 So crashing randomly is really not 261 00:09:48,740 --> 00:09:50,869 not what I want the Linux kernel 262 00:09:50,870 --> 00:09:51,870 to see. 263 00:09:53,600 --> 00:09:55,189 That makes it, in my opinion, about 264 00:09:55,190 --> 00:09:56,649 Patch. It should have been upstream. 265 00:09:56,650 --> 00:09:58,519 Again, no bashing. 266 00:09:58,520 --> 00:10:00,619 This guy has found other issues 267 00:10:00,620 --> 00:10:02,839 while working on the on this 268 00:10:02,840 --> 00:10:05,029 zip it's device and got 269 00:10:05,030 --> 00:10:06,529 quite of them upstream. 270 00:10:06,530 --> 00:10:08,449 But I think after some time he went to 271 00:10:08,450 --> 00:10:11,359 the next device or whatnot, so this 272 00:10:11,360 --> 00:10:12,769 patch is somewhat stalled. 273 00:10:14,600 --> 00:10:16,609 Yet it would be nice to have upstream if 274 00:10:16,610 --> 00:10:17,610 you look at the patch. 275 00:10:18,860 --> 00:10:21,589 It's mainly about changing 276 00:10:21,590 --> 00:10:23,899 one entry in the table you see here 277 00:10:23,900 --> 00:10:26,209 a row of once, which means use of fast 278 00:10:26,210 --> 00:10:27,229 boss mass method. 279 00:10:27,230 --> 00:10:28,849 We don't need the details of what this 280 00:10:28,850 --> 00:10:31,039 means, and here's a row of zero, 281 00:10:31,040 --> 00:10:32,689 so that means disable that. 282 00:10:32,690 --> 00:10:34,849 So we have a stable, stable 283 00:10:34,850 --> 00:10:35,850 system. 284 00:10:36,830 --> 00:10:38,809 So not not really rocket science. 285 00:10:41,330 --> 00:10:43,459 What does it need in this case to 286 00:10:43,460 --> 00:10:45,589 get this patch upstream in case you 287 00:10:47,350 --> 00:10:49,759 won't? Let's assume you bought the device 288 00:10:49,760 --> 00:10:51,739 and you want to prepare a good kernel for 289 00:10:51,740 --> 00:10:53,179 that and you find the patch and 290 00:10:55,610 --> 00:10:56,610 one. 291 00:10:57,440 --> 00:10:59,509 My hope is that that you also get 292 00:10:59,510 --> 00:11:00,979 the idea Hey, wait, what's not upstream? 293 00:11:00,980 --> 00:11:02,929 It should be there. So what is needed to 294 00:11:02,930 --> 00:11:03,930 do that? 295 00:11:07,820 --> 00:11:09,889 First one, of course, check if it's 296 00:11:09,890 --> 00:11:10,999 still needed. 297 00:11:11,000 --> 00:11:13,069 Mostly the those kind of kernels 298 00:11:13,070 --> 00:11:14,389 are a bit older. 299 00:11:14,390 --> 00:11:17,119 I think this latest version 300 00:11:17,120 --> 00:11:19,459 from the Zip It archive is 301 00:11:19,460 --> 00:11:20,629 3.7. 302 00:11:20,630 --> 00:11:22,489 Remember, we're approaching three point 303 00:11:22,490 --> 00:11:24,289 thirteen, so it's probably already two 304 00:11:24,290 --> 00:11:25,609 years old. 305 00:11:25,610 --> 00:11:27,529 So rule number one, check if it's still 306 00:11:27,530 --> 00:11:28,530 needed, 307 00:11:29,830 --> 00:11:31,819 it might be that it found a similar 308 00:11:31,820 --> 00:11:34,459 patch, a better patch or whatnot 309 00:11:34,460 --> 00:11:36,799 has already found the 310 00:11:36,800 --> 00:11:37,800 way upstream. 311 00:11:40,220 --> 00:11:42,139 If you if you search for the patch, if 312 00:11:42,140 --> 00:11:44,509 it's if it has been submitted already, 313 00:11:44,510 --> 00:11:46,699 which is also a good idea, then 314 00:11:46,700 --> 00:11:48,589 you'll find out OK, it has been submitted 315 00:11:48,590 --> 00:11:50,090 already, but there were issues with it. 316 00:11:51,320 --> 00:11:53,659 And what this patch does, 317 00:11:53,660 --> 00:11:55,819 it disables fastballs 318 00:11:55,820 --> 00:11:58,070 for all peaks, 270 balls, 319 00:12:00,290 --> 00:12:02,359 which sounded a bit too aggressive 320 00:12:02,360 --> 00:12:04,819 because for most 321 00:12:04,820 --> 00:12:06,889 other peaks, H7 keyboards, it worked 322 00:12:06,890 --> 00:12:08,509 perfectly. 323 00:12:08,510 --> 00:12:10,459 So what was more or less requested for 324 00:12:10,460 --> 00:12:12,409 this patch is to to extend it, to make it 325 00:12:12,410 --> 00:12:14,599 more optional, to say, OK, I have 326 00:12:14,600 --> 00:12:16,099 this part which is known to not work. 327 00:12:16,100 --> 00:12:17,569 Please disable it now. 328 00:12:17,570 --> 00:12:19,099 That's not a lot of code, but it has to 329 00:12:19,100 --> 00:12:20,100 be done, 330 00:12:21,950 --> 00:12:23,509 and that would be a useful option because 331 00:12:23,510 --> 00:12:26,029 I quit. I'd be lying if the peaks 332 00:12:26,030 --> 00:12:28,129 to 270 would be a state of the 333 00:12:28,130 --> 00:12:29,839 art processor. It's pretty old by now, 334 00:12:29,840 --> 00:12:31,969 but it has been deployed quite 335 00:12:31,970 --> 00:12:34,159 often. So if you're buying cheap, 336 00:12:34,160 --> 00:12:36,259 old, hackable devices, 337 00:12:36,260 --> 00:12:38,399 you still have chances that it might 338 00:12:38,400 --> 00:12:40,309 have that associate. 339 00:12:41,690 --> 00:12:43,489 And then if such a patch is applied 340 00:12:43,490 --> 00:12:46,099 upstream and another person discovers 341 00:12:46,100 --> 00:12:48,199 I have random crashes, then it might 342 00:12:48,200 --> 00:12:50,389 be. Then this person might easily find, 343 00:12:50,390 --> 00:12:51,919 Oh, OK, there's another bot which 344 00:12:51,920 --> 00:12:53,089 disables fastballs. 345 00:12:53,090 --> 00:12:54,709 Maybe I need to do that too. 346 00:12:54,710 --> 00:12:56,450 And a lot of engineering 347 00:12:57,710 --> 00:13:00,259 debugging effort is saved 348 00:13:00,260 --> 00:13:01,999 because otherwise this person would have 349 00:13:02,000 --> 00:13:03,709 to do this again. 350 00:13:03,710 --> 00:13:05,929 And random crashes are really 351 00:13:05,930 --> 00:13:08,119 pain in the ass to D-backs to 352 00:13:08,120 --> 00:13:10,130 debug. So that would be a good thing. 353 00:13:12,230 --> 00:13:14,449 So another thing would be nice 354 00:13:14,450 --> 00:13:15,740 here to extend the patch 355 00:13:17,930 --> 00:13:19,109 tested on real hardware. 356 00:13:19,110 --> 00:13:21,649 Does this things that I want updates 357 00:13:21,650 --> 00:13:23,539 to the patch header slightly? 358 00:13:23,540 --> 00:13:25,699 Send it upstream and be 359 00:13:25,700 --> 00:13:26,749 around for questions? 360 00:13:28,970 --> 00:13:31,189 Might be that people have other 361 00:13:31,190 --> 00:13:32,570 issues raised. Maybe it goes in 362 00:13:33,680 --> 00:13:34,879 without any complaints. 363 00:13:34,880 --> 00:13:37,279 Just be around and don't disappear 364 00:13:37,280 --> 00:13:39,619 like the original patch also did 365 00:13:39,620 --> 00:13:41,119 for probably valid reasons. 366 00:13:41,120 --> 00:13:43,309 I think that would be 367 00:13:43,310 --> 00:13:45,559 a way how to make this that 368 00:13:45,560 --> 00:13:47,269 patch a good patch, because after that, 369 00:13:47,270 --> 00:13:48,270 it would be upstream. 370 00:13:50,640 --> 00:13:53,699 This is one example of 371 00:13:53,700 --> 00:13:55,949 of Petraeus you can find in 372 00:13:55,950 --> 00:13:58,229 in repositories like a zip, it's 373 00:13:58,230 --> 00:13:59,309 that to Colonel. 374 00:14:04,340 --> 00:14:05,559 Open W.r.t. 375 00:14:08,000 --> 00:14:11,029 They in the past, 376 00:14:11,030 --> 00:14:12,949 meaning really a few years ago, they had 377 00:14:12,950 --> 00:14:15,049 a reputation 378 00:14:15,050 --> 00:14:16,819 of not having a lot of interesting 379 00:14:16,820 --> 00:14:18,229 patches and not upstream. 380 00:14:18,230 --> 00:14:19,999 Then that has really, really changed. 381 00:14:20,000 --> 00:14:21,970 They have become very good at upstream. 382 00:14:23,900 --> 00:14:26,119 Yet they have really a lot 383 00:14:26,120 --> 00:14:27,620 of patches and 384 00:14:29,420 --> 00:14:31,609 not enough manpower to 385 00:14:31,610 --> 00:14:33,620 to upstream them all on their own. 386 00:14:34,940 --> 00:14:37,099 Some maybe craft, some maybe interesting. 387 00:14:37,100 --> 00:14:39,349 So they 388 00:14:39,350 --> 00:14:40,759 have the they need support for that. 389 00:14:40,760 --> 00:14:42,979 So if you happen to work 390 00:14:42,980 --> 00:14:45,259 on open w.r.t and 391 00:14:45,260 --> 00:14:47,539 have a kernel with its with which 392 00:14:47,540 --> 00:14:49,639 is patched and might 393 00:14:49,640 --> 00:14:51,709 be worth looking, OK, what patches do 394 00:14:51,710 --> 00:14:54,049 I have? And is that something was up 395 00:14:54,050 --> 00:14:55,250 and said some packaged patches? 396 00:14:59,650 --> 00:15:02,320 I searched for for some examples. 397 00:15:04,750 --> 00:15:06,609 This is OK. 398 00:15:06,610 --> 00:15:08,859 An ugly patch, and 399 00:15:08,860 --> 00:15:10,449 I want to extend my disclaimer. 400 00:15:10,450 --> 00:15:12,729 There are some ugly patches in the open 401 00:15:12,730 --> 00:15:14,619 w.r.t repository. 402 00:15:14,620 --> 00:15:15,609 Not necessarily. 403 00:15:15,610 --> 00:15:18,009 All of them are ugly, but for 404 00:15:18,010 --> 00:15:19,389 educational reasons. 405 00:15:19,390 --> 00:15:21,099 I concentrate more on the ugly ones. 406 00:15:21,100 --> 00:15:22,149 Now, please don't get the wrong 407 00:15:22,150 --> 00:15:24,419 impression of about open w.r.t. 408 00:15:26,980 --> 00:15:29,199 And here you see that 409 00:15:29,200 --> 00:15:31,359 a patch which simply erases a data 410 00:15:31,360 --> 00:15:33,639 structures initialize it to zero. 411 00:15:36,370 --> 00:15:38,649 And what I think, what 412 00:15:38,650 --> 00:15:40,149 really makes this patch ugly? 413 00:15:41,710 --> 00:15:43,329 There's no patch description, and there's 414 00:15:43,330 --> 00:15:44,330 no patch, although 415 00:15:45,910 --> 00:15:47,589 this is a pretty simple patch, so it's 416 00:15:47,590 --> 00:15:49,199 not that bad, but we will see 417 00:15:50,230 --> 00:15:51,549 that it can go a lot worse. 418 00:15:52,840 --> 00:15:54,549 So this is one thing which really needs 419 00:15:54,550 --> 00:15:55,550 to be fixed, and 420 00:15:56,650 --> 00:15:59,019 it's kind of a trivial patch because 421 00:15:59,020 --> 00:16:01,389 the data structure is 422 00:16:01,390 --> 00:16:03,700 located on the stack and then 423 00:16:04,840 --> 00:16:06,639 some values are initialized, and then 424 00:16:06,640 --> 00:16:08,919 it's passed on to some Linux 425 00:16:08,920 --> 00:16:11,079 kernel function and to 426 00:16:11,080 --> 00:16:13,029 ensure that all the other unused fields 427 00:16:13,030 --> 00:16:15,399 are there is good programing exercise. 428 00:16:15,400 --> 00:16:17,619 So from a simple 429 00:16:17,620 --> 00:16:19,959 review, this patch makes 430 00:16:19,960 --> 00:16:22,119 perfectly sense and should be upstream 431 00:16:22,120 --> 00:16:23,120 to. 432 00:16:28,720 --> 00:16:31,059 What it needs to be 433 00:16:31,060 --> 00:16:33,229 to be a good patch is check 434 00:16:33,230 --> 00:16:35,019 if it's still needed, I can tell you it 435 00:16:35,020 --> 00:16:36,009 is still needed. 436 00:16:36,010 --> 00:16:37,470 I looked it up already. 437 00:16:39,130 --> 00:16:41,169 Look for improvements. 438 00:16:41,170 --> 00:16:43,389 Yeah, well, it's a trivial 439 00:16:43,390 --> 00:16:46,359 patch, but still I would replace the 440 00:16:46,360 --> 00:16:47,589 correct backslash. 441 00:16:47,590 --> 00:16:48,939 Zero was a plain zero. 442 00:16:48,940 --> 00:16:50,500 I think it's more readable, but 443 00:16:51,880 --> 00:16:53,499 that's your decision if you take over the 444 00:16:53,500 --> 00:16:55,989 patch. Such things are your decisions 445 00:16:55,990 --> 00:16:57,489 signed since it's 446 00:16:58,720 --> 00:17:01,059 fixing a programing flaw, waiting 447 00:17:01,060 --> 00:17:03,099 on programing flaw with an easy fix. 448 00:17:03,100 --> 00:17:05,078 There's an onus on initialized data 449 00:17:05,079 --> 00:17:07,868 structure and initializing it zero. 450 00:17:07,869 --> 00:17:09,999 It can be argued if you can leave out 451 00:17:10,000 --> 00:17:11,889 the test on real hardware because it's so 452 00:17:11,890 --> 00:17:12,890 simple. 453 00:17:15,190 --> 00:17:16,929 Some people argue every patch should be 454 00:17:16,930 --> 00:17:18,039 tested on real hardware. 455 00:17:18,040 --> 00:17:19,269 I leave that up to you. 456 00:17:19,270 --> 00:17:21,578 If somebody would send 457 00:17:21,579 --> 00:17:23,799 it to my subsystem, I would accept 458 00:17:23,800 --> 00:17:25,989 it as is 459 00:17:25,990 --> 00:17:27,670 because I think it's obvious 460 00:17:29,470 --> 00:17:30,819 what really needs to be done. 461 00:17:30,820 --> 00:17:32,559 Of course I said before and a patch 462 00:17:32,560 --> 00:17:35,049 header, which for the Linux kernel and 463 00:17:35,050 --> 00:17:37,569 quite meanwhile quite some other 464 00:17:37,570 --> 00:17:39,639 subsystems, is adding a patch 465 00:17:39,640 --> 00:17:41,799 header with one line 466 00:17:41,800 --> 00:17:43,179 description and then a multi-lane 467 00:17:43,180 --> 00:17:45,099 description and the signed off by line. 468 00:17:46,690 --> 00:17:48,309 Once you get used to that, it's done in 469 00:17:48,310 --> 00:17:50,139 really in a minute and then send it 470 00:17:50,140 --> 00:17:51,140 upstream. 471 00:17:51,640 --> 00:17:53,769 As mentioned before, if you use a script, 472 00:17:53,770 --> 00:17:56,079 get maintainer, it 473 00:17:56,080 --> 00:17:57,819 will present you home to send it to and 474 00:17:57,820 --> 00:17:59,979 this is makes it pretty easy. 475 00:18:02,110 --> 00:18:04,359 And then we have a clean 476 00:18:04,360 --> 00:18:05,650 code in the Linux kernel. 477 00:18:06,670 --> 00:18:08,799 The open w.r.t project loses the 478 00:18:08,800 --> 00:18:11,109 patch, which it has to maintain, 479 00:18:11,110 --> 00:18:13,239 and you will get credited 480 00:18:13,240 --> 00:18:15,549 for having a Linux kernel patch if 481 00:18:15,550 --> 00:18:17,199 that gives something to you or you have a 482 00:18:17,200 --> 00:18:19,539 better operator, better operating 483 00:18:19,540 --> 00:18:21,099 system if that gives something to you. 484 00:18:26,430 --> 00:18:27,779 Next, patch from 485 00:18:29,250 --> 00:18:30,359 open W.r.t 486 00:18:31,470 --> 00:18:33,839 is somehow a little bit 487 00:18:33,840 --> 00:18:35,939 similar to the 488 00:18:35,940 --> 00:18:38,309 USB patch because what it basically does, 489 00:18:39,990 --> 00:18:42,929 it adds detection for some flash 490 00:18:42,930 --> 00:18:45,089 types and 491 00:18:45,090 --> 00:18:47,469 all flash types, and 492 00:18:47,470 --> 00:18:49,949 that defines the IDs 493 00:18:49,950 --> 00:18:52,319 and and extends 494 00:18:52,320 --> 00:18:53,699 the array of parameters. 495 00:18:53,700 --> 00:18:55,229 These flash chips have 496 00:18:57,270 --> 00:18:59,579 since we want to support as many hardware 497 00:18:59,580 --> 00:19:01,379 as possible in the Linux kernel. 498 00:19:01,380 --> 00:19:02,819 This should be off stream, of course, as 499 00:19:02,820 --> 00:19:03,820 well. 500 00:19:05,250 --> 00:19:07,410 So what needs to be done here? 501 00:19:09,930 --> 00:19:11,699 Check if it still applies to the recent 502 00:19:11,700 --> 00:19:12,699 kernel. 503 00:19:12,700 --> 00:19:15,209 You should probably have guessed that. 504 00:19:15,210 --> 00:19:17,369 And here also, I can tell you, yes, it 505 00:19:17,370 --> 00:19:18,960 still applies to the recent kernel. 506 00:19:21,420 --> 00:19:23,339 So we want we want this up. 507 00:19:23,340 --> 00:19:25,139 We can upstream this and we want upstream 508 00:19:25,140 --> 00:19:26,819 this after we checked. 509 00:19:26,820 --> 00:19:27,989 If it's the best solution. 510 00:19:29,700 --> 00:19:30,700 This is. 511 00:19:33,630 --> 00:19:35,739 And encouragement to to work, 512 00:19:35,740 --> 00:19:38,039 to not blindly send patches upstream 513 00:19:38,040 --> 00:19:39,749 without knowing what you're doing, son, 514 00:19:39,750 --> 00:19:41,849 but also to to work into the 515 00:19:41,850 --> 00:19:44,129 topic a little bit because 516 00:19:44,130 --> 00:19:46,319 you could find out that most, if 517 00:19:46,320 --> 00:19:48,599 not flash chips, have 518 00:19:48,600 --> 00:19:50,309 something called something called see if 519 00:19:50,310 --> 00:19:52,469 I common flash interface. 520 00:19:52,470 --> 00:19:54,539 And usually this is enough 521 00:19:54,540 --> 00:19:57,029 to auto detect so you don't have 522 00:19:57,030 --> 00:19:59,459 to to add anything 523 00:19:59,460 --> 00:20:00,900 to the probe function at all. 524 00:20:02,100 --> 00:20:04,049 So if you have the hardware, you could 525 00:20:04,050 --> 00:20:06,209 check if it still works without the patch 526 00:20:06,210 --> 00:20:08,969 and the CFI interface is enough. 527 00:20:08,970 --> 00:20:10,979 You could find out then that this if I 528 00:20:10,980 --> 00:20:13,049 interface in that flash chips is broken 529 00:20:13,050 --> 00:20:14,999 and you really need the patch. 530 00:20:15,000 --> 00:20:17,069 I also added some some 531 00:20:17,070 --> 00:20:19,229 flash chips because they advertised 532 00:20:19,230 --> 00:20:21,329 some something, which they 533 00:20:21,330 --> 00:20:23,609 did not do in reality. 534 00:20:23,610 --> 00:20:26,009 And so we had to to add 535 00:20:26,010 --> 00:20:27,869 this manual detection instead of the 536 00:20:27,870 --> 00:20:29,309 automated one. 537 00:20:29,310 --> 00:20:30,779 And this is something which could be done 538 00:20:30,780 --> 00:20:32,399 here as well. 539 00:20:32,400 --> 00:20:34,259 It's fun hacking, in my opinion. 540 00:20:34,260 --> 00:20:36,479 I like hacking with with embedded devices 541 00:20:36,480 --> 00:20:38,759 and getting chips to work and and 542 00:20:38,760 --> 00:20:40,530 reading registers and stuff like that. 543 00:20:41,820 --> 00:20:43,410 And once you did all this 544 00:20:45,180 --> 00:20:47,459 again at the patch headed here, 545 00:20:47,460 --> 00:20:49,589 we really should test 546 00:20:49,590 --> 00:20:50,489 that on real hardware. 547 00:20:50,490 --> 00:20:52,889 And this is, I think, too advanced 548 00:20:52,890 --> 00:20:54,719 for for an educated guess. 549 00:20:54,720 --> 00:20:57,629 So make sure it works on hardware. 550 00:20:57,630 --> 00:20:59,429 And again, send it upstream and be around 551 00:20:59,430 --> 00:21:00,540 to answer questions. 552 00:21:01,800 --> 00:21:03,959 That sounds like a long list, but 553 00:21:03,960 --> 00:21:06,569 I don't think it's really that long. 554 00:21:06,570 --> 00:21:08,219 Depending on your experience, this might 555 00:21:08,220 --> 00:21:10,359 be an hour or one or two evenings 556 00:21:10,360 --> 00:21:12,509 of hacking and fiddling around 557 00:21:12,510 --> 00:21:14,849 reading data data sheets. 558 00:21:17,590 --> 00:21:19,239 And then we have support for new flash 559 00:21:19,240 --> 00:21:20,240 cards, slow 560 00:21:21,730 --> 00:21:23,949 next bought you, you 561 00:21:23,950 --> 00:21:25,460 might support them automatically, 562 00:21:27,220 --> 00:21:28,220 might be good. 563 00:21:33,040 --> 00:21:34,210 This is a patch 564 00:21:35,860 --> 00:21:37,329 which I've seen, 565 00:21:38,890 --> 00:21:40,929 in my opinion, is really only because I 566 00:21:40,930 --> 00:21:42,279 don't have much knowledge about this 567 00:21:42,280 --> 00:21:44,229 subsystem, I don't know. 568 00:21:44,230 --> 00:21:46,419 My experience is a driver's 569 00:21:46,420 --> 00:21:49,029 device. Drivers, especially eyes, 570 00:21:49,030 --> 00:21:50,619 see where I'm the maintainer of the 571 00:21:50,620 --> 00:21:51,620 subsystem. 572 00:21:52,570 --> 00:21:54,279 OK, this is about people. 573 00:21:54,280 --> 00:21:56,349 Oh, I don't know much about the internals 574 00:21:56,350 --> 00:21:57,519 of that one. 575 00:21:57,520 --> 00:21:59,589 And what I see here is 576 00:21:59,590 --> 00:22:00,590 that 577 00:22:01,930 --> 00:22:04,329 there are two places where some memory 578 00:22:04,330 --> 00:22:06,519 is allocated and the patch 579 00:22:06,520 --> 00:22:08,619 extends the amount 580 00:22:08,620 --> 00:22:09,819 of memory allocated. 581 00:22:11,080 --> 00:22:13,719 So my first guess, it 582 00:22:13,720 --> 00:22:15,759 wants to prevent a buffer overflow, which 583 00:22:15,760 --> 00:22:18,159 I think is very, very important. 584 00:22:18,160 --> 00:22:20,109 And here it's really for me, it's really 585 00:22:20,110 --> 00:22:22,329 annoying. There's no patch description. 586 00:22:22,330 --> 00:22:25,599 I don't know if this is the proper fix. 587 00:22:25,600 --> 00:22:27,879 Is this a hacky workaround? 588 00:22:27,880 --> 00:22:30,429 Or is there something open w.r.t 589 00:22:30,430 --> 00:22:32,439 specific because they hacked something 590 00:22:32,440 --> 00:22:33,440 out somewhere? 591 00:22:35,110 --> 00:22:37,209 And in order for me to find 592 00:22:37,210 --> 00:22:40,119 out if this is a bug fix, I basically 593 00:22:40,120 --> 00:22:42,399 have to do all the engineering work again 594 00:22:42,400 --> 00:22:44,289 to find out what, what the status of this 595 00:22:44,290 --> 00:22:45,290 patches. 596 00:22:45,910 --> 00:22:47,649 So this is why I think this patches is 597 00:22:47,650 --> 00:22:48,650 extremely obvious 598 00:22:50,650 --> 00:22:51,910 when I work commercially. 599 00:22:53,800 --> 00:22:55,929 It's also true that sometimes 600 00:22:55,930 --> 00:22:57,399 you get patches exactly like this. 601 00:22:57,400 --> 00:22:58,719 You have no idea what they were, where 602 00:22:58,720 --> 00:22:59,799 they came from. You can't. 603 00:22:59,800 --> 00:23:00,969 There's nobody took what you could 604 00:23:00,970 --> 00:23:03,039 contact and you have no idea if this is 605 00:23:03,040 --> 00:23:04,040 important to a rubbish. 606 00:23:07,380 --> 00:23:09,839 So what do you need to make 607 00:23:09,840 --> 00:23:11,549 with this patch check if it still 608 00:23:11,550 --> 00:23:13,619 applies? Maybe someone else has 609 00:23:13,620 --> 00:23:15,689 already fixed the same problem and has 610 00:23:15,690 --> 00:23:17,849 a proper commit message 611 00:23:17,850 --> 00:23:19,509 so you could understand what's going on. 612 00:23:19,510 --> 00:23:21,149 I can tell you it still applies to the 613 00:23:21,150 --> 00:23:23,339 current kernel. So if it's an issue, 614 00:23:23,340 --> 00:23:24,660 if it's a buck, it's still open 615 00:23:26,220 --> 00:23:28,049 check. What I just mentioned, check if 616 00:23:28,050 --> 00:23:30,179 it's a workaround, the custom case 617 00:23:30,180 --> 00:23:32,369 or an important bug fix on 618 00:23:32,370 --> 00:23:34,439 C or related to that check if 619 00:23:34,440 --> 00:23:36,539 the patch has dependencies or if it's 620 00:23:36,540 --> 00:23:37,769 a standalone doc fix. 621 00:23:39,660 --> 00:23:41,339 And if you found out that it's something 622 00:23:41,340 --> 00:23:43,439 which should be upstream again at 623 00:23:43,440 --> 00:23:45,599 Patch, however, I leave it up to you. 624 00:23:45,600 --> 00:23:47,699 If you're tested on real hardware, send 625 00:23:47,700 --> 00:23:49,889 it upstream and be around 626 00:23:49,890 --> 00:23:51,029 to answer questions. 627 00:23:52,950 --> 00:23:53,950 And yeah, 628 00:23:55,020 --> 00:23:57,959 if it's really about fixed and 629 00:23:57,960 --> 00:23:59,999 then it fixes a buffer overflow and it 630 00:24:00,000 --> 00:24:01,230 should be so upstream. 631 00:24:03,540 --> 00:24:05,669 So if any one of you is familiar 632 00:24:05,670 --> 00:24:08,159 with that PGP interface and 633 00:24:08,160 --> 00:24:10,139 actually knows if there is a bug fix, 634 00:24:10,140 --> 00:24:11,140 please hurry up. 635 00:24:19,310 --> 00:24:21,369 What I also want to mention, this is not 636 00:24:21,370 --> 00:24:23,079 black and white, not it's not all or 637 00:24:23,080 --> 00:24:24,080 nothing. 638 00:24:24,760 --> 00:24:25,760 I know that 639 00:24:26,920 --> 00:24:28,119 it isn't the same. 640 00:24:28,120 --> 00:24:29,679 What I said in the beginning might apply 641 00:24:29,680 --> 00:24:31,989 for you. You just stumble over the patch, 642 00:24:31,990 --> 00:24:33,579 but you have something else in your 643 00:24:33,580 --> 00:24:35,859 focus. So you don't really want to spend 644 00:24:35,860 --> 00:24:37,959 time too much time on upstream a patch 645 00:24:37,960 --> 00:24:39,310 you're not mainly interested in. 646 00:24:40,500 --> 00:24:42,969 But that's what what I think where 647 00:24:42,970 --> 00:24:44,919 also where small steps end up. 648 00:24:44,920 --> 00:24:47,199 So if you just happen to know 649 00:24:47,200 --> 00:24:48,969 that this is a bug fix, or it can say 650 00:24:48,970 --> 00:24:50,509 something about the patch which has 651 00:24:50,510 --> 00:24:52,899 useful information just to 652 00:24:52,900 --> 00:24:55,059 add to the patch pattern 653 00:24:55,060 --> 00:24:58,089 and send this a patch to open w.r.t 654 00:24:58,090 --> 00:24:59,739 that won't make the patch immediately go 655 00:24:59,740 --> 00:25:01,809 upstream to the Linux kernel, but it 656 00:25:01,810 --> 00:25:03,369 will help other people to understand 657 00:25:03,370 --> 00:25:05,049 what's going on with that patch. 658 00:25:05,050 --> 00:25:06,819 And I really, really think that just 659 00:25:06,820 --> 00:25:08,949 adding a patch headers is definitely 660 00:25:08,950 --> 00:25:10,899 worth an commit and not only changing 661 00:25:10,900 --> 00:25:11,900 code. 662 00:25:15,790 --> 00:25:17,889 Sometimes people ask me how to 663 00:25:17,890 --> 00:25:20,529 get into Linux kernel development, 664 00:25:20,530 --> 00:25:22,059 and I think this is a 665 00:25:24,430 --> 00:25:26,499 good, good way to start an open 666 00:25:26,500 --> 00:25:28,749 w.r.t supports a lot of devices 667 00:25:28,750 --> 00:25:31,089 and a lot of them can be bought for very, 668 00:25:31,090 --> 00:25:33,409 very little money these days on 669 00:25:33,410 --> 00:25:34,809 an auction site. 670 00:25:34,810 --> 00:25:35,920 We auction sites 671 00:25:37,180 --> 00:25:38,829 and it's a good way to get into kernel 672 00:25:38,830 --> 00:25:40,989 hacking by just buy one such cheap 673 00:25:40,990 --> 00:25:43,899 thing get the version, 674 00:25:43,900 --> 00:25:45,639 which is kernel version, which is inside 675 00:25:45,640 --> 00:25:47,139 open. You actually get it running and 676 00:25:47,140 --> 00:25:48,999 then try to do to upgrade the kernel to 677 00:25:49,000 --> 00:25:50,529 something more recent, even the most 678 00:25:50,530 --> 00:25:51,530 recent. 679 00:25:52,480 --> 00:25:54,729 This can be somewhere which 680 00:25:54,730 --> 00:25:57,009 is sometimes needed to test one 681 00:25:57,010 --> 00:25:58,779 single patch. Then you find out, Oh no, I 682 00:25:58,780 --> 00:26:00,669 have to port the whole platform. 683 00:26:00,670 --> 00:26:02,829 This can be extra work 684 00:26:02,830 --> 00:26:05,409 and it can make you go to work, go away. 685 00:26:05,410 --> 00:26:07,359 But if you're interested and said, Hey, I 686 00:26:07,360 --> 00:26:09,219 want to learn something about Linux, 687 00:26:09,220 --> 00:26:10,569 especially embedded Linux kernel 688 00:26:10,570 --> 00:26:12,069 development, that's a really good way to 689 00:26:12,070 --> 00:26:13,070 learn things. 690 00:26:14,020 --> 00:26:15,279 So I can recommend that 691 00:26:16,960 --> 00:26:19,209 what I have not talked about, 692 00:26:19,210 --> 00:26:20,980 there are nightmare patches too. 693 00:26:22,570 --> 00:26:25,209 You usually get them from chip vendors 694 00:26:25,210 --> 00:26:26,829 May one. 695 00:26:26,830 --> 00:26:28,569 One thing where you can easily detect 696 00:26:28,570 --> 00:26:30,519 into like one or two megabytes in size 697 00:26:30,520 --> 00:26:31,779 and patch everything at once. 698 00:26:33,760 --> 00:26:36,009 So with that, you have really a 699 00:26:36,010 --> 00:26:37,209 different set of problems. 700 00:26:37,210 --> 00:26:39,489 You split up into 701 00:26:39,490 --> 00:26:41,409 separate chunks, decide on each chunk of 702 00:26:41,410 --> 00:26:42,819 its use, useful or not. 703 00:26:44,260 --> 00:26:46,089 This is a nightmare, and they often 704 00:26:46,090 --> 00:26:48,009 contain useless changes fixing 705 00:26:48,010 --> 00:26:50,439 whitespace, adapting to some personal 706 00:26:50,440 --> 00:26:52,029 coding style, making everything look 707 00:26:52,030 --> 00:26:53,049 different for nothing. 708 00:26:56,050 --> 00:26:57,579 But let's start with the lower hanging 709 00:26:57,580 --> 00:27:00,189 fruits from which I hope to 710 00:27:00,190 --> 00:27:01,809 hopefully showed you some 711 00:27:02,920 --> 00:27:05,169 and hopefully presented you some ways 712 00:27:05,170 --> 00:27:06,170 to do that. 713 00:27:07,600 --> 00:27:10,059 So I hope that 714 00:27:10,060 --> 00:27:11,949 more patches are coming upstream. 715 00:27:11,950 --> 00:27:14,109 And one thing I also want 716 00:27:14,110 --> 00:27:16,689 to mention if you create patches. 717 00:27:16,690 --> 00:27:18,609 Think about sending them upstream in the 718 00:27:18,610 --> 00:27:20,679 first send, make some good patches or 719 00:27:20,680 --> 00:27:22,749 at least make them not ugly patches 720 00:27:22,750 --> 00:27:25,149 and describe them to some extent. 721 00:27:25,150 --> 00:27:27,249 Some people later can pick them up and 722 00:27:27,250 --> 00:27:28,660 do something more useful with them. 723 00:27:29,920 --> 00:27:31,750 Yeah, that was 724 00:27:33,130 --> 00:27:34,239 the contents. 725 00:27:34,240 --> 00:27:36,459 Talk in half an hour, and that's what I 726 00:27:36,460 --> 00:27:37,460 wanted to give you 727 00:27:38,920 --> 00:27:40,099 from my experience. 728 00:27:40,100 --> 00:27:41,100 I. 729 00:27:52,070 --> 00:27:53,839 I really wish you a happy hacking, 730 00:27:53,840 --> 00:27:56,149 because in my opinion, it's great fun, 731 00:27:56,150 --> 00:27:57,589 and if you have questions, I think we 732 00:27:57,590 --> 00:27:59,719 have one minute left 733 00:27:59,720 --> 00:28:01,909 and above it, feel free to meet 734 00:28:01,910 --> 00:28:03,319 me somewhere here at the conference. 735 00:28:03,320 --> 00:28:05,599 I will be here till the end or write 736 00:28:05,600 --> 00:28:07,639 me an email. I'll be around. 737 00:28:07,640 --> 00:28:09,529 And if you leave the room, please try to 738 00:28:09,530 --> 00:28:11,329 be quiet so we can hear the questions if 739 00:28:11,330 --> 00:28:12,330 there are any. 740 00:28:14,150 --> 00:28:15,559 Does the internet have questions? 741 00:28:19,210 --> 00:28:21,519 No, somebody's here. 742 00:28:21,520 --> 00:28:22,929 No, no. 743 00:28:22,930 --> 00:28:23,930 OK. 744 00:28:25,360 --> 00:28:27,109 Right, thank you very much. 745 00:28:27,110 --> 00:28:29,439 We already gave Motorola 746 00:28:29,440 --> 00:28:29,829 One 747 00:28:29,830 --> 00:28:30,880 round of applause.