WEBVTT 00:00:00.000 --> 00:00:00.392 host. 00:00:00.452 --> 00:00:01.935 Hey, welcome back to Community & Code. 00:00:02.156 --> 00:00:03.218 I'm your host, Chris Reynolds, 00:00:03.688 --> 00:00:05.189 and today's episode is one I've been 00:00:05.269 --> 00:00:07.491 genuinely looking forward to. 00:00:07.551 --> 00:00:08.751 My guest today is Juliette 00:00:08.972 --> 00:00:09.752 Reinders-Fulmer. 00:00:10.152 --> 00:00:11.613 She's been in the PHP and open source 00:00:11.653 --> 00:00:12.994 world for close to twenty years, 00:00:13.414 --> 00:00:15.716 and you've probably used her work today, 00:00:15.952 --> 00:00:17.853 possibly multiple times, and had no idea. 00:00:18.333 --> 00:00:19.533 That's kind of the whole thing. 00:00:20.253 --> 00:00:22.154 The stuff that she maintains runs silently 00:00:22.194 --> 00:00:24.054 in CI pipelines all over the world, 00:00:24.334 --> 00:00:25.815 doing the thankless work that keeps 00:00:25.895 --> 00:00:27.315 everyone's code from falling apart. 00:00:27.855 --> 00:00:29.456 And most of the people depending on that 00:00:29.476 --> 00:00:30.716 work couldn't tell you her name. 00:00:31.938 --> 00:00:33.539 We talk about what it actually means to 00:00:33.559 --> 00:00:34.640 give back to open source, 00:00:35.000 --> 00:00:35.961 not in the abstract, 00:00:35.981 --> 00:00:37.142 but with real practices, 00:00:37.662 --> 00:00:39.544 and what happens when the people who built 00:00:39.564 --> 00:00:40.765 the internet start retiring. 00:00:41.197 --> 00:00:43.218 Juliette has some genuinely spicy opinions 00:00:43.238 --> 00:00:44.659 about AI that are some of the more 00:00:44.699 --> 00:00:46.461 coherent and technically grounded takes 00:00:46.521 --> 00:00:47.362 I've heard on this show, 00:00:47.802 --> 00:00:49.543 and definitely not the AI is going to 00:00:49.563 --> 00:00:51.184 change everything in the best way possible 00:00:51.244 --> 00:00:51.765 perspective. 00:00:52.944 --> 00:00:54.326 We talk about her path into tech, 00:00:54.666 --> 00:00:55.908 her philosophy on LinkedIn, 00:00:55.968 --> 00:00:57.430 and the story of how she accidentally 00:00:57.450 --> 00:00:58.832 became the steward of one of the most 00:00:58.932 --> 00:01:00.814 widely used PHP tools on the planet. 00:01:01.515 --> 00:01:02.537 This is Community & Code. 00:01:02.997 --> 00:01:03.378 Let's go. 00:01:23.324 --> 00:01:24.425 Welcome to Community Code. 00:01:24.624 --> 00:01:25.485 Today on the show, 00:01:25.565 --> 00:01:29.088 I've got Juliet Rainiers-Fulmer, who is, 00:01:30.088 --> 00:01:32.288 I see her flinch at my pronunciation, 00:01:32.349 --> 00:01:32.929 I'm sorry. 00:01:33.710 --> 00:01:36.572 I'll let her pronounce it correctly. 00:01:37.873 --> 00:01:39.934 If you have been in the open source 00:01:40.074 --> 00:01:43.275 PHP world for any amount of time, 00:01:43.536 --> 00:01:45.257 you've probably seen JRF, 00:01:46.617 --> 00:01:48.759 kind of everywhere i see i feel like 00:01:48.778 --> 00:01:50.379 i see your handle like literally 00:01:50.419 --> 00:01:52.879 everywhere but for anyone who might not 00:01:52.940 --> 00:01:56.221 know you juliet uh who are you and 00:01:56.341 --> 00:02:00.423 and what do you do can i just 00:02:00.442 --> 00:02:02.683 respond to what you just said first sure 00:02:02.783 --> 00:02:04.624 yes a lot of the time i feel 00:02:04.645 --> 00:02:05.744 completely invisible 00:02:08.451 --> 00:02:09.551 And that, 00:02:09.591 --> 00:02:11.351 because a lot of what I work on 00:02:11.551 --> 00:02:13.393 are like the tooling people use, 00:02:13.472 --> 00:02:16.554 which just silently run in your CI and 00:02:16.634 --> 00:02:18.375 people don't even notice. 00:02:18.396 --> 00:02:20.378 So I feel very invisible a lot of 00:02:20.417 --> 00:02:20.718 the time. 00:02:21.018 --> 00:02:23.658 So it's interesting to see that in your 00:02:23.679 --> 00:02:25.079 perception, that's very different. 00:02:25.100 --> 00:02:26.441 So yeah, 00:02:26.501 --> 00:02:28.983 what I work on largely are the tooling 00:02:29.003 --> 00:02:29.643 in the background, 00:02:29.662 --> 00:02:32.605 things like PHP CodeSniffer, PHP Parallel, 00:02:32.644 --> 00:02:32.885 Lint. 00:02:33.933 --> 00:02:35.715 PHP CSU tells, 00:02:36.835 --> 00:02:39.337 but also test tooling like PHP unit 00:02:39.376 --> 00:02:41.638 polyfills, PHP compatibility. 00:02:42.097 --> 00:02:45.819 There's a whole range of those tools you 00:02:46.079 --> 00:02:48.721 use when you are coding to make sure 00:02:48.762 --> 00:02:51.442 that your code complies with certain 00:02:51.483 --> 00:02:52.203 standards, 00:02:52.644 --> 00:02:54.984 can run on certain PHP versions, 00:02:55.385 --> 00:02:57.986 can be tested on certain PHP versions, 00:02:58.527 --> 00:02:59.807 et cetera. 00:02:59.826 --> 00:03:01.748 So those kind of tooling is what I 00:03:01.808 --> 00:03:02.588 mostly work on. 00:03:03.927 --> 00:03:05.368 And you've been really, 00:03:05.429 --> 00:03:07.950 really deep in PHP for a really long 00:03:07.990 --> 00:03:08.311 time, 00:03:08.352 --> 00:03:11.353 but I want to put a pin in 00:03:11.394 --> 00:03:13.734 that and come back to it and start 00:03:13.814 --> 00:03:17.078 off by hearing about, 00:03:17.097 --> 00:03:19.338 I'd love for you to share how you 00:03:19.420 --> 00:03:22.242 got interested in technology, 00:03:22.302 --> 00:03:24.102 in computers, in software development. 00:03:24.722 --> 00:03:26.444 What is the story that got you involved 00:03:26.564 --> 00:03:28.245 in this stuff in the first place? 00:03:30.525 --> 00:03:32.287 We're going back way back. 00:03:33.969 --> 00:03:36.071 I did actually specialize in IT when I 00:03:36.111 --> 00:03:37.150 did my business degree. 00:03:38.091 --> 00:03:39.333 But to be honest, 00:03:40.154 --> 00:03:42.456 I don't think anything I learned in that 00:03:42.516 --> 00:03:44.476 specialization was actually useful. 00:03:46.839 --> 00:03:48.600 Yeah. 00:03:48.619 --> 00:03:51.363 So I wasn't interested in technology 00:03:51.903 --> 00:03:52.403 anyway. 00:03:52.422 --> 00:03:52.884 Yeah. 00:03:53.981 --> 00:03:56.123 And then at some point I came across 00:03:56.202 --> 00:04:00.804 this nonprofit organization and it would 00:04:00.926 --> 00:04:02.046 have been really, really, 00:04:02.125 --> 00:04:03.607 really hard to find them. 00:04:04.147 --> 00:04:06.988 And we're talking nineteen ninety nine two 00:04:07.029 --> 00:04:07.569 thousand. 00:04:08.369 --> 00:04:10.451 So when I first met the people behind 00:04:10.490 --> 00:04:11.772 this nonprofit, I was like, 00:04:11.992 --> 00:04:13.412 why don't you have a website? 00:04:13.433 --> 00:04:16.635 And they were like, yeah, 00:04:16.674 --> 00:04:18.396 that's one of those things we still have 00:04:18.476 --> 00:04:19.957 on our to do lists. 00:04:22.218 --> 00:04:25.661 And I then uttered the unfortunate phrase, 00:04:26.942 --> 00:04:28.184 maybe I can help. 00:04:29.905 --> 00:04:31.607 Yep, yep. 00:04:31.666 --> 00:04:32.248 Yeah. 00:04:32.267 --> 00:04:36.531 So I've been playing around a little bit 00:04:36.571 --> 00:04:38.634 with HTML, just experimenting, 00:04:38.694 --> 00:04:39.654 seeing what it was. 00:04:39.674 --> 00:04:40.535 I mean, 00:04:40.615 --> 00:04:42.658 I used the Internet a lot in my 00:04:42.697 --> 00:04:43.398 work already. 00:04:45.476 --> 00:04:46.057 But that was it. 00:04:46.077 --> 00:04:48.077 But at that time, 00:04:48.958 --> 00:04:50.779 using the internet a lot for your work 00:04:50.820 --> 00:04:52.641 was extraordinary already. 00:04:52.840 --> 00:04:54.561 I was like way ahead of the curve 00:04:54.661 --> 00:04:55.222 at that time. 00:04:56.542 --> 00:04:57.923 So based on that, 00:04:58.023 --> 00:04:59.625 I felt I could at least give them 00:04:59.665 --> 00:05:02.207 some advice and help them a little bit. 00:05:02.406 --> 00:05:06.328 And I ended up building their website and 00:05:06.349 --> 00:05:08.350 then maintaining it for a number of years. 00:05:08.410 --> 00:05:11.652 And that started off with HTML with SSI. 00:05:13.018 --> 00:05:14.460 server-side includes, 00:05:15.161 --> 00:05:19.465 something nobody nowadays has heard of 00:05:19.486 --> 00:05:19.746 anymore. 00:05:20.207 --> 00:05:22.910 Then changed that to JavaScript includes, 00:05:23.030 --> 00:05:24.732 and then later added CSS. 00:05:24.873 --> 00:05:26.173 And then at some point, 00:05:26.815 --> 00:05:29.998 we switched towards a proper CMS. 00:05:31.679 --> 00:05:33.822 But yeah, this was how I 00:05:34.275 --> 00:05:37.918 got started and then starting actually 00:05:38.378 --> 00:05:40.758 developing and contributing to open source 00:05:40.798 --> 00:05:41.140 was like, 00:05:41.579 --> 00:05:44.640 I was using things which were open source. 00:05:45.462 --> 00:05:46.361 And to me, 00:05:47.041 --> 00:05:48.882 and this is really old school maybe, 00:05:48.962 --> 00:05:51.784 but I still feel that way. 00:05:52.084 --> 00:05:54.586 If you use something which people make 00:05:54.606 --> 00:05:58.467 available for free, you give back. 00:05:58.527 --> 00:06:01.669 Whether that is by adding a translation, 00:06:02.841 --> 00:06:07.591 or by funding the project or by adding 00:06:07.651 --> 00:06:09.534 a new feature, I don't care. 00:06:09.895 --> 00:06:10.858 Give back. 00:06:11.358 --> 00:06:13.644 If you use something, you give back. 00:06:14.349 --> 00:06:16.130 That is the premise of open source. 00:06:16.430 --> 00:06:18.490 That's how it was built. 00:06:18.870 --> 00:06:21.692 That was the idea of making it open 00:06:21.731 --> 00:06:23.692 source so everyone could contribute and we 00:06:23.712 --> 00:06:25.032 could all collaborate together. 00:06:25.512 --> 00:06:27.553 And the fact that that isn't being done 00:06:27.632 --> 00:06:28.173 anymore, 00:06:28.813 --> 00:06:31.454 largely because the vast majority of users 00:06:31.493 --> 00:06:33.195 have no clue what open source is, 00:06:33.235 --> 00:06:34.594 let alone that they're using it, 00:06:35.615 --> 00:06:38.455 is something which I see as extremely 00:06:38.495 --> 00:06:39.176 problematic. 00:06:40.325 --> 00:06:41.887 But let's talk about that later. 00:06:41.926 --> 00:06:42.348 But yeah, 00:06:42.428 --> 00:06:44.969 so one of the things I started doing 00:06:45.008 --> 00:06:46.289 was contributing back, 00:06:47.231 --> 00:06:48.692 partially by asking questions, 00:06:48.712 --> 00:06:50.914 but then also documenting the answers, 00:06:51.753 --> 00:06:54.596 whether it was in a JavaScript form or 00:06:54.916 --> 00:06:57.659 translating a Firefox extension. 00:06:59.459 --> 00:07:02.202 It was those little things and then that 00:07:02.341 --> 00:07:04.402 sort of spirals and... 00:07:05.443 --> 00:07:08.166 Yeah, went out of control a bit. 00:07:08.306 --> 00:07:08.947 Out of control. 00:07:09.829 --> 00:07:12.390 And maybe we'll talk about how in or 00:07:12.512 --> 00:07:15.334 out of control it is currently with your 00:07:15.354 --> 00:07:15.935 contributions. 00:07:15.995 --> 00:07:17.277 But yeah, no, 00:07:17.317 --> 00:07:19.438 that makes a lot of sense because for 00:07:19.478 --> 00:07:21.401 me as well, like when I first, 00:07:21.580 --> 00:07:23.743 like when I discovered WordPress, 00:07:24.923 --> 00:07:26.226 the thing that kept me 00:07:27.091 --> 00:07:31.373 like interested in using it was the fact 00:07:31.454 --> 00:07:33.474 that there was all of this documentation. 00:07:33.633 --> 00:07:34.435 There was like, 00:07:34.454 --> 00:07:35.954 it was really easy to find answers to 00:07:35.995 --> 00:07:36.654 questions. 00:07:36.974 --> 00:07:39.515 There was back then the IRC channel that 00:07:39.536 --> 00:07:42.096 you could drop into and ask questions. 00:07:42.656 --> 00:07:44.757 And there is this community around it that 00:07:44.798 --> 00:07:46.418 was really passionate and active. 00:07:46.899 --> 00:07:47.959 And yeah, 00:07:47.998 --> 00:07:51.680 when I felt like I knew enough stuff 00:07:51.760 --> 00:07:52.661 or knew something, 00:07:53.281 --> 00:07:55.303 Then I got involved in, like, 00:07:55.324 --> 00:07:56.445 the documentation team. 00:07:56.505 --> 00:07:57.466 I started speaking. 00:07:57.527 --> 00:07:58.428 I started, like, you know, 00:07:58.488 --> 00:08:02.092 writing stuff and eventually creating my 00:08:02.212 --> 00:08:03.594 own, like, plug-ins and things. 00:08:04.515 --> 00:08:07.279 And that's always been a thing that, like, 00:08:07.380 --> 00:08:07.861 I mean, that just... 00:08:08.781 --> 00:08:10.161 like, I don't even think about it really. 00:08:10.202 --> 00:08:11.782 Like it's like, if I'm making a thing, 00:08:11.822 --> 00:08:13.342 I'm probably making it open source. 00:08:13.402 --> 00:08:13.623 Right. 00:08:14.282 --> 00:08:16.883 Um, so, um, do you, 00:08:17.043 --> 00:08:20.185 do you feel like with the growth of, 00:08:20.524 --> 00:08:24.106 of the adoption of open source 00:08:24.166 --> 00:08:25.885 technologies by, you know, 00:08:25.906 --> 00:08:28.627 cause it's not just individuals that are 00:08:28.767 --> 00:08:29.527 using it anymore. 00:08:29.546 --> 00:08:29.747 I mean, 00:08:29.767 --> 00:08:31.527 not that it like ever was just 00:08:31.608 --> 00:08:32.488 individuals, right. 00:08:32.527 --> 00:08:32.868 But like, 00:08:33.553 --> 00:08:34.195 you know, 00:08:34.214 --> 00:08:36.315 WordPress is forty three percent of the 00:08:36.336 --> 00:08:37.437 Internet or whatever, right? 00:08:37.738 --> 00:08:37.998 Like, 00:08:38.317 --> 00:08:40.459 and a lot of that is driven by 00:08:41.260 --> 00:08:44.923 a larger market sort of interest in using 00:08:45.043 --> 00:08:47.086 open source as its tool, 00:08:48.786 --> 00:08:50.909 as opposed to proprietary systems that are 00:08:50.949 --> 00:08:51.608 closed source, 00:08:51.649 --> 00:08:53.310 like Adobe Experience Manager, 00:08:53.430 --> 00:08:54.591 that sort of thing. 00:08:54.632 --> 00:08:54.772 Like, 00:08:54.791 --> 00:08:58.776 do you see this rise of interest by 00:09:00.010 --> 00:09:01.851 people with a lot more money than you 00:09:01.872 --> 00:09:03.613 or me and organizations with a lot more 00:09:03.652 --> 00:09:05.474 money than you or me, um, 00:09:05.495 --> 00:09:07.317 contributing to the, 00:09:07.856 --> 00:09:10.839 the dip in giving back in this, 00:09:10.919 --> 00:09:12.341 this sort of like egalitarian, 00:09:12.380 --> 00:09:15.824 like open source, uh, you know, community. 00:09:16.044 --> 00:09:18.286 There is a term for it. 00:09:18.846 --> 00:09:20.789 And that term is very apt. 00:09:21.289 --> 00:09:25.053 It's called exploitative capitalism and 00:09:25.113 --> 00:09:26.394 it's happening all over. 00:09:27.118 --> 00:09:29.938 And it's definitely a part of why open 00:09:29.998 --> 00:09:33.839 source doesn't have enough contributors, 00:09:33.938 --> 00:09:36.079 let alone funding contribution. 00:09:36.620 --> 00:09:41.300 I mean, on an average Android phone, 00:09:42.161 --> 00:09:43.000 I think, seventy, 00:09:43.041 --> 00:09:45.180 if not ninety percent of the software on 00:09:45.240 --> 00:09:47.380 it, it's open source, 00:09:48.122 --> 00:09:50.642 except the end user doesn't know it. 00:09:51.622 --> 00:09:54.483 They are not being told that what they've 00:09:54.542 --> 00:09:56.302 bought is actually 00:09:57.175 --> 00:10:00.396 exploited on the work of on the shoulders 00:10:00.516 --> 00:10:02.696 of people who have done this work for 00:10:02.737 --> 00:10:05.698 free and not are not getting any money 00:10:06.498 --> 00:10:07.839 from the fact that they're buying that 00:10:07.898 --> 00:10:10.579 phone if you buy a car it has 00:10:10.639 --> 00:10:13.541 coal inside and and coal is just one 00:10:13.700 --> 00:10:15.681 example but there's so much more software 00:10:16.142 --> 00:10:19.662 in that navigation system and in that car 00:10:19.703 --> 00:10:21.863 system do you think those car 00:10:22.584 --> 00:10:25.906 manufacturers give one penny back to open 00:10:25.945 --> 00:10:26.325 source 00:10:27.330 --> 00:10:28.852 Right. 00:10:28.951 --> 00:10:29.152 Yes. 00:10:29.171 --> 00:10:30.373 There is a term for it. 00:10:30.473 --> 00:10:32.093 It's called exploitative capitalism. 00:10:32.454 --> 00:10:32.853 And yes, 00:10:32.954 --> 00:10:37.136 it's absolutely a large reason why open 00:10:37.156 --> 00:10:41.998 source is struggling because the end users 00:10:42.057 --> 00:10:44.639 don't even know they're using open source. 00:10:44.680 --> 00:10:45.119 They don't, 00:10:45.719 --> 00:10:47.761 they don't often don't even know what open 00:10:47.801 --> 00:10:48.502 source is, 00:10:50.222 --> 00:10:52.623 but they are using it every day and 00:10:52.883 --> 00:10:53.084 they, 00:10:53.738 --> 00:10:54.419 kind of like, oh, 00:10:54.459 --> 00:10:55.400 but if that's the case, 00:10:55.959 --> 00:10:58.300 then the car manufacturer will, you know, 00:10:59.401 --> 00:11:01.921 put money towards the people who build the 00:11:01.961 --> 00:11:04.181 software they're using and selling with 00:11:04.201 --> 00:11:04.701 their cars. 00:11:06.243 --> 00:11:08.243 They have that expectation and it's just 00:11:08.282 --> 00:11:11.805 not happening. 00:11:11.945 --> 00:11:12.504 And to me, 00:11:12.905 --> 00:11:16.105 this is problematic and not just in the 00:11:16.146 --> 00:11:17.465 day to day problematic. 00:11:17.965 --> 00:11:19.666 I'm looking at the longer term future. 00:11:19.767 --> 00:11:21.667 I'm looking at, you know, in ten, 00:11:21.708 --> 00:11:22.787 fifteen years time, 00:11:23.403 --> 00:11:25.484 a lot of the original open source 00:11:25.504 --> 00:11:27.266 maintainers reach pension age. 00:11:28.546 --> 00:11:32.468 So we're talking a significant number of 00:11:32.608 --> 00:11:34.589 people reaching pension age or, 00:11:35.368 --> 00:11:36.429 let's be realistic, 00:11:36.488 --> 00:11:39.491 dying in the next fifteen to twenty years. 00:11:40.871 --> 00:11:43.252 If we don't start training the next 00:11:43.291 --> 00:11:48.033 generation of maintainers now, 00:11:48.153 --> 00:11:49.594 open source is going to have a huge 00:11:49.634 --> 00:11:49.974 problem. 00:11:51.145 --> 00:11:53.647 because all those projects are going to go 00:11:53.806 --> 00:11:58.551 unmaintained or semi-maintained by someone 00:11:58.590 --> 00:11:59.992 who thinks they know what they're doing 00:12:00.031 --> 00:12:00.872 but doesn't really. 00:12:02.172 --> 00:12:04.195 And then we have the security issues which 00:12:04.395 --> 00:12:05.276 get reported and 00:12:06.325 --> 00:12:07.246 You hear what I'm saying? 00:12:07.565 --> 00:12:09.046 Yes, yes, absolutely. 00:12:09.066 --> 00:12:12.248 And I think this is very, like, 00:12:13.290 --> 00:12:16.291 I have a screwball to throw in in 00:12:16.331 --> 00:12:18.652 a second, but, like, even, like, 00:12:18.693 --> 00:12:20.834 PHP lost its lead developer a couple years 00:12:20.853 --> 00:12:22.075 ago, and that was a big deal, too. 00:12:22.695 --> 00:12:23.455 So, like, this is, like, 00:12:23.536 --> 00:12:24.696 already starting to happen. 00:12:25.076 --> 00:12:27.238 PHP doesn't have a lead developer. 00:12:29.280 --> 00:12:30.259 No, there never was. 00:12:30.720 --> 00:12:30.940 Okay. 00:12:31.741 --> 00:12:34.162 It's a group effort of a group of 00:12:34.203 --> 00:12:35.564 volunteer maintainers 00:12:36.378 --> 00:12:39.061 Some of them which are now partially or 00:12:39.161 --> 00:12:41.344 completely funded by the PHP Foundation, 00:12:41.383 --> 00:12:44.246 which is completely separate from the PHP 00:12:44.266 --> 00:12:47.589 project, by the way. 00:12:47.608 --> 00:12:51.113 But there is no hierarchy there. 00:12:51.233 --> 00:12:54.876 There is a hierarchy of respect for people 00:12:54.916 --> 00:12:55.936 who have contributed, 00:12:56.456 --> 00:12:58.299 but there is no formal hierarchy. 00:12:58.339 --> 00:13:01.842 There is no one voice has more value 00:13:01.882 --> 00:13:02.642 than another. 00:13:03.554 --> 00:13:05.455 I just want to make sure that this 00:13:05.496 --> 00:13:06.757 is clear for people. 00:13:06.777 --> 00:13:07.117 Yeah, no, I mean, 00:13:07.156 --> 00:13:08.638 that's more than I know. 00:13:08.738 --> 00:13:10.160 And that's also how it is in most 00:13:10.280 --> 00:13:11.200 open source projects. 00:13:12.222 --> 00:13:13.483 At some point, yes, 00:13:13.542 --> 00:13:15.504 the people who have commit rights have a 00:13:15.545 --> 00:13:17.607 bigger say. 00:13:17.686 --> 00:13:21.229 But, and yeah, if you're like me, 00:13:21.469 --> 00:13:23.211 the only one with commit rights in some 00:13:23.252 --> 00:13:24.593 projects, that's problematic. 00:13:24.772 --> 00:13:26.174 And I don't want to be the only 00:13:26.273 --> 00:13:26.393 one. 00:13:26.655 --> 00:13:27.835 I really don't want to be. 00:13:27.955 --> 00:13:28.055 Yeah. 00:13:29.011 --> 00:13:30.092 But a lot of projects, 00:13:30.252 --> 00:13:31.772 including the PHP project, 00:13:31.852 --> 00:13:34.012 have a lot more committers. 00:13:34.993 --> 00:13:36.814 And then that hierarchy doesn't 00:13:36.873 --> 00:13:37.854 necessarily exist. 00:13:38.874 --> 00:13:43.397 This conversation about the maintainers 00:13:43.456 --> 00:13:45.137 and lead developers of open source 00:13:45.176 --> 00:13:47.238 projects sort of aging out of the system 00:13:48.398 --> 00:13:52.660 and the need for new developers to learn 00:13:52.680 --> 00:13:53.881 and be sort of trained up to be 00:13:53.901 --> 00:13:55.980 able to take on, to carry the torch, 00:13:56.622 --> 00:13:56.842 is... 00:13:57.998 --> 00:14:00.219 It dovetails with another thing that I've 00:14:00.239 --> 00:14:02.280 been thinking about that I'd love to hear 00:14:02.619 --> 00:14:04.139 if you've thought about or what your 00:14:04.160 --> 00:14:04.901 thoughts are on it, 00:14:05.241 --> 00:14:07.960 which is the rise of AI. 00:14:08.902 --> 00:14:14.782 Because the theory is... 00:14:15.642 --> 00:14:17.163 The thing that I hear immediately in my 00:14:17.224 --> 00:14:19.663 head of the answer that I would hear 00:14:19.724 --> 00:14:21.964 from, I don't know, status quo, is like, 00:14:22.104 --> 00:14:22.665 oh, well, 00:14:22.685 --> 00:14:23.805 that's not going to matter in ten to 00:14:23.825 --> 00:14:25.366 fifteen years because AI is going to write 00:14:25.386 --> 00:14:26.546 all that code anyway. 00:14:26.626 --> 00:14:27.166 Bullshit. 00:14:28.512 --> 00:14:33.753 So so and and what I observe in 00:14:33.853 --> 00:14:37.494 various places within the tech industry is 00:14:37.594 --> 00:14:39.195 companies and maybe not so much now. 00:14:39.234 --> 00:14:40.575 I think there is a really big move 00:14:40.595 --> 00:14:42.616 towards this last year, 00:14:42.735 --> 00:14:44.316 and maybe people are realizing that maybe 00:14:44.336 --> 00:14:45.717 this this isn't quite ready yet. 00:14:46.257 --> 00:14:49.537 But there's this idea that we don't 00:14:49.578 --> 00:14:52.258 necessarily need to hire as many 00:14:52.319 --> 00:14:54.540 developers because we can have 00:14:55.420 --> 00:14:58.080 ai do the work of the junior developers 00:14:58.360 --> 00:15:00.002 and the problem that i've been talking 00:15:00.041 --> 00:15:02.042 about with various people and the thing 00:15:02.062 --> 00:15:03.444 that i've been thinking about is you can't 00:15:03.483 --> 00:15:05.785 have junior developers and have all your 00:15:05.825 --> 00:15:07.445 senior developers be reviewing the code of 00:15:07.485 --> 00:15:10.046 the ai if you don't hire the junior 00:15:10.066 --> 00:15:13.189 developers to write the actual code 00:15:13.829 --> 00:15:15.369 because they're never going to become 00:15:15.530 --> 00:15:15.969 senior 00:15:17.902 --> 00:15:20.483 if they never if they were never hired 00:15:20.503 --> 00:15:22.204 as a junior yeah if you never have 00:15:22.283 --> 00:15:23.724 you juniors you're never going to get 00:15:23.763 --> 00:15:26.504 seniors right but there is this i mean 00:15:27.405 --> 00:15:29.584 i i really rather we don't have a 00:15:29.645 --> 00:15:31.945 conversation about a guy because that will 00:15:31.985 --> 00:15:36.786 fill the rest of the time but let 00:15:36.826 --> 00:15:38.767 me make some short statements about ai 00:15:38.806 --> 00:15:42.787 first i'll be employed for life i will 00:15:42.828 --> 00:15:44.187 have work for the rest of my life 00:15:44.671 --> 00:15:47.373 Because the bugs AI creates are far more 00:15:47.435 --> 00:15:50.076 subtle than the bugs most humans create, 00:15:50.477 --> 00:15:53.719 which means that only real experts will be 00:15:53.759 --> 00:15:54.940 able to find them and fix them. 00:15:55.342 --> 00:15:56.922 And it costs a lot more time. 00:15:57.863 --> 00:15:59.224 So I'll be employed for life. 00:15:59.264 --> 00:16:01.367 Please do keep on coding. 00:16:02.267 --> 00:16:04.629 I love you. 00:16:04.650 --> 00:16:07.291 But having said that, AI, 00:16:07.352 --> 00:16:09.013 the way it's currently trained, 00:16:11.243 --> 00:16:14.325 It has trained itself largely on open 00:16:14.364 --> 00:16:16.445 source code without permission. 00:16:17.565 --> 00:16:21.608 What this literally means is if you use 00:16:21.748 --> 00:16:22.088 AI, 00:16:22.147 --> 00:16:25.169 you are legitimizing the theft of 00:16:25.228 --> 00:16:29.610 copyrighted code. 00:16:29.651 --> 00:16:31.632 For me, that is an ethical thing. 00:16:32.252 --> 00:16:36.474 We are legitimizing theft if we approve of 00:16:36.613 --> 00:16:38.474 AI. 00:16:38.555 --> 00:16:39.415 Aside from that, 00:16:40.526 --> 00:16:43.248 the AI does not take the license into 00:16:43.328 --> 00:16:44.248 account at all. 00:16:45.030 --> 00:16:47.011 So in PHP Coach Sniffer, 00:16:47.190 --> 00:16:50.294 I have a very explicit section in the 00:16:50.353 --> 00:16:53.616 contributing guide saying, do not use AI. 00:16:55.498 --> 00:16:58.739 Unless you can guarantee that that AI has 00:16:58.940 --> 00:17:03.103 not been trained on software which has a 00:17:03.203 --> 00:17:06.406 license which is incompatible with the BSD 00:17:06.445 --> 00:17:09.088 license which Coach Sniffer uses, 00:17:09.811 --> 00:17:12.532 I cannot accept the code because 00:17:12.713 --> 00:17:15.174 relicensing a twenty year old project 00:17:15.753 --> 00:17:18.514 means getting permission of hundreds and 00:17:18.555 --> 00:17:20.116 hundreds of contributors, 00:17:20.796 --> 00:17:22.617 all of them which need to give permission 00:17:22.757 --> 00:17:23.816 for the relicensing. 00:17:24.998 --> 00:17:28.898 And so if something with if the AI 00:17:28.919 --> 00:17:31.180 was trained on code which included GPL 00:17:31.200 --> 00:17:33.860 code, GPL being a firewall license, 00:17:35.241 --> 00:17:37.201 if that code would end up in CodeSniffer, 00:17:38.576 --> 00:17:40.578 it would have it would literally force 00:17:40.618 --> 00:17:42.517 Coach Sniffer to have to relicense and I 00:17:42.557 --> 00:17:43.318 can't do that. 00:17:44.858 --> 00:17:46.138 So this is a problem. 00:17:46.898 --> 00:17:52.141 The second part of it is and seriously, 00:17:52.320 --> 00:17:53.961 I've thought a lot about it and I 00:17:54.921 --> 00:17:56.002 absolutely detest it. 00:17:56.722 --> 00:17:59.503 The second part of it is if someone 00:18:00.083 --> 00:18:02.103 sends me a PR created with AI, 00:18:05.401 --> 00:18:07.681 It's very rare someone who actually knows 00:18:07.722 --> 00:18:10.084 what they're doing is doing that. 00:18:10.123 --> 00:18:12.305 So most of the time it's someone who 00:18:12.445 --> 00:18:13.244 is basically saying, 00:18:13.344 --> 00:18:14.886 I don't know what the hell I'm doing. 00:18:15.546 --> 00:18:18.927 So I'm using AI to sort of frame 00:18:18.968 --> 00:18:19.667 what I want. 00:18:20.309 --> 00:18:24.411 And then you sort it out. 00:18:24.450 --> 00:18:27.031 I've reviewed that PR as if it's someone 00:18:27.051 --> 00:18:30.134 who actually knows what they're doing. 00:18:30.253 --> 00:18:33.435 So I give them feedback as if they're 00:18:33.795 --> 00:18:34.215 an equal. 00:18:35.787 --> 00:18:37.731 they will not understand a word of my 00:18:37.751 --> 00:18:38.291 feedback. 00:18:38.712 --> 00:18:40.535 So they go back to the AI, 00:18:40.975 --> 00:18:42.839 feed my feedback into the AI, 00:18:42.980 --> 00:18:44.542 ask the AI to give me an answer. 00:18:46.369 --> 00:18:48.291 Do you think that's a useful way of 00:18:48.331 --> 00:18:49.393 spending my time? 00:18:49.793 --> 00:18:52.176 I feel like I've watched meme videos that, 00:18:52.337 --> 00:18:54.819 that, that are like this precise, 00:18:54.878 --> 00:18:57.041 like interaction where you have like the 00:18:57.061 --> 00:18:59.905 developer at the one computer and you tell 00:18:59.925 --> 00:19:01.005 the developer, do this thing. 00:19:01.285 --> 00:19:03.529 And he goes to ChatGBT and ChatGBT does 00:19:03.549 --> 00:19:04.970 the thing and then submits the PR. 00:19:05.030 --> 00:19:06.631 And then somebody else like looks at the 00:19:06.651 --> 00:19:07.352 PR and like, 00:19:08.048 --> 00:19:09.928 but the other person also doesn't know how 00:19:09.948 --> 00:19:11.329 to write, how to write software. 00:19:11.349 --> 00:19:11.810 So they write, 00:19:11.990 --> 00:19:13.610 they put the PR into the AI and 00:19:13.691 --> 00:19:15.851 then you have like just these two AIs 00:19:15.871 --> 00:19:17.772 having a conversation with the humans as 00:19:17.811 --> 00:19:18.713 the medium, like, 00:19:19.153 --> 00:19:21.474 like sending the messages through like. 00:19:21.914 --> 00:19:23.415 Which I think is the wrong way around. 00:19:23.514 --> 00:19:25.056 Yes. 00:19:25.096 --> 00:19:28.456 So yeah, it's a way of way. 00:19:28.736 --> 00:19:29.038 I mean, 00:19:29.118 --> 00:19:32.158 for me to coach an AI generated PR 00:19:32.198 --> 00:19:35.620 to completion takes about ten times as 00:19:35.681 --> 00:19:36.261 much time. 00:19:37.223 --> 00:19:39.564 As if when a human would create that 00:19:39.585 --> 00:19:39.625 PR. 00:19:39.724 --> 00:19:40.024 Yeah. 00:19:42.887 --> 00:19:43.768 In open source, 00:19:43.849 --> 00:19:46.511 what's the most precious commodity? 00:19:46.630 --> 00:19:47.110 Yeah, time. 00:19:47.672 --> 00:19:48.591 Maintainer time. 00:19:48.893 --> 00:19:49.532 Yeah. 00:19:49.572 --> 00:19:51.595 Specifically, maintainer time. 00:19:52.314 --> 00:19:54.756 What's being wasted with AI contributions? 00:19:55.677 --> 00:19:56.559 Maintainer time. 00:19:56.918 --> 00:19:57.560 Yeah. 00:19:57.679 --> 00:20:00.881 If you then take that and extrapolate 00:20:00.903 --> 00:20:05.346 this, that with AI, people can... 00:20:07.147 --> 00:20:09.489 who are AI prompters, 00:20:10.649 --> 00:20:12.630 not software developers, but AI prompters, 00:20:13.192 --> 00:20:17.935 can generate far more PRs than a normal 00:20:17.974 --> 00:20:18.656 human would do. 00:20:19.916 --> 00:20:22.718 And every single PR needs to maintain a 00:20:22.799 --> 00:20:25.820 time, even if it is just to say, 00:20:26.202 --> 00:20:27.983 AI slop, reject, close. 00:20:29.343 --> 00:20:30.744 It still takes time. 00:20:31.125 --> 00:20:33.087 It still takes mental energy. 00:20:34.548 --> 00:20:35.589 And it drains time. 00:20:37.018 --> 00:20:38.779 mental energy from maintainers. 00:20:39.178 --> 00:20:40.859 If you then say, okay, 00:20:40.879 --> 00:20:42.600 I'm going to ignore anything that even 00:20:42.701 --> 00:20:44.401 remotely looks like AI slop, 00:20:45.683 --> 00:20:48.984 or I'm not even going to open the 00:20:49.024 --> 00:20:51.406 repo to PR. 00:20:51.506 --> 00:20:53.628 Okay, not very open-sourcey, 00:20:53.667 --> 00:20:54.768 but say you do that, 00:20:55.468 --> 00:20:58.471 what about security reports? 00:20:58.511 --> 00:21:00.371 Security reports, again, 00:21:00.492 --> 00:21:02.433 can be generated with 00:21:02.894 --> 00:21:06.436 far more frequently and in far larger 00:21:06.557 --> 00:21:10.500 amounts than ever before using AI. 00:21:11.181 --> 00:21:15.704 The validity of those is barely, 00:21:15.783 --> 00:21:18.346 most of those aren't valid at all. 00:21:20.227 --> 00:21:23.771 But a security report cannot be ignored. 00:21:23.850 --> 00:21:26.072 You must, as a maintainer, look at those. 00:21:26.933 --> 00:21:30.636 That means what we're heading for is 00:21:30.676 --> 00:21:31.537 maintainer gridlock. 00:21:32.842 --> 00:21:33.842 Where maintainers, 00:21:35.204 --> 00:21:37.323 instead of being able to maintain, 00:21:37.944 --> 00:21:40.645 just have to spend all their time closing 00:21:40.824 --> 00:21:44.465 AI slop. 00:21:44.485 --> 00:21:46.087 That is the debt of open source. 00:21:46.766 --> 00:21:49.487 And maybe that's actually what all those 00:21:49.548 --> 00:21:50.687 AI companies would like, 00:21:51.407 --> 00:21:53.029 because they are all funded by closed 00:21:53.049 --> 00:21:56.550 source companies. 00:21:56.669 --> 00:21:56.790 Yeah. 00:21:58.439 --> 00:21:58.960 Yeah. 00:22:00.641 --> 00:22:02.983 Sorry for ranting, but yeah. 00:22:03.003 --> 00:22:04.104 No, it's a really good rant. 00:22:05.744 --> 00:22:07.426 I end up talking about AI a fair 00:22:07.446 --> 00:22:08.967 amount on this show, 00:22:09.008 --> 00:22:11.089 and I'm always interested to hear 00:22:12.429 --> 00:22:13.251 different voices. 00:22:13.310 --> 00:22:15.071 And many of the people that have been 00:22:15.292 --> 00:22:15.512 on, 00:22:16.032 --> 00:22:17.614 I'd probably say the majority of people 00:22:17.753 --> 00:22:21.117 that I've had as guests are very AI-yay. 00:22:21.496 --> 00:22:23.839 So I'm very happy to have an AI-nay. 00:22:25.740 --> 00:22:27.821 Because I feel like... 00:22:29.457 --> 00:22:30.539 I don't know. 00:22:30.559 --> 00:22:32.041 I definitely see the ethical concerns. 00:22:32.060 --> 00:22:33.423 I've seen the ethical concerns from the 00:22:33.443 --> 00:22:33.862 beginning. 00:22:34.124 --> 00:22:38.729 You look at Dali and Dali as in 00:22:39.349 --> 00:22:41.051 the image generation, 00:22:41.091 --> 00:22:43.435 not Dali as in the Salvador. 00:22:46.343 --> 00:22:48.563 It's easy to make things that look like 00:22:48.625 --> 00:22:49.284 other things, 00:22:49.385 --> 00:22:51.085 and it's easy to produce stuff that looks 00:22:51.105 --> 00:22:51.905 like other stuff. 00:22:52.145 --> 00:22:54.785 And there's, you know, 00:22:55.426 --> 00:23:00.486 the argument within the folks that use AI 00:23:00.547 --> 00:23:02.707 for software development is, well, 00:23:02.987 --> 00:23:04.608 I was going to probably be doing a 00:23:04.647 --> 00:23:06.907 Google search on Stack Exchange or 00:23:06.947 --> 00:23:09.249 whatever anyway and copying code and half 00:23:09.309 --> 00:23:09.388 of... 00:23:09.849 --> 00:23:11.250 Half of open source is copied from 00:23:11.290 --> 00:23:12.310 somewhere else anyway. 00:23:12.731 --> 00:23:13.511 What's the difference? 00:23:13.551 --> 00:23:14.732 But there is a really big difference, 00:23:14.752 --> 00:23:16.292 and you bring up all the really good 00:23:16.312 --> 00:23:16.673 points. 00:23:17.093 --> 00:23:18.434 Licensing is one of them. 00:23:18.774 --> 00:23:18.994 I mean, 00:23:20.074 --> 00:23:24.717 licensing and the theft of creative works 00:23:25.217 --> 00:23:25.398 is... 00:23:26.654 --> 00:23:28.915 essentially like that is the model that is 00:23:29.034 --> 00:23:31.054 that is the data set that is that 00:23:31.074 --> 00:23:33.176 is what that is the foundation on which 00:23:33.295 --> 00:23:34.857 all of these large language models are 00:23:34.897 --> 00:23:37.417 built whether they're dealing with images 00:23:37.657 --> 00:23:41.319 or text or software or whatever yeah and 00:23:41.458 --> 00:23:45.159 and if if you let yourself be inspired 00:23:45.199 --> 00:23:48.001 by other people's codes or even copy parts 00:23:48.021 --> 00:23:50.901 of that code if you are a human 00:23:51.800 --> 00:23:53.620 and you are a decent person, 00:23:53.981 --> 00:23:56.903 you would add a co-author tag at the 00:23:56.923 --> 00:23:58.724 bottom of your commit message and give 00:23:58.743 --> 00:24:01.666 them credit. 00:24:01.765 --> 00:24:02.386 And that way, 00:24:02.445 --> 00:24:05.647 you also credit the original author, 00:24:06.227 --> 00:24:08.729 even though you made adjustments and 00:24:09.230 --> 00:24:10.991 adapted it for the code you want to 00:24:11.051 --> 00:24:11.931 use it in. 00:24:11.951 --> 00:24:12.631 You credit them, 00:24:12.992 --> 00:24:16.293 you comply with copyright requirements, 00:24:16.573 --> 00:24:18.714 you comply with the legal requirements. 00:24:20.422 --> 00:24:24.464 One of the first encounters I had with 00:24:24.605 --> 00:24:27.045 AI was actually a friend of mine who 00:24:27.126 --> 00:24:30.467 DMed me and said, I was using, 00:24:30.828 --> 00:24:32.529 you know, I was experimenting with AI. 00:24:32.549 --> 00:24:33.889 We're talking two, three years ago, 00:24:35.070 --> 00:24:36.451 very early days of AI. 00:24:37.390 --> 00:24:40.133 I was experimenting with AI and a 00:24:40.933 --> 00:24:42.374 WordPress plugin or something. 00:24:42.593 --> 00:24:45.376 And they started a doc block and they 00:24:45.416 --> 00:24:46.576 started with, I think, 00:24:46.616 --> 00:24:49.098 an alter tag and the AI filled my 00:24:49.137 --> 00:24:49.477 name in. 00:24:53.118 --> 00:24:55.100 And they screenshotted that and shared 00:24:55.120 --> 00:24:56.081 that with me, 00:24:56.162 --> 00:24:58.543 which made both of us laugh enormously. 00:24:58.905 --> 00:25:01.966 But it goes to show that it is 00:25:02.487 --> 00:25:04.570 theft. 00:25:04.609 --> 00:25:05.230 Right. 00:25:05.250 --> 00:25:08.393 And without complying with license 00:25:08.433 --> 00:25:10.995 requirements, just basically, yeah. 00:25:11.569 --> 00:25:12.389 I mean, I, I have, 00:25:12.409 --> 00:25:13.291 I have a similar, 00:25:13.310 --> 00:25:14.732 I have a similar anecdote and then we 00:25:14.752 --> 00:25:16.214 can shift off of AI, 00:25:16.233 --> 00:25:17.254 but I have a similar anecdote. 00:25:17.915 --> 00:25:18.416 Uh, I was, there's, 00:25:18.535 --> 00:25:21.358 there's an AI platform that, uh, 00:25:21.398 --> 00:25:22.919 does music called Suno. 00:25:23.000 --> 00:25:24.442 And so a lot of there's, I've seen, 00:25:24.861 --> 00:25:27.404 I watched a lot of stupid Instagram reels 00:25:27.425 --> 00:25:29.966 where somebody would like made AI do, uh, 00:25:30.333 --> 00:25:32.354 like a country song that was really off 00:25:32.794 --> 00:25:34.595 the wall, like really wacky and stupid. 00:25:34.915 --> 00:25:35.615 So I was like, okay, 00:25:35.635 --> 00:25:36.274 how do they do that? 00:25:36.314 --> 00:25:36.875 And I figured it out. 00:25:36.915 --> 00:25:37.955 There's this thing called Suno. 00:25:39.275 --> 00:25:40.416 And I was playing with it. 00:25:40.636 --> 00:25:44.057 And I, as an experiment, 00:25:44.097 --> 00:25:48.378 took the lyrics of Never Gonna Give You 00:25:48.457 --> 00:25:52.118 Up by Rick Astley. 00:25:52.819 --> 00:25:56.820 And I put it into Suno so that, 00:25:57.419 --> 00:25:58.500 and just to see what it would do. 00:25:59.620 --> 00:26:01.224 And, and you can, with Suno, 00:26:01.243 --> 00:26:02.926 you can give it different genres of music. 00:26:02.946 --> 00:26:04.108 You can, you know, do it, whatever. 00:26:05.211 --> 00:26:05.973 And it gave back, 00:26:06.092 --> 00:26:07.375 one of the things that it gave back 00:26:07.395 --> 00:26:11.022 to me had the precise melody of 00:26:11.369 --> 00:26:12.470 of the actual song. 00:26:13.310 --> 00:26:16.811 And Suno says that they don't use real 00:26:16.871 --> 00:26:20.174 music as their source, as their data set. 00:26:21.374 --> 00:26:24.794 But it is not, I mean, 00:26:24.954 --> 00:26:27.516 it's the idea that you can put a 00:26:27.557 --> 00:26:29.817 thousand monkeys in a room and eventually 00:26:29.837 --> 00:26:30.677 they'll write Hamlet. 00:26:30.937 --> 00:26:33.519 Like it's that level of absurdity 00:26:34.720 --> 00:26:38.522 To consider that there's no way that it 00:26:38.561 --> 00:26:40.983 just accidentally stumbled upon Rick 00:26:41.124 --> 00:26:44.025 Astley's melody, vocal melody, 00:26:45.246 --> 00:26:47.328 without having that in the data set 00:26:47.368 --> 00:26:47.749 somewhere. 00:26:47.769 --> 00:26:49.310 You can have a lot of rules about 00:26:49.369 --> 00:26:51.031 like, don't do that, 00:26:51.090 --> 00:26:53.151 but like it has to be there somewhere. 00:26:53.172 --> 00:26:54.052 Correct. 00:26:54.193 --> 00:26:54.292 Yeah. 00:26:55.153 --> 00:26:57.294 So a lot of this conversation has been 00:26:57.355 --> 00:26:58.896 from the perspective of an open source 00:26:58.916 --> 00:26:59.435 maintainer. 00:27:00.015 --> 00:27:01.578 Let's switch to the things that you 00:27:01.598 --> 00:27:02.137 maintain. 00:27:03.358 --> 00:27:06.221 One of those things is PHPCS. 00:27:07.901 --> 00:27:10.763 And I'd like you to talk about PHPCS, 00:27:10.783 --> 00:27:11.685 like what the project is, 00:27:11.704 --> 00:27:14.887 but also how you came to be the 00:27:14.946 --> 00:27:18.970 sort of leader of this project, 00:27:18.990 --> 00:27:21.811 because that's also its own sort of thing. 00:27:23.307 --> 00:27:24.986 Yeah. 00:27:25.087 --> 00:27:26.868 Well, to first answer your first question, 00:27:27.008 --> 00:27:28.447 what is PHP CS? 00:27:28.528 --> 00:27:28.707 Well, 00:27:28.747 --> 00:27:32.729 PHP CS actually is PHP code sniffer and 00:27:33.188 --> 00:27:35.708 combines two tools, code sniffing, 00:27:35.989 --> 00:27:37.108 as well as code fixing, 00:27:37.628 --> 00:27:39.710 the code beautifier and fixer. 00:27:40.490 --> 00:27:43.530 So PHP CS and PHP CBF as command 00:27:43.570 --> 00:27:44.231 line tools. 00:27:45.910 --> 00:27:48.751 What it is, 00:27:48.850 --> 00:27:51.811 is basically a framework for analyzing 00:27:51.871 --> 00:27:52.391 codes. 00:27:53.195 --> 00:27:55.618 analyzing PHP code primarily. 00:27:56.177 --> 00:27:57.319 Originally, well, 00:27:57.339 --> 00:27:59.199 at some point it also allowed for 00:27:59.280 --> 00:28:01.321 analyzing CSS and JavaScript code, 00:28:01.702 --> 00:28:04.124 but that's now been removed because let's 00:28:04.144 --> 00:28:06.524 be fair, there are better tools for that. 00:28:07.005 --> 00:28:07.806 And more, you know, 00:28:07.886 --> 00:28:10.128 dedicated tools for those languages. 00:28:10.288 --> 00:28:14.330 And when this was introduced in PHP CS, 00:28:14.951 --> 00:28:16.272 those tools didn't exist yet. 00:28:16.331 --> 00:28:16.992 Now they do. 00:28:17.012 --> 00:28:18.974 So now it's time for PHP CS to 00:28:19.013 --> 00:28:19.313 drop. 00:28:19.493 --> 00:28:20.474 That's important for those. 00:28:21.920 --> 00:28:24.463 So yes, we're analyzing PHP code. 00:28:25.763 --> 00:28:28.284 That's not done by running the code. 00:28:28.365 --> 00:28:28.605 No, 00:28:28.985 --> 00:28:31.026 the code is literally read as if a 00:28:31.087 --> 00:28:32.467 human would be reading it, 00:28:32.548 --> 00:28:33.968 except it's a machine reading it. 00:28:34.538 --> 00:28:37.839 And a human will write the SNFs, 00:28:37.858 --> 00:28:39.879 the checks we're doing, 00:28:40.240 --> 00:28:41.119 executing on the code, 00:28:41.579 --> 00:28:43.541 tells the machine to say, okay, 00:28:43.981 --> 00:28:46.621 if there is a space before it, 00:28:46.742 --> 00:28:48.141 then we need to remove it. 00:28:48.262 --> 00:28:49.923 Or if there is no space, 00:28:49.943 --> 00:28:50.842 we need to add it. 00:28:51.003 --> 00:28:55.264 And that sounds very code-styly. 00:28:55.324 --> 00:28:56.024 And yes, it is. 00:28:56.064 --> 00:28:58.265 That's the original premise on which 00:28:58.306 --> 00:28:59.285 CodeSniffer was built. 00:29:00.243 --> 00:29:01.484 Because it's a framework, 00:29:01.544 --> 00:29:02.784 it allows for more. 00:29:02.905 --> 00:29:04.846 And it allows for things which aren't 00:29:04.945 --> 00:29:05.666 autofixable, 00:29:06.067 --> 00:29:07.887 which is why something like PHP 00:29:07.927 --> 00:29:09.729 compatibility could be built on it. 00:29:09.769 --> 00:29:12.771 And PHP compatibility is an external 00:29:12.830 --> 00:29:14.912 standard for PHP CodeSniffer. 00:29:14.932 --> 00:29:17.173 So it builds on top of the framework 00:29:17.653 --> 00:29:18.553 of CodeSniffer. 00:29:18.974 --> 00:29:20.895 It uses CodeSniffer to be run. 00:29:21.695 --> 00:29:23.435 But what it does is you can tell 00:29:23.495 --> 00:29:23.995 it, OK, 00:29:24.116 --> 00:29:26.077 I want my code to be compatible with 00:29:26.117 --> 00:29:29.059 PHP seven point four until current. 00:29:30.107 --> 00:29:34.009 Tell me everything you can find that is 00:29:34.108 --> 00:29:35.168 incompatible with that. 00:29:35.829 --> 00:29:37.349 And it's not a hundred percent. 00:29:37.410 --> 00:29:39.491 I mean, there are changes in PHP, 00:29:39.571 --> 00:29:41.512 which we cannot detect with this kind of 00:29:41.571 --> 00:29:45.053 static analysis, no matter what we do. 00:29:45.954 --> 00:29:47.635 But there are a lot of changes in 00:29:47.675 --> 00:29:49.795 PHP, which we can detect. 00:29:50.617 --> 00:29:50.936 Say, 00:29:51.037 --> 00:29:53.278 seventy percent of the compatibility 00:29:53.338 --> 00:29:57.060 things we can detect by static analysis. 00:29:58.280 --> 00:29:59.360 And we will flag those. 00:30:00.298 --> 00:30:02.718 And that's PHP compatibility and external 00:30:02.739 --> 00:30:04.299 standard on top of code snippet. 00:30:04.898 --> 00:30:07.839 So we can't fix those most of the 00:30:07.859 --> 00:30:11.040 time because I cannot decide for you. 00:30:11.919 --> 00:30:15.221 But I think PHP eight four, 00:30:15.340 --> 00:30:18.922 it made implicitly nullable parameters in 00:30:19.002 --> 00:30:21.502 function signature had to be made 00:30:21.742 --> 00:30:22.923 explicitly nullable. 00:30:23.883 --> 00:30:27.362 So if you had class name, 00:30:28.124 --> 00:30:29.944 variable name is null. 00:30:31.253 --> 00:30:33.214 that would now be flagged because the 00:30:33.233 --> 00:30:36.637 class name type did not have the nullable 00:30:36.716 --> 00:30:38.338 operator in front of it. 00:30:38.397 --> 00:30:40.319 It did not allow for that null default 00:30:40.378 --> 00:30:43.100 type. 00:30:43.120 --> 00:30:45.983 There are different considerations on how 00:30:46.003 --> 00:30:46.723 to fix that. 00:30:46.983 --> 00:30:48.404 Of course you could add the nullable 00:30:48.483 --> 00:30:49.064 operator, 00:30:50.165 --> 00:30:52.327 but nullable operator was only introduced 00:30:52.387 --> 00:30:53.486 in PHP seven one. 00:30:54.147 --> 00:30:56.448 If your code needs to be compatible with, 00:30:56.810 --> 00:30:57.050 you know, 00:31:00.349 --> 00:31:02.311 you can't add the nullable operator. 00:31:04.032 --> 00:31:05.935 Maybe the better solution would be to 00:31:06.014 --> 00:31:07.136 remove the null time. 00:31:09.417 --> 00:31:13.820 Or maybe what's allowed since PHP A two, 00:31:13.900 --> 00:31:15.122 if you have a minimum of A two, 00:31:15.703 --> 00:31:19.146 you could even have a new and then 00:31:19.346 --> 00:31:21.667 the actual object and create the object as 00:31:21.707 --> 00:31:22.589 the default value. 00:31:23.397 --> 00:31:25.239 So there are different solutions, 00:31:25.319 --> 00:31:27.379 and we cannot decide which solution is 00:31:27.439 --> 00:31:27.721 best. 00:31:28.100 --> 00:31:29.261 For code-style things, 00:31:30.041 --> 00:31:32.782 PHP CodeSniffer and also a lot of the 00:31:32.842 --> 00:31:34.824 external standards around CodeSniffer, 00:31:34.845 --> 00:31:36.185 because there are quite a few, 00:31:37.745 --> 00:31:39.686 most of those will have autofixes, 00:31:39.847 --> 00:31:42.388 and you can just run CBF, 00:31:42.408 --> 00:31:43.490 the code beautifier, 00:31:43.629 --> 00:31:45.751 and it will fix your code. 00:31:46.948 --> 00:31:49.530 There are strategies of how to do that 00:31:49.550 --> 00:31:51.370 to still keep it reviewable. 00:31:51.390 --> 00:31:51.791 I mean, 00:31:52.071 --> 00:31:53.692 the patch we did for WordPress at some 00:31:53.732 --> 00:31:56.012 point was over a hundred thousand lines of 00:31:56.072 --> 00:31:58.033 code changed. 00:31:58.574 --> 00:32:00.355 Maybe not the best way to do it. 00:32:02.549 --> 00:32:05.589 Yeah, it makes life easier. 00:32:06.310 --> 00:32:07.409 It can also find bugs. 00:32:07.490 --> 00:32:09.310 It can find code inefficiencies. 00:32:09.810 --> 00:32:12.110 So there's a lot it can do within 00:32:12.150 --> 00:32:14.150 the framework of static analysis. 00:32:14.731 --> 00:32:16.431 The one thing it cannot do, 00:32:16.791 --> 00:32:18.891 and in those situations, 00:32:18.992 --> 00:32:21.391 I recommend write a PHP stun rule, 00:32:22.713 --> 00:32:24.072 is analysis cross file. 00:32:25.332 --> 00:32:27.312 So it basically only has the context of 00:32:27.552 --> 00:32:28.012 one file. 00:32:28.032 --> 00:32:30.013 Right. 00:32:30.053 --> 00:32:30.974 Which is a limitation. 00:32:31.408 --> 00:32:36.915 But hey, within that, it can do shitloads. 00:32:38.837 --> 00:32:40.279 Now, how did I get into it? 00:32:40.299 --> 00:32:41.280 Well, 00:32:41.300 --> 00:32:43.983 most likely because at some point I wanted 00:32:44.062 --> 00:32:45.023 a custom rule, 00:32:45.185 --> 00:32:47.567 and I kind of wrote a rule, 00:32:47.627 --> 00:32:48.968 and God knows that's like, 00:32:50.199 --> 00:32:53.262 years ago for a company I sometimes work 00:32:53.281 --> 00:32:53.482 for. 00:32:54.462 --> 00:32:58.543 And then at some point I found a 00:32:58.624 --> 00:33:01.025 bug in the WordPress coding standards and 00:33:01.505 --> 00:33:03.647 submitted a fix because open source. 00:33:03.666 --> 00:33:05.368 So instead of reporting it, 00:33:05.427 --> 00:33:06.729 I just submitted a fix. 00:33:09.449 --> 00:33:13.712 And I'd known about PHP compatibility for 00:33:13.732 --> 00:33:15.572 a while already and I'd been using it 00:33:15.653 --> 00:33:17.114 and I wanted to contribute to it. 00:33:18.425 --> 00:33:19.866 So I started contributing there. 00:33:19.926 --> 00:33:23.269 And then when I started contributing to 00:33:23.329 --> 00:33:24.909 WordPress coding standards and to PHP 00:33:24.929 --> 00:33:25.629 compatibility, 00:33:26.050 --> 00:33:29.352 I found bugs in PHP CodeSniffer itself. 00:33:29.372 --> 00:33:31.114 So then I started contributing there. 00:33:31.553 --> 00:33:34.316 And then I was very, very, 00:33:34.356 --> 00:33:38.539 very shocked to discover that within six 00:33:38.579 --> 00:33:40.579 weeks, two months of contributing. 00:33:41.261 --> 00:33:43.061 And normally when I start contributing to 00:33:43.081 --> 00:33:44.121 a project, I don't know, 00:33:44.262 --> 00:33:46.104 I will start with, you know, 00:33:46.124 --> 00:33:47.665 one or two small PRs. 00:33:48.481 --> 00:33:50.203 Wait to see what the response is, 00:33:50.302 --> 00:33:52.144 whether it's, you know, 00:33:52.224 --> 00:33:53.804 whether you can actually talk and have a 00:33:53.824 --> 00:33:55.867 conversation with maintainer to actually 00:33:55.906 --> 00:33:58.229 get it merged or whether the maintainer 00:33:58.269 --> 00:34:00.149 just ignores it and leaves it to rot. 00:34:00.971 --> 00:34:01.551 So, I mean, 00:34:01.630 --> 00:34:03.193 I'm not going to waste my time on 00:34:03.253 --> 00:34:06.395 projects which aren't actively maintained. 00:34:08.156 --> 00:34:10.177 In this case, they were being picked up. 00:34:10.237 --> 00:34:11.458 They were being merged. 00:34:11.718 --> 00:34:13.521 So then you get more PRs from me. 00:34:14.244 --> 00:34:17.366 And within six to eight weeks time, 00:34:17.566 --> 00:34:19.246 I was already a second most prolific 00:34:19.387 --> 00:34:20.768 contributor to Coach Sniffer. 00:34:20.828 --> 00:34:26.149 And that shocked me no end. 00:34:26.189 --> 00:34:27.929 The fact that a tool which is, 00:34:28.530 --> 00:34:30.211 I mean, I've done some calculations. 00:34:30.251 --> 00:34:30.791 Basically, 00:34:30.850 --> 00:34:32.472 it's used by about ten million people a 00:34:32.492 --> 00:34:34.532 day. 00:34:34.572 --> 00:34:36.533 The number is astronomically ridiculous. 00:34:36.553 --> 00:34:37.833 Yeah. 00:34:37.934 --> 00:34:39.294 And that's just a guess. 00:34:39.635 --> 00:34:40.074 Yeah. 00:34:40.115 --> 00:34:41.234 Ten million people a day. 00:34:45.124 --> 00:34:47.504 And the amount of contributors is small 00:34:47.585 --> 00:34:49.086 and that even with, you know, 00:34:49.205 --> 00:34:51.368 I think it was ten, twenty PRs, 00:34:52.088 --> 00:34:53.868 I was already the second most prolific 00:34:54.009 --> 00:34:57.670 contributor is still incredibly shocking 00:34:57.691 --> 00:34:58.031 to me. 00:34:58.451 --> 00:35:01.832 And it's not gotten much better. 00:35:01.852 --> 00:35:04.655 There's still very few outside 00:35:04.695 --> 00:35:08.317 contributors and that is problematic. 00:35:10.375 --> 00:35:12.196 I want to grow that contributor pool. 00:35:12.736 --> 00:35:14.819 Yes, I'm an extremely critical reviewer, 00:35:14.858 --> 00:35:18.202 but I try to explain everything so people 00:35:18.262 --> 00:35:19.121 learn and grow, 00:35:19.222 --> 00:35:20.302 and the next time I don't need to 00:35:20.342 --> 00:35:21.323 explain it anymore. 00:35:22.224 --> 00:35:23.126 And they do it right. 00:35:25.887 --> 00:35:26.108 Yeah. 00:35:27.368 --> 00:35:28.310 I'm not... 00:35:29.631 --> 00:35:31.211 I have a feeling I'm not succeeding in 00:35:31.251 --> 00:35:32.892 growing that contributing pool well 00:35:32.932 --> 00:35:33.274 enough. 00:35:33.894 --> 00:35:34.495 So, yeah, 00:35:34.635 --> 00:35:36.236 originally I started contributing. 00:35:36.276 --> 00:35:37.156 This is like... 00:35:37.937 --> 00:35:39.079 nearly ten years ago. 00:35:42.301 --> 00:35:47.506 I stayed next to the maintainer, 00:35:48.106 --> 00:35:51.088 the second most prolific contributor. 00:35:51.169 --> 00:35:53.071 At some point I was doing a lot 00:35:53.151 --> 00:35:58.055 of the daily contributions with the 00:35:58.095 --> 00:35:59.776 maintainer, the original maintainer, 00:35:59.796 --> 00:36:01.517 having less and less time and less and 00:36:01.537 --> 00:36:03.499 less interest in maintaining it because 00:36:04.167 --> 00:36:05.968 you know, life, life happens, 00:36:06.149 --> 00:36:07.530 different work interests, 00:36:07.671 --> 00:36:09.432 different life interests, 00:36:09.912 --> 00:36:11.033 and that's perfectly fair. 00:36:12.394 --> 00:36:16.336 So in late to, in, 00:36:16.376 --> 00:36:18.599 they messaged me and basically said, 00:36:18.798 --> 00:36:19.640 I'm abandoning it. 00:36:21.341 --> 00:36:23.001 And I was like, yeah, 00:36:23.021 --> 00:36:25.084 but something that's used by this many 00:36:25.124 --> 00:36:26.544 people on a daily basis. 00:36:29.265 --> 00:36:31.207 I don't think abandoning it is a good 00:36:31.327 --> 00:36:31.966 idea. 00:36:33.428 --> 00:36:36.510 But there wasn't anyone else really who 00:36:36.550 --> 00:36:37.510 could take over. 00:36:39.111 --> 00:36:40.651 And I had other plans. 00:36:46.695 --> 00:36:49.216 But yeah, as there wasn't anyone else. 00:36:52.211 --> 00:36:52.430 So, 00:36:52.550 --> 00:36:55.673 and at that point it shifted and it's 00:36:55.733 --> 00:36:58.434 now a PHP code sniffer. 00:36:58.474 --> 00:37:02.216 It now has its own organization on GitHub. 00:37:02.296 --> 00:37:05.517 It's got its own suite of tools that 00:37:05.537 --> 00:37:06.859 are under that organization. 00:37:08.379 --> 00:37:09.439 Those already existed. 00:37:09.859 --> 00:37:12.461 right right but but now they're under like 00:37:12.521 --> 00:37:15.381 they're under a the same organization yeah 00:37:15.421 --> 00:37:18.042 basically the project was originally in 00:37:18.082 --> 00:37:19.622 the squiz labs organization which is a 00:37:19.642 --> 00:37:21.504 company which is the company which 00:37:21.584 --> 00:37:23.765 originally created it and and the person 00:37:24.245 --> 00:37:25.546 who originally maintained it breck 00:37:25.566 --> 00:37:30.026 sherwood worked for that company um 00:37:30.106 --> 00:37:32.008 obviously that also made it difficult to 00:37:32.048 --> 00:37:34.809 give anyone else commit rights because 00:37:35.149 --> 00:37:36.950 they would need to be invited into that 00:37:36.990 --> 00:37:38.070 company organization 00:37:39.854 --> 00:37:40.274 But yeah, 00:37:40.314 --> 00:37:42.435 there were some things where Greg and I 00:37:42.736 --> 00:37:45.957 didn't always agree on how things should 00:37:46.376 --> 00:37:48.057 go or extra tooling, 00:37:48.077 --> 00:37:49.218 which I thought was needed. 00:37:49.338 --> 00:37:51.738 And he wasn't so sure that was needed. 00:37:52.459 --> 00:37:56.300 So I created that and I put all 00:37:56.339 --> 00:37:58.640 of that in a separate organization already 00:37:58.740 --> 00:38:01.582 when I started creating that like six 00:38:01.602 --> 00:38:02.102 years ago. 00:38:03.582 --> 00:38:05.562 And when I took over Coach Sniffer, 00:38:07.392 --> 00:38:09.492 the repo didn't get moved, 00:38:09.613 --> 00:38:10.774 didn't get transferred. 00:38:11.374 --> 00:38:12.294 I had to fork it. 00:38:13.115 --> 00:38:14.637 But it is a blessed fork. 00:38:14.856 --> 00:38:17.879 So Greg has said, yes, 00:38:17.899 --> 00:38:21.060 this is the official successor. 00:38:21.981 --> 00:38:26.124 But forking it does have its drawbacks in 00:38:27.245 --> 00:38:28.725 how people find the project. 00:38:29.285 --> 00:38:31.406 A lot of people still sometimes comment on 00:38:32.508 --> 00:38:33.669 issues in the old repo. 00:38:35.102 --> 00:38:37.144 Or even open new issues in the old 00:38:37.225 --> 00:38:37.606 repo. 00:38:37.666 --> 00:38:39.149 And it's like, yeah, 00:38:39.649 --> 00:38:42.173 did you read that bit that said this 00:38:42.213 --> 00:38:44.397 is abandoned and moved elsewhere? 00:38:44.798 --> 00:38:45.800 It didn't get archived. 00:38:46.260 --> 00:38:46.941 It's just... 00:38:47.917 --> 00:38:50.278 no but that's partially at my request and 00:38:50.437 --> 00:38:52.618 and it might now be time to change 00:38:52.638 --> 00:38:54.638 that uh now four point oh is being 00:38:54.678 --> 00:38:57.700 released yeah the reason uh not to archive 00:38:57.740 --> 00:39:00.140 it is that once it's archived you can't 00:39:00.160 --> 00:39:03.722 comment on it right yeah yeah and if 00:39:03.742 --> 00:39:06.903 um there were still quite a few issues 00:39:07.463 --> 00:39:11.385 which were valid yeah or or even things 00:39:11.425 --> 00:39:12.986 which were supposed to be addressed in 00:39:13.026 --> 00:39:13.745 four point oh 00:39:15.193 --> 00:39:17.736 But four point O was started in two 00:39:17.776 --> 00:39:24.620 thousand twenty and then five years went 00:39:24.660 --> 00:39:26.702 past and it still wasn't released. 00:39:28.443 --> 00:39:29.803 So, yeah, 00:39:29.903 --> 00:39:32.504 it was helpful to be able to inform 00:39:32.564 --> 00:39:36.548 people that certain things were fixed and 00:39:36.568 --> 00:39:39.149 in which release they were fixed or that 00:39:39.669 --> 00:39:42.332 four point O was released at some point 00:39:42.952 --> 00:39:44.173 and that those things 00:39:44.847 --> 00:39:47.370 which have been long-standing issues have 00:39:47.390 --> 00:39:51.812 been addressed you've uh since since 00:39:51.892 --> 00:39:55.075 taking over uh really and assuming 00:39:55.216 --> 00:39:58.959 ownership of of many of these uh things 00:39:58.979 --> 00:40:01.321 but also just because of your active 00:40:01.401 --> 00:40:03.863 contribute contributions across various 00:40:03.883 --> 00:40:05.704 different projects uh i know that you've 00:40:05.724 --> 00:40:09.347 been talking about the value of funding 00:40:09.426 --> 00:40:11.609 open source about sponsoring development 00:40:12.653 --> 00:40:14.153 What are the sorts of things that you 00:40:14.193 --> 00:40:17.655 see as being sort of most important that 00:40:17.995 --> 00:40:19.876 should be talked about more that aren't 00:40:19.916 --> 00:40:21.356 being talked about enough that you bring 00:40:21.396 --> 00:40:22.957 to these sort of like conference 00:40:23.017 --> 00:40:24.457 presentations and things that you've been 00:40:24.497 --> 00:40:24.917 going to? 00:40:25.736 --> 00:40:27.977 We need to normalize funding open source. 00:40:28.537 --> 00:40:31.019 I mean, I try to lead by example. 00:40:31.238 --> 00:40:32.859 So I'm self-employed. 00:40:32.999 --> 00:40:34.100 I have my own business. 00:40:34.320 --> 00:40:35.120 I earn money. 00:40:35.961 --> 00:40:38.582 And I earn money by using open source 00:40:38.622 --> 00:40:38.941 tooling. 00:40:40.769 --> 00:40:43.050 So every year at the end of the 00:40:43.091 --> 00:40:45.131 year, because I'm open to Yeah, 00:40:45.271 --> 00:40:46.053 I'm self employed, 00:40:46.133 --> 00:40:49.553 my income in widely varies year across 00:40:49.573 --> 00:40:49.814 year. 00:40:50.155 --> 00:40:51.774 So I don't know what my income is 00:40:51.794 --> 00:40:52.216 going to be. 00:40:52.796 --> 00:40:54.196 So every year in the week between 00:40:54.216 --> 00:40:55.477 Christmas and New Year, 00:40:56.897 --> 00:40:59.698 I spent that week funding open source, 00:41:00.120 --> 00:41:01.160 because by that time, 00:41:01.240 --> 00:41:02.901 I know what my turnover was. 00:41:03.785 --> 00:41:04.845 And I can say, okay, 00:41:04.905 --> 00:41:06.626 I'm going to take a percentage of that 00:41:06.666 --> 00:41:08.946 turnover and give that money to the 00:41:08.986 --> 00:41:10.466 various open source projects, 00:41:10.867 --> 00:41:12.287 which helped me do my job. 00:41:12.988 --> 00:41:15.129 And I cast a very, 00:41:15.169 --> 00:41:16.908 very wide net when I do that. 00:41:17.849 --> 00:41:20.330 I also look at all those tiny tools 00:41:20.410 --> 00:41:23.850 I use in continuous integration, in CI, 00:41:23.910 --> 00:41:25.611 in the automated checks, 00:41:26.292 --> 00:41:28.753 which most people forget because if those 00:41:28.832 --> 00:41:30.073 tools stay silent, 00:41:30.513 --> 00:41:31.993 you don't notice that they're running. 00:41:34.213 --> 00:41:36.695 But I also use, you know, Irfanview, 00:41:36.714 --> 00:41:40.117 a Windows graphic imaging program, 00:41:40.278 --> 00:41:41.559 or I use Joplin. 00:41:42.999 --> 00:41:44.421 And I fund those projects too. 00:41:44.541 --> 00:41:46.763 I use Mastodon for communication with a 00:41:46.823 --> 00:41:47.363 number of people. 00:41:47.564 --> 00:41:48.945 I fund those projects too. 00:41:49.564 --> 00:41:53.327 So I cast a very wide net and 00:41:53.388 --> 00:41:56.191 I try to give all the projects which 00:41:56.231 --> 00:41:57.271 were valuable to me, 00:41:57.531 --> 00:42:00.774 which I didn't actively contribute to with 00:42:00.814 --> 00:42:01.115 code. 00:42:02.544 --> 00:42:03.666 I try to give them some money. 00:42:04.805 --> 00:42:07.606 And I think things like the open source 00:42:07.646 --> 00:42:08.006 pledge, 00:42:08.106 --> 00:42:11.488 where companies pledge to spend a certain 00:42:11.508 --> 00:42:14.769 amount of money for every employee on open 00:42:14.830 --> 00:42:15.291 source, 00:42:16.091 --> 00:42:19.211 are good initiatives and they should be 00:42:19.271 --> 00:42:19.653 followed. 00:42:19.952 --> 00:42:22.493 Every company using open source should do 00:42:22.533 --> 00:42:22.794 this. 00:42:23.620 --> 00:42:26.640 And we should also talk when we talk 00:42:26.660 --> 00:42:28.401 with customers about, you know, 00:42:28.481 --> 00:42:30.363 we're going to build your website based on 00:42:30.423 --> 00:42:31.984 WordPress or we're going to build your 00:42:32.024 --> 00:42:34.964 website based on Drupal or we should also 00:42:35.564 --> 00:42:38.506 have a line item in the proposal and 00:42:38.926 --> 00:42:39.966 in the invoice. 00:42:40.667 --> 00:42:44.088 Five percent for open source. 00:42:44.109 --> 00:42:46.010 To fund the project on which you've built 00:42:46.050 --> 00:42:47.189 the project. 00:42:47.269 --> 00:42:49.970 Yeah. 00:42:49.990 --> 00:42:51.211 We need to normalize this. 00:42:54.859 --> 00:42:56.039 Yeah, no, I totally agree. 00:42:56.120 --> 00:42:59.321 And it's been frustrating for me 00:43:01.281 --> 00:43:05.644 specifically within my own organization 00:43:05.724 --> 00:43:09.265 trying to sort of like rally that flag 00:43:10.464 --> 00:43:14.606 of... And it's not like it's not known. 00:43:15.146 --> 00:43:17.146 It's not like we don't know and aren't 00:43:17.187 --> 00:43:18.687 aware that... 00:43:20.004 --> 00:43:22.088 a lot of the technology that builds the 00:43:22.108 --> 00:43:24.751 thing that we built an entire platform on 00:43:24.830 --> 00:43:27.193 top of is built on top of open 00:43:27.234 --> 00:43:29.716 source and that we should be giving back. 00:43:29.796 --> 00:43:30.318 It's just, 00:43:30.798 --> 00:43:34.242 it never gets prioritized the right time 00:43:34.321 --> 00:43:35.242 or like, you know, 00:43:36.546 --> 00:43:37.448 Realistically, 00:43:37.528 --> 00:43:39.789 like there's one person who's the champion 00:43:39.910 --> 00:43:42.151 and then that person moves on to another 00:43:42.191 --> 00:43:44.653 company and then nobody carries that flag. 00:43:44.673 --> 00:43:45.495 And then that I mean, 00:43:45.575 --> 00:43:46.975 and then everything just sort of sort of 00:43:47.015 --> 00:43:47.435 dwindles. 00:43:47.475 --> 00:43:49.698 And it's it's frustrating that it's it's 00:43:50.057 --> 00:43:53.160 it it's such a hard conversation to have. 00:43:54.021 --> 00:43:56.343 I keep repeating the term exploitative 00:43:56.363 --> 00:43:57.024 capitalism. 00:43:57.144 --> 00:43:58.164 Yeah. 00:43:58.245 --> 00:44:00.566 And I mean, I know it's hard. 00:44:00.667 --> 00:44:00.906 I mean, 00:44:01.146 --> 00:44:03.349 I have a pretty good view of all 00:44:03.368 --> 00:44:04.189 the things I use. 00:44:06.620 --> 00:44:08.044 But I also know that a lot of 00:44:08.084 --> 00:44:09.126 companies don't have that. 00:44:09.167 --> 00:44:11.051 So there are tools which can help with 00:44:11.071 --> 00:44:11.173 that. 00:44:11.193 --> 00:44:12.515 There's Tidelift. 00:44:13.546 --> 00:44:16.827 which can help distribute based on the log 00:44:16.867 --> 00:44:18.106 files in your project. 00:44:19.287 --> 00:44:20.327 There's ThanksDev, 00:44:20.367 --> 00:44:22.147 which does a similar service. 00:44:22.707 --> 00:44:25.868 Even GitHub Sponsors allows to say, okay, 00:44:26.249 --> 00:44:27.209 check my projects, 00:44:27.289 --> 00:44:30.550 check which projects out of all the 00:44:30.589 --> 00:44:34.330 projects I use can use funding and will 00:44:34.550 --> 00:44:35.972 be able to give you some clue of 00:44:36.012 --> 00:44:37.332 where your money should go. 00:44:38.031 --> 00:44:40.013 I'm not saying those projects are perfect 00:44:40.053 --> 00:44:41.613 because they will still miss a lot. 00:44:42.745 --> 00:44:44.285 They will miss the fact that I use 00:44:44.406 --> 00:44:48.968 Joplin on my desktop, for instance. 00:44:48.988 --> 00:44:49.888 Just as an example, 00:44:50.108 --> 00:44:54.269 but they can definitely help at least get 00:44:54.309 --> 00:44:57.330 started. 00:44:57.510 --> 00:44:58.269 And getting started, 00:44:58.410 --> 00:45:00.830 once you start giving to open source, 00:45:00.970 --> 00:45:04.051 it becomes something which you can have a 00:45:04.071 --> 00:45:05.533 conversation about, OK, 00:45:06.053 --> 00:45:08.934 but are we funding that project or hang 00:45:09.013 --> 00:45:09.153 on, 00:45:09.553 --> 00:45:10.274 we are actually 00:45:10.767 --> 00:45:13.448 well basically maintaining that project so 00:45:13.508 --> 00:45:15.408 maybe we should fund that project but 00:45:16.249 --> 00:45:21.332 because we're maintaining it yeah yeah and 00:45:21.352 --> 00:45:25.392 then the conversation shifts to where the 00:45:25.432 --> 00:45:28.274 money should go instead of whether money 00:45:28.314 --> 00:45:28.955 should go down 00:45:31.512 --> 00:45:33.872 Well, thank you so much, Juliet, 00:45:33.972 --> 00:45:34.492 once again. 00:45:35.254 --> 00:45:37.754 I'm so happy to have you on. 00:45:37.955 --> 00:45:40.155 For anyone on the internet who might be 00:45:40.175 --> 00:45:41.497 interested in the stuff that you're 00:45:41.537 --> 00:45:43.617 working on or finding you wherever you 00:45:43.658 --> 00:45:44.658 might exist on the internet, 00:45:44.698 --> 00:45:45.618 where can people find you? 00:45:45.638 --> 00:45:48.499 Yeah. 00:45:49.700 --> 00:45:50.321 Primarily, 00:45:50.541 --> 00:45:52.102 if you were interested in what I do, 00:45:52.801 --> 00:45:53.542 go to GitHub, 00:45:53.582 --> 00:45:56.283 github.com and then slash JRFNL. 00:45:57.323 --> 00:45:57.763 That's me. 00:45:59.874 --> 00:46:01.776 If you want to follow me on social 00:46:01.816 --> 00:46:02.736 media, you can. 00:46:02.836 --> 00:46:03.858 I'm on Mastodon, 00:46:04.079 --> 00:46:05.981 and that's obviously one of those 00:46:06.160 --> 00:46:09.144 addresses which people need to spell out. 00:46:09.184 --> 00:46:10.845 So maybe you can post them in the 00:46:10.946 --> 00:46:13.408 show notes and I will send you a 00:46:13.448 --> 00:46:13.809 link. 00:46:15.010 --> 00:46:17.173 I'm also on Xstill. 00:46:17.392 --> 00:46:20.236 I don't post much on X at all 00:46:20.376 --> 00:46:20.796 anymore. 00:46:22.175 --> 00:46:24.137 because everyone I follow has moved to 00:46:24.156 --> 00:46:24.637 Mastodon, 00:46:24.656 --> 00:46:26.198 but there are still quite a lot of 00:46:26.218 --> 00:46:28.401 people following me on X, 00:46:28.541 --> 00:46:32.425 which is why I still post notices about 00:46:32.524 --> 00:46:37.609 releases and such on X. I'm on LinkedIn. 00:46:38.470 --> 00:46:39.631 Again, welcome to follow me. 00:46:40.673 --> 00:46:43.276 Do not send me a link request unless 00:46:43.356 --> 00:46:43.716 I know you. 00:46:47.245 --> 00:46:48.827 That's a, that's, that shouldn't, 00:46:48.887 --> 00:46:50.968 that shouldn't be an uncomfortable thing 00:46:51.008 --> 00:46:51.528 to ask. 00:46:51.588 --> 00:46:52.548 That is the thing that, 00:46:52.629 --> 00:46:54.030 that is the rule that I have abided 00:46:54.070 --> 00:46:57.390 by for most of the, I don't know, 00:46:57.430 --> 00:46:59.512 time that I've used LinkedIn. 00:46:59.772 --> 00:47:00.253 Like if I, 00:47:00.312 --> 00:47:02.613 if I have not met you or do 00:47:02.673 --> 00:47:06.376 not know in what context, because I, and, 00:47:06.515 --> 00:47:07.656 and I'll, you know, 00:47:08.316 --> 00:47:09.497 this is a total tangent, 00:47:09.577 --> 00:47:09.698 but 00:47:11.051 --> 00:47:12.713 When I started coming up with that rule, 00:47:12.753 --> 00:47:16.055 it was when I was doing Pluralsight 00:47:16.195 --> 00:47:16.935 videos. 00:47:17.675 --> 00:47:21.838 And what would happen is people would find 00:47:22.019 --> 00:47:24.680 my Pluralsight courses and then they would 00:47:24.720 --> 00:47:26.580 want to connect with me on LinkedIn. 00:47:26.901 --> 00:47:27.981 And at the very beginning, 00:47:28.082 --> 00:47:29.943 I was naive and I was like, oh, 00:47:30.004 --> 00:47:31.164 build your network, whatever, 00:47:31.224 --> 00:47:32.104 more people is better. 00:47:33.024 --> 00:47:34.285 because maybe I'll get connected to 00:47:34.325 --> 00:47:36.066 somebody and that'll lead to something and 00:47:36.126 --> 00:47:36.628 who knows what. 00:47:37.867 --> 00:47:39.609 But what it actually meant was now that 00:47:39.689 --> 00:47:41.309 I have this connection with this person, 00:47:41.350 --> 00:47:43.030 they can ask me support questions about 00:47:43.071 --> 00:47:44.332 the thing that they're building or the 00:47:44.412 --> 00:47:45.912 class that they've taken that I did, 00:47:45.952 --> 00:47:48.394 which was not really the intent. 00:47:49.995 --> 00:47:53.758 What I also found is that especially 00:47:54.037 --> 00:47:56.580 headhunters would try to then exploit your 00:47:56.640 --> 00:47:57.180 network. 00:47:57.200 --> 00:47:58.481 And I see myself 00:47:59.140 --> 00:48:00.883 as the gatekeeper for my network. 00:48:01.562 --> 00:48:03.925 I want to protect the people in my 00:48:03.986 --> 00:48:05.526 network from being harassed. 00:48:06.707 --> 00:48:10.751 So only people I've met get access to 00:48:10.832 --> 00:48:11.171 that. 00:48:11.912 --> 00:48:12.432 And yes, 00:48:14.073 --> 00:48:17.417 I've done a Pluralsight course as well, 00:48:17.477 --> 00:48:18.437 so that's interesting. 00:48:21.939 --> 00:48:23.463 Well, again, thank you, Juliette, 00:48:23.483 --> 00:48:24.044 for coming on. 00:48:25.106 --> 00:48:28.512 And for everyone else on the internet who 00:48:28.531 --> 00:48:30.013 may be finding or watching this, 00:48:30.033 --> 00:48:30.856 thank you for watching. 00:48:30.896 --> 00:48:31.736 Thank you for listening. 00:48:32.258 --> 00:48:33.700 And we'll see you on the internet.