[0:00] Vular, welcome. You're going to be [0:02] talking about performance in PHP. What [0:06] exactly will you be telling us all about [0:08] at PHP UK conference? [0:11] >> Hey, thank you. Nice to to be here. Um, [0:14] so the main thing I want to I want to [0:16] talk about to people is how does the PHP [0:19] engine actually work and how do you make [0:21] decisions based on that. So not just uh [0:24] and we'll also be talking about that not [0:26] but not how just how to measure the [0:28] program externally but also to develop a [0:30] better intuition and understanding of [0:32] how these things work so that when you [0:33] look at a piece of code you can also [0:35] already make some guesses about the PHP [0:37] side of the performance and then we're [0:39] also going to talk about the usual [0:41] performance aspects like how do I [0:42] measure how long the database is taking [0:44] and we'll we'll see some other [0:46] approaches like most people probably [0:48] have seen how to instrument this in in [0:50] userland like you make a wrapper around [0:52] your database calls and you and and and [0:54] you do that. But I want to show some [0:56] more um seale approaches, some more PHP [0:59] extensions you can use in some more [1:01] low-level tooling to really figure out [1:02] what's going on without having to [1:04] necessarily change the code. For [1:05] example, if you have a problem that only [1:07] happens in production, [1:09] >> I see. So if people come along and if [1:11] they have uh slow running code or code [1:14] that you know doesn't seem to be [1:16] performing as well as they would expect [1:19] then the takeaway from your talk will be [1:21] one of the takeaways from your talk will [1:23] be here's how we can measure it and [1:25] here's will will actually show how to [1:27] make changes um based on that [1:29] information. [1:30] >> Um so what I will be showing is a bit [1:32] how to work with a profiler. There's a [1:34] couple great open source tools out there [1:36] where you can like run a request or run [1:39] a process and really see every single [1:41] function call that happens or see like a [1:43] couple thousand times a second what's [1:44] what's going on in in in PHP and then [1:47] how this looks after you make a change [1:50] but also just how to like reason about [1:52] performance and how PHP actually [1:54] executes your code internally so you get [1:55] a better understanding for what's going [1:57] on there as well. [1:58] >> Amazing. And in your work, have you [2:01] applied these principles on projects [2:03] that you've been working on? And what's [2:05] been your biggest performance increase [2:07] based on this the kind of work the kind [2:10] of analysis you do? [2:12] >> So like there's always a couple fun [2:14] stories to tell, but so um I work for [2:16] for a company um we'll maybe talk about [2:19] that a bit later. I'm not going to go [2:20] into much detail where we help other [2:22] other people with performance problems [2:24] both in a consulting fashion but mostly [2:26] in providing a a software as a service [2:29] platform to them where they can improve [2:31] their code and like there is there is [2:34] like the the hard winds of people like [2:37] hey I have this service it has like a 7 [2:39] millisecond response time we want to get [2:40] it down to five like what what can we do [2:43] what can we measure and those are like [2:44] very intricate and very specific but [2:46] then there is also like here's an [2:48] e-commerce shop and they had installed a [2:50] plugin that uh every for every single [2:52] page uh page load that they make like [2:54] wants to get like a a token for like [2:56] some tracking service and that just [2:58] takes one and a half seconds. Uh and [3:00] it's just like every single request and [3:02] that token never changes and they could [3:04] just have it in there but that plug-in [3:06] just like fetches it for every single [3:08] page request. And um because it's like a [3:11] big e-commerce shop with a bunch of [3:13] plugins that you haven't written, [3:14] debugging that can actually be quite [3:16] annoying. So like people can use our [3:18] tool or other tools to like get that [3:20] information very quickly and so that was [3:22] a great great experience with the [3:24] customer of like their onboarding to the [3:26] product and the first thing was like oh [3:28] that's the problem and within minutes [3:29] you have a solution and it's it's really [3:32] fun to see like [3:33] >> how how fast you can make PHP and what [3:36] you can get out of the language while [3:37] still having like a nice highle language [3:39] that allows you to work very quickly uh [3:42] but then still get really good [3:44] performance out of it as well. [3:46] So the PHP haters who say it's too slow, [3:52] that's not really true, is it? I mean, [3:54] it I it always depends on like for what [3:56] use case and what you want to do with [3:58] it. um like uh if if if you need a [4:02] real-time application or like if you [4:04] want to do high frequency trading [4:06] wherever you would want to do that like [4:08] I probably wouldn't do that in PHP and [4:10] um but uh for a website and like if we [4:13] if we compare PHP to other web languages [4:17] like JavaScript, Python, Ruby um I'll go [4:22] a bit in the talk about like some [4:24] comparisons there as well but I think [4:25] PHP holds up really really well And um [4:29] given the given how core works and the [4:32] and the improvements there and how the [4:34] engine works, there are some things that [4:36] PHP is really good at. Like it also [4:38] checks your types at runtime. So you [4:40] don't like if you get a JSON response [4:42] from an endpoint that you didn't expect, [4:43] it won't magically do the wrong thing [4:45] because the types didn't match because [4:47] it actually checks the types. And that's [4:48] cool. And it still manages to outperform [4:51] some of the languages that don't do [4:52] that. So I think there is there's a lot [4:54] to be said for running PHP. [4:57] I see. So if people are watching this [4:59] and maybe they've got a slow web [5:01] application or e-commerce thing and [5:03] they're thinking, do we need to change [5:05] from PHP to another language? The answer [5:08] would probably be well actually let's [5:10] look at the performance of our PHP [5:11] application first. And [5:13] >> yes, [5:14] >> I I I think it's not like usually like [5:17] uh if you rewrite something in a new [5:19] language, it's not faster because you've [5:21] used another language, but it's faster [5:22] because you rewritten the whole thing. [5:24] Um, and the the process of like [5:27] re-evaluating all your decisions and [5:28] reing your approaches and like redoing [5:30] that usually helps more. And so chances [5:33] are if you're good at one language and [5:35] you do it again in that language, you [5:38] actually end up with a way better result [5:40] than if you move to a new language where [5:42] you don't know all the pitfalls and all [5:43] the potential issues that are coming [5:45] with that. [5:46] >> [gasps] [5:47] >> But yes, but I suppose that a far a far [5:50] lower effort or engineering effort is to [5:53] use some of the things you're going to [5:54] talk about and maybe some of the tools [5:56] that you're going to talk about in this [5:58] talk and that will probably illuminate [6:01] some of the uh some of the issues you [6:02] might be having uh with with with [6:04] performance. [6:05] >> Yes indeed. [6:08] And have you have you on on well you [6:10] might not want to answer this but on [6:11] projects you've worked on have you had a [6:13] really embarrassing uh find where you [6:16] suddenly gone oh my goodness this is the [6:17] reason it's it's it's so slow. [6:21] >> Um like yes like so due to due to the [6:25] nature of our product like we we get [6:27] thousands of requests per second with [6:29] with customer data um that that we use. [6:31] So like we have some some endpoints that [6:33] are rather performance critical and um I [6:37] mean I wouldn't necessarily like say [6:39] embarrassing. That's just uh the nature [6:41] of working in a in a small self-owned [6:44] company without like billions of startup [6:47] money where you do stuff and then you [6:49] see in production if it works and [6:51] especially if you work on a tool that [6:53] helps people run their software in [6:54] production, measure it in production, it [6:56] also makes sense that we use our own [6:57] tool to look at our own software. So one [6:59] of the things um that we did was the the [7:02] doctrine 3 upgrade and um my boss [7:05] Benjamin is also one of the core people [7:07] of the doctrine project and we upgraded [7:10] that and then during that process we [7:12] learned that a couple of the custom [7:13] things that we've done around doctrine [7:15] to make it faster didn't fully apply to [7:17] the new version. So like after the [7:19] upgrade things were quite a bit slower. [7:21] Uh and it was really fun to see like [7:23] like we we made the deployment and then [7:25] our software told us like hey the thing [7:27] is five times slower now and it's like [7:29] ah cool um like that is like one of the [7:31] normal stories where you know you're [7:33] doing something but also over the years [7:35] there is a bunch of stuff where we where [7:37] we looked at something I was like [7:40] not sure why we're looping over this [7:42] thing every time to find an element here [7:44] like this is a very long list uh like [7:48] this is really like some PHP level thing [7:50] where like it's a million elements in an [7:52] array and like we're looping through it [7:53] to find something and uh we have so many [7:57] hashmaps in PHP. This might actually be [7:59] one of the good use cases for that. [8:01] Let's let's do that. and then like yeah [8:03] seconds of that stuff goes away or like [8:05] you're not clearing some some um or m [8:08] cache or something and that means the [8:11] thing has to loop through a lot of stuff [8:12] and it's quite fun to see when when [8:14] using a tool that shows you like all the [8:16] function calls that a process makes and [8:19] then it's like [8:20] >> string leng 50 million it's like ah that [8:23] seems a bit off [8:25] [laughter and gasps] [8:26] maybe we shouldn't be doing that. [8:28] >> Wow. So when you look at these things, a [8:30] lot of the some of the things just jump [8:32] out almost immediately, do they? Oh, [8:34] well, that's something to investigate. [8:36] There's some inner loop we're going [8:37] around millions of times. And [8:39] >> yeah, I mean, that's the that's the fun [8:41] moments when you when you open it up and [8:42] you immediately find something. But the [8:44] other the other fun part I think of [8:46] performance work is also like buckling [8:48] down with a problem for an hour or two [8:50] or uh longer and using a tool and like [8:54] really looking at like the individual [8:56] steps and where the time is spent and [8:58] trying to make something like trying to [8:59] make something 10% faster usually that [9:02] is already fast is a lot harder than [9:04] trying to make something a lot faster [9:06] that when when when there is like these [9:08] obvious errors. So it's both of these [9:10] things can be fun. Yeah, I've certainly [9:13] had some embarrassing uh performance [9:15] related uh problems on on projects. Uh [9:18] one of them we were running is ages ago [9:21] we had a like a Jenkins box for for CI [9:25] >> and the test suite took 45 minutes to [9:28] run and back then we were using Garrett [9:31] so every single commit had to had to go [9:34] through validation and there were bits [9:36] where we would leave it on in the [9:37] evening and come in the next day and it [9:39] was still running. And we're like, "Oh, [9:40] we've got to get these tests down." And [9:42] then somebody looked at the [9:43] configuration. They said, "Why have you [9:44] got XD debug running on the Jenkins [9:48] thing and they like flicked the flag and [9:50] suddenly the test went from like 45 [9:51] minutes down to 15." I [laughter] mean, [9:55] it was it was like I spent three days [9:57] trying to speed it up prior to that. So, [9:59] that was super embarrassing that it was [10:00] just something as simple as a as a flag. [10:03] But uh [laughter] [10:03] >> it's a good one. [10:05] >> Yeah. Yeah. These these things happen. [10:08] Um yeah and and you actually so tell me [10:12] a bit more about Tideways because you're [10:15] one of the sponsors for the conference [10:17] and it's quite related to what you're [10:20] talking about. So what does Tideways do [10:22] if people have never heard of them and [10:24] >> Yes. So [10:25] >> engage [10:26] >> yeah we're super happy to sponsor the [10:28] conference like after you've accepted my [10:30] talk we we talked internally and like if [10:32] I'm if I'm going there and if you're so [10:33] nice to invite me actually we might as [10:35] well sponsor. Um, so we're a a small [10:39] company from Germany um with um that [10:43] focuses exclusively on on PHP and we're [10:46] an APM like you might know data do or [10:49] Sentry or other products. Um, and what [10:53] we're doing and what what our core focus [10:55] is is that we exclusively focus on PHP [10:58] on on making you not write all your [11:00] instrumentation code yourself or [11:01] installing a bunch of libraries or like [11:04] doing a lot of the upfront work to get [11:06] performance insights. But what we want [11:08] to achieve with with what Tideway is [11:09] doing is that you can on board with us [11:12] and you immediately get meaningful [11:14] insights because the PHP extension that [11:17] we have auto automatically instruments [11:19] your code for you and you don't have to [11:22] do anything except install that [11:23] extension and then you already get [11:25] insights um that um and the product is [11:28] like split in in in three main things. [11:30] So we have a monitoring product where [11:32] you can see your performance over time [11:34] and you see if something gets slower. Um [11:36] we have error like all the error [11:38] tracking things um that uh we instrument [11:42] like all the error handlers of major [11:44] frameworks and grab the errors from [11:46] there and um everything that you would [11:49] expect to to see if your application is [11:51] healthy. And then we also have like a [11:52] tracing and profiling thing where you [11:54] can like with um [11:57] xh or xdebug or php spx would be some [12:01] open source tools to mention. Um and [12:03] with tideways like you can go to your [12:05] own website click a button and then you [12:07] see every function call that happens on [12:08] that page and like how long it took and [12:10] how everything is structured. But we [12:12] also have like a low low overhead mode [12:15] where we grab the most important bits of [12:17] your application and so you have [12:19] continuously like oh someone said the [12:21] website was slow and you don't have to [12:22] then start looking at it but you can [12:24] look back at the data that's already [12:26] collected and see if it's slow. Yeah. [12:29] And yeah [12:31] >> I see. So so what we would do if you [12:34] were using your product is you would [12:36] just install something on your [12:37] production server and it would collect [12:40] all this data in [12:42] not a very intrusive way. [12:44] >> And then and then how do you view it [12:46] all? Is that do you go to the tidalist [12:48] website to view it all or does all that [12:50] data? [12:51] >> Okay. So all the data gets all the [12:52] relevant data gets transferred and you [12:54] can you can view it. [12:55] >> Exactly. So the way this works is you [12:56] install our PHP extension and after the [12:58] PHP request is done um that data then [13:02] gets sent to a local thing running on [13:04] your server um that's written in in Go [13:07] where we do a lot of sanitization stuff [13:10] because we don't want to have your [13:11] customers email addresses. We don't want [13:12] to have any private information. We [13:14] don't want to see the strings in your [13:15] SQL queries like this is all stuff that [13:17] you don't want us to see and that we [13:18] don't want to have. Um so that gets all [13:21] stripped out on your system and then [13:22] sent to us where we aggregate it, show [13:24] you charts, generate alerts um for like [13:28] we have like a big database of known [13:30] problems of things that are slow or like [13:32] of configuration issues and stuff like [13:33] that. So it al also checks your systems [13:36] configuration. Um or it says like hey [13:39] you're running like a magenta juice shop [13:41] and you you're running into this known [13:44] problem. Um here is like how to fix [13:46] that. And so you don't have to you don't [13:48] even have to spend the time of figuring [13:50] out what the problem is. You can just [13:51] use like our observations and our [13:53] learning to do that. And then on top of [13:56] that you get like the continuous [13:57] monitoring to see if something um yeah [14:01] uh gets gets worse in the in the future. [14:05] I see. So you can set up what alerts as [14:08] well. So if things start to slow down [14:11] then you get alerts say well look this [14:12] used to be really quick and now it's now [14:14] it's not so quick. Yes, like we can have [14:17] you can set you can send us when you [14:18] make a release and then you get a [14:20] release comparison for like did it get [14:22] better or slower? Are there more errors? [14:25] Like you can get you get all the error [14:26] monitoring and things you would expect [14:28] from like a a monitoring solution. But [14:30] we tried to be like a an affordable like [14:33] a really affordable one piece package [14:35] where you maybe you don't get like the [14:38] full insight that you would get with [14:39] data dog but that you also don't need a [14:41] full operations team to look at it and [14:43] really try to be a solution for people [14:45] that don't have massive engineering [14:47] teams. Um, while also allowing people [14:51] that do performance the whole day to [14:53] give them the tools with the tracing and [14:55] the deep insights that they don't have [14:56] to like set this up on every developer [14:59] machine and they can use our tools and [15:01] do that do local testing and do testing [15:04] in production for performance. Yes. And [15:06] we do this with with a with a small team [15:09] um with Benjamin, me and a couple [15:11] colleagues of mine, one of whom is a PHP [15:13] core contributor that I'm very happy [15:15] that Tide is sponsoring some time to [15:17] work on PHP. Um I do some work on PH for [15:21] PHP as well and like it's it's very nice [15:23] that we're also able to give back given [15:25] like our exclusive focus on PHP. Of [15:27] course, we also have a vested interest [15:29] in the language. Um but with with the [15:31] Sentry open source pledge like we also [15:33] support that fully and give to the PHP [15:35] Foundation. I think we're like one of [15:37] the bigger contributors there and the [15:39] funding member. Uh so yeah that that [15:42] make that that makes it really nice to [15:44] to work as part of the ecosystem there [15:46] while still like providing a product [15:48] that uh allows us to to pay people. [15:51] [snorts] [15:52] >> Yeah. Nice. And I suppose actually [15:54] you've you've um referred to the fact [15:56] you do things for the PHP language, but [16:00] you've actually been you actually the [16:01] release manager, aren't you, for [16:03] >> Yes. So for PHP 8.5, I'm one of the two [16:06] release managers together with uh Daniel [16:09] Shhatzer from from the from the States. [16:12] Um we we put out the 85 release that has [16:16] uh released with the do.0 in November [16:19] and now we we get to do all the dot [16:21] versions. Yeah, that was a lot of fun as [16:23] well and learning and getting to know [16:25] more of the core people and getting to [16:27] know more about how PHP works internally [16:30] after being on the mailing list for many [16:32] years and doing small things like my my [16:35] colleague um Tim also has helped me to [16:39] write a couple PHP RFC. So there's like [16:41] four or five small language features [16:43] that I had a hand in. Like I do write [16:47] some C but I'm not extremely fluent in [16:49] PHP core. Like I did m maintain our [16:52] extension before we found him who does a [16:55] way smoother job at it. And I'm very [16:57] happy that that we have him as well uh [16:59] with with deep PHP engine knowledge like [17:02] we also managed to make our own [17:03] instrumentation a bit faster and have [17:05] some fun there. Yeah. [17:07] And so I suppose yeah that does work [17:09] quite well you know getting involved [17:11] with the core of it and doing what you [17:12] do for your for your day job. But how on [17:15] earth did you or what made you think oh [17:19] I want to be a PHP 8.5 release manager? [17:23] Um, so when it like when the [17:26] announcement was made that that they're [17:28] looking for new people, I think only two [17:30] or three people put their name up for [17:32] for a vote. And I thought um [17:36] like it it would be nice if there would [17:38] be just a couple more uh people [17:40] volunteering for these types of things [17:42] because it's not like it's not that much [17:44] uh uh work but it's also something that [17:47] that needs to be done and people should [17:49] have a choice there um in in how they [17:52] want who they want to have doing that. [17:54] So, I put my name up for that and [17:56] apparently um the the internalist [17:59] community or the people that are allowed [18:00] to vote on these things um for having [18:03] contributed to PHP in the past decided [18:05] that they would also like me to do that. [18:07] Um yeah, and it was I I think it was a [18:10] nice way to to give back um to PHP in a [18:13] way that doesn't require like extensive [18:15] C knowledge. [18:17] >> Um I see like Oh, so you don't you don't [18:19] need to be wellversed in C to be the [18:22] release manager then. [18:24] like it it it helps to be able to read [18:26] it and um to to be able to judge like [18:29] pull requests, but even that I would say [18:31] is optional um like you learn some [18:34] things along the way and of course like [18:36] having a strong PHP background also [18:38] helps but there is not a ton of [18:39] decisions that you need to make and the [18:41] great thing is that you have all the um [18:44] all the great people from from the core [18:46] team you have all the foundation people [18:48] to talk to and they're very responsive [18:50] and very nice and like everyone has a [18:52] vested interest uh in the fact that the [18:54] next PHP release is as great as the last [18:56] one. So, um people are also very willing [18:59] to help and like it's more of a like [19:01] going around making sure everyone is [19:04] happy, all the check boxes are checked [19:06] and everything is going according to [19:08] plan and smoothly than it is to like do [19:10] very complicated engineering work. Uh so [19:13] I think it's something more people could [19:16] consider if they if they like want to [19:17] give back to to to the PHP project in [19:20] that way. [19:21] >> Yeah. And and if anyone is uh coming to [19:24] the PHP UK conference and they want to [19:26] find out more presumably that you're [19:27] happy to talk to them in the in the [19:29] hallway track. [19:30] >> Absolutely. Like um I'm I'm happy to to [19:33] walk people through how the RFC process [19:35] work like how you can contribute [19:36] features to PHP, how you can propose [19:38] feature ideas like in [19:42] I think around the time of the [19:43] conference at a bit later we will have [19:45] the voting on um the next uh release [19:48] manager for for 8.6. I think that [19:51] process will start soon [19:54] um as the release is coming out in [19:56] November and there's like a 3 months I [19:59] don't know uh I don't know from the top [20:00] of my head period before that will start [20:02] with the voting quite soon. So uh yeah [20:04] if someone's interested in that and [20:06] wants to hear like the the experience of [20:08] that which is very positive but I'm [20:10] happy to go into more detail there in [20:12] person. Yeah come come find me talk to [20:13] me. [20:15] >> Brilliant. And and how much effort does [20:16] it take? I assume a lot of it is within [20:19] the final three months before the [20:21] release or [20:22] >> yes same throughout the year. [20:24] >> The the great thing about having two [20:26] people do that is that um basically [20:29] every release is done by one person and [20:31] then you're off for the next one. So um [20:34] there is a there is a bit more of a time [20:37] commitment in the um in the time leading [20:39] up to that where we have around 10 [20:41] releases if everything goes well. So [20:43] like four alpha releases, couple beta [20:45] releases, a couple RC's, and then the [20:48] release candidates are like the the more [20:50] engaging phase where you make the most [20:52] of the decisions as a release manager [20:54] like which which feature still fits in [20:56] the new next release, which feature [20:58] needs to wait a bit because it's [21:00] changing too many things or it's [21:01] breaking stuff um and figuring figuring [21:05] these things out. Um, but [21:08] I say it's a rather manageable time [21:11] commitment. Like now going forward for [21:13] the next two years, I think like it's a [21:16] Tuesday and a Thursday like a couple [21:17] hours on on a Tuesday and uh an hour on [21:20] a Thursday every month like once every [21:23] month. So this is that's quite okay. And [21:26] before that it's a bit more involved. [21:28] Um, but it's definitely not uh something [21:32] that you need to take time off from uh [21:35] from your day job for to to do that. [21:37] Especially if you work in a PHP company [21:39] and this is like something you can talk [21:41] to them about. It's like, hey, is it [21:42] cool if I do this for a couple hours uh [21:45] a month? [21:47] >> Yeah. Well, thank you very much for all [21:49] your efforts uh for because it's a great [21:51] release 8.5. [21:52] >> Thank you for putting up a conference. [21:55] [laughter] [21:55] >> That's right. Um I I because I actually [21:59] that's that's another thing you talk [22:00] about releases like people some people [22:02] might just think oh it's just the big [22:04] November release but actually there's [22:05] lots of like patch releases throughout [22:08] throughout the year. Is is there is it [22:10] just when something needs doing or did [22:12] you try and keep it at regular [22:13] intervals? So this is kept on a regular [22:16] interval and as a the release manager [22:18] yourself you don't have to do a lot [22:19] there because the people that work on [22:22] core and work on um like assume like [22:25] let's say there's a bug fix like some [22:27] some some someone from from the PHP [22:29] source team um will identify like in [22:32] which version does that bug fix need to [22:33] go into and they will make sure it lands [22:35] in all the right branches. Um, and then [22:38] you just come by and package all of that [22:40] up and they probably have already taken [22:43] care of the news uh as well. So like all [22:45] you need to do is like look in the news [22:46] file that's in the repository and then [22:48] you already have your change log ready. [22:50] Um so most of that work is done there [22:53] and the um [22:56] the more involved bits are more uh [22:58] decision- making than like running [23:00] running around and figuring that out [23:02] just because the people who who work on [23:04] PHP source are so diligent in in what [23:06] they do and are so easy to work with. [23:09] >> Sure. So I suppose in terms of uh [23:12] deciding which features go in does that [23:14] mean there might be an RFC which has [23:15] been approved and all the work has been [23:17] done but due to the nature of the [23:20] changes you might say oh we're not going [23:21] to put this in 8.5 we'll have to wait [23:23] till 8.6. Is it those kind of decisions [23:25] you need to make or does every RFC [23:27] that's complete in time actually make it [23:29] in? [23:29] >> Everything that is completed in time [23:31] makes it in. So it's not like um as a [23:34] release manager you can say like oh that [23:35] thing that's already in we're not going [23:37] to release that uh because that's [23:39] already in. But there is a there is a [23:42] couple months time period where um you [23:44] get to voice your opinions and um [23:48] potentially reject changes that like oh [23:50] we already released a couple alphas, [23:52] people already started testing and now [23:53] we want to make this like big [23:54] fundamental change that is just a bit [23:57] too much or a bit too dangerous or like [24:00] someone has to make the call on like is [24:02] this really a bug fix? Is this a [24:03] feature? Is this a refactoring that is [24:05] really necessary now? like what's the [24:07] what's the benefit of doing this now [24:09] versus doing that later. But yeah, all [24:11] the work that has that has been done or [24:13] that's going on during the year will um [24:16] just be released. Let's go with that. [24:19] And thankfully like everyone that's [24:21] contributing to to core also seem like [24:24] all the all the bugs I've seen all the [24:27] problems I've seen are usually like just [24:29] picked up by the people who um worked on [24:32] that area because they all like want to [24:34] have the stuff that they care about look [24:36] good and work well. Um so it's it's it's [24:38] not a lot of like you don't really have [24:40] to run after people to get stuff figured [24:42] out. [24:44] >> Yeah. [24:45] >> And I expect you get this question a [24:46] lot. Who decides that the next release [24:49] was 8.6 and not version 9? How's that [24:53] decision made? [24:55] >> I think there isn't like a single person [24:57] that decides that. Um [25:00] my understanding is that this like [25:04] making the new version a major version [25:05] just needs an RFC. So it basically needs [25:08] like someone to say, "Hey, we should [25:10] make the next version the the 90 [25:13] version." Um I think this is more of a [25:16] natural thing of people coming together [25:18] and being like oh like we have all these [25:20] deprecations we maybe maybe we have like [25:23] a really killer feature around the [25:25] corner or like there's a big refactoring [25:27] that we like someone has made like a [25:29] great change but that is easier if we [25:32] could clean up some of PHP's past uh and [25:36] where the the people that work on on [25:39] source come together and say like now it [25:41] feels like a good time. Um, so like I [25:45] know there has been some discussion if [25:46] there should be an 86 or if there should [25:48] be a 9. There's like maybe there is some [25:51] marketing consideration, maybe there is [25:53] some consideration of like we don't want [25:55] to pile up all these deprecations and [25:57] like do we already have a super clear [25:59] migration path? How did the last release [26:01] go? [26:02] >> Yeah. So it it it's more of a community [26:04] effort in that sense that just a lot of [26:06] people discuss this and if it feels like [26:08] the time is right, someone will make a [26:10] proposal and then it's voted on. [26:12] I see. And you largely are trying to get [26:15] all the breaking changes [26:17] uh just in like major releases. [26:20] Is that the Yeah. Yeah. I mean [26:22] [clears throat] [26:23] >> minor breaking things in the in the in [26:25] the you know [26:26] >> Yeah. I mean some sometimes there's like [26:28] a bug fix in in an external library that [26:31] you could consider a breaking change and [26:33] how it processes stuff, but that is also [26:35] like technically the right thing it [26:37] should be doing and a behavior people [26:39] don't rely on. But like I think PHP has [26:42] learned a lot from um 53 to 7 and or [26:48] like when when seven came up like and [26:51] then 56 I think was it and then we went [26:53] to seven but like that wasn't an easy [26:55] migration. Four to five wasn't an easy [26:57] migration for people. I think um the [26:59] industry took some lessons for there and [27:02] then Python 2 to Python 3 reinforced [27:05] those lessons as well with like there is [27:08] a bunch of stuff that where people say [27:10] like oh this looks a bit nicer but it [27:12] just means you have to touch every every [27:14] file of code that you have and it's not [27:16] really a tangible benefit and I think [27:18] the people that work on PHP have a good [27:20] sense of how much of the internet is run [27:23] by PHP and how how important that [27:26] language is for the health of the web [27:28] also like being a language that isn't [27:30] funded by like one big company like [27:32] there is no single organization that [27:36] runs PHP or pays for it or does a lot of [27:38] stuff like if you look at um the open [27:41] collective page like there is [27:44] a bunch of companies but but none of [27:46] them has has has like a major share in [27:48] the contribution and there is not like [27:49] there isn't like a company that hire I [27:52] don't think there is any company that [27:53] hire employs more than two maybe three [27:56] PHP core people [27:58] >> and like those are not full-time either. [28:01] >> Um I'm sure there is a company uh and [28:04] I'm I'm I'm sorry for that but like just [28:05] from the contributions that I'm seeing [28:07] like this is a lot of the stuff comes [28:09] from the PHP Foundation. Um, and it's [28:12] not like there is something like with [28:14] Golang where you have a billion dollar [28:17] investment from one of the tech giants [28:19] or something with TypeScript or [28:20] JavaScript that big companies have an [28:23] interest in owning the egg ecosystem to [28:25] to to sell stuff. Um so yeah this works [28:28] a bit different for for PHP I think and [28:31] um that freedom also is quite nice [28:34] because everyone that works on that [28:35] really works works on it because they [28:37] want to make it better and they want to [28:40] contribute to it and not for oh like I'm [28:42] just paid to do this like it's really [28:44] nice attitudes of everyone. [28:47] Yeah, it's always seems a really nice uh [28:49] community, you know, when and every time [28:51] you speak to people like the they're [28:54] always really friendly and helpful. So, [28:56] it's it's it's always good, I think. [28:58] Yeah. [28:58] >> And then from and then from the adaption [29:01] that we're seeing like with our [29:03] customers and hideways, there is of [29:05] course still people who run seven and I [29:07] hope they do that on on plans that where [29:11] you still get external support for PHP. [29:14] Um I think there is still a couple [29:17] companies like with with tideways itself [29:19] we still support PHP 72 or 73 [29:24] um like we we do support PHP 5 as well [29:27] like we just don't change our um tooling [29:30] um for that much anymore and um some [29:33] things still work but I'm not seeing a [29:35] lot of five out there um I think those [29:37] projects are uh not being actively [29:39] worked on um and more in in a in a very [29:42] maintenance state But um especially for [29:45] e-commerce which is also a chunk of the [29:47] people that that work with us um 74 we [29:50] still see some um and I think that's [29:53] just the natural the natural way of [29:55] having a language such a long and [29:57] storied history and that has provided so [29:59] much value that there is so much stuff [30:02] out there that also just works um where [30:06] I think security and uh is is more of [30:08] the the reasons we eventually upgrade [30:10] than anything else. [30:13] M so that when we do eventually go to [30:17] version 9 that pathway should be easier [30:21] for people than say 5 to 7 or 7 to8 that [30:24] that's that's kind of the hope is it [30:26] >> I mean it is it I think that has always [30:28] been the hope um I think we we can also [30:31] make this a reality this time like um I [30:34] think the the next um like all that if [30:39] if you have a code base on 85 without [30:42] seeing a lot of deprecations. And from [30:45] what I'm seeing, like we do collect [30:47] deprecation information from all of the [30:49] people that run Tideways if they [30:51] activate that feature. Um, it's looking [30:54] quite good. Like there isn't a lot of [30:55] like core stuff that that gets people. [30:58] Um, I think if you run a mostly [31:01] deprecationfree thing by either like [31:04] looking at your logs or having a tool [31:05] like like tideways or using some other [31:08] way to to track that, then the upgrade [31:10] to 9 should be rather painless from what [31:13] I'm seeing now. But of course there will [31:16] might also be a reason why we switch to [31:18] nine to to change some other stuff. Um [31:21] but I think like I said like everyone in [31:23] that that works on core is quite aware [31:25] of the of the impact of that and uh I [31:28] think one of the important parts to [31:29] realize about the PHP community is also [31:32] that it is a lot of smaller communities [31:35] that all don't talk so much to one [31:37] another like WordPress is a big thing [31:40] Drupal is a big thing is a big thing [31:42] Laravel is a big thing and like all of [31:44] these like communities exchange ideas [31:46] but they also all do things a bit in [31:48] their own way do these things a bit [31:50] different and I don't think there is [31:52] like the one right way to to to write [31:54] PHP which is also the challenge for core [31:56] like that you can't say like oh like [31:59] here we here's a feature that should [32:00] that make makes only sense if you do [32:02] functional programming I think [32:04] personally is something that really [32:05] doesn't fit into PHP uh because like [32:08] everything that the the core language [32:09] has should serve all of these [32:11] communities and like of course there is [32:14] some APIs in PHP that are like only [32:16] object-oriented um and that's something [32:19] that has the language has built around. [32:21] But like it it managed to stay rather [32:23] generic to serve all of these different [32:25] needs. And given that all of these [32:28] communities also do provide feedback in [32:30] their own way with for example Symfony [32:32] and PHPUnit being really great at [32:34] integrating against the current version [32:36] like the the master the the master or [32:38] main branch of the PHP repository. Uh [32:40] and then you get feedback very early [32:42] like when we broke something during the [32:44] the first uh or second alpha release [32:48] like I I was talking to the folks from [32:50] composer about like hey like the symfony [32:53] install broke this broke because of [32:55] composer this broke because of this [32:57] thing that like actually I put into PHP [32:59] and then we got that fixed in a day uh [33:02] just by having these like very quick [33:03] feedback cycles. Uh and that's really [33:06] cool. [33:08] Yeah, I suppose it's really good that [33:09] you do have these people kind of running [33:11] really at the bleeding edge just to feed [33:14] back those those kind of issues. And I [33:17] imagine also like the whole all of the [33:19] tech stack is is getting a lot more [33:20] mature. Like you've got really good [33:22] static analysis. You've got tools like [33:24] recctor to help people upgrade from one [33:26] version to the next. So I I kind of [33:28] imagine that um and actually I think [33:31] people are doing a lot more testing. You [33:33] know, you've got PHPUnit, you've got [33:35] pest, I suppose. I suppose that does [33:37] mean that when people upgrade, you know, [33:39] if they've at least got a test suite, [33:41] you know, it can act as some kind of [33:43] smoke test what what you know the what's [33:45] going on in PHP. Uh so I suspect if all [33:49] of those practices improve and people [33:50] take uh you take up all of these tooling [33:53] then that does mean that your feedback [33:55] will be will be a lot quicker I suppose. [33:58] >> Absolutely. Yes. Like I think there is [34:00] like the people you talked about now I [34:03] think mostly are like application [34:04] developers that work on more custom [34:06] applications. Then there is of course [34:08] like a big chunk of the ecosystem is [34:09] people running software written in PHP [34:11] is people running Drupal is people [34:13] running Shopware um or or other things. [34:17] And for them they like they upgrade when [34:20] the hostet tells them to upgrade or they [34:22] update when um [34:24] >> they they run out of security support [34:26] for a thing hopefully. and um or they [34:29] update because the new version has like [34:31] performance benefits that they've heard [34:32] about and they want to see that or to [34:34] get rid of a bug or something like this [34:35] is usually what motivates or they just [34:37] like have a well organized IT setup [34:39] where they just want to be on current [34:41] versions for like to to be protected uh [34:45] always and to to manage their [34:46] infrastructure. And like these are two [34:49] very different feedbacks that you get [34:51] from from people who can fix their own [34:53] bugs or from people that are dependent [34:55] on vendors to to do stuff. Um but of [34:57] course uh you get more detailed and more [35:00] frequent feedback of course from the [35:01] people who actually like develop these [35:03] applications than you get from the [35:05] people who run them. [35:07] >> Yeah. Yeah. And sometimes you know you [35:09] see the I don't know sometimes I learn [35:12] about language features you know when [35:14] you have this what's new in PHP the [35:16] latest version and then normally at the [35:18] end of those talks people have a whole [35:19] series deprecations and stuff they've [35:21] been removed and often I learn about [35:24] language features at the point they're [35:26] being removed because they just seem [35:28] some of them just seem absolutely crazy [35:29] that they they existed in the first [35:31] place and I imagine uh if you're quite [35:34] conservative about your PHP usage and [35:36] you stick to like uh like just the [35:39] fundamental main bits, then you're [35:41] probably going to be okay on the [35:42] upgrades really. I can never really [35:44] remember having any difficulty on a a [35:46] PHP version upgrade, you know. say even [35:48] from 7 to 8 and 5 to 7. [35:51] >> I think one of the one of the more [35:53] frustrating things for um for that [35:57] ecosystem is of course you you mostly [35:59] hear from the most vocal people that [36:02] struggle maybe with a tiny thing that um [36:04] would take 5 minutes to fix and takes [36:07] hours to complain about. Um but uh that [36:11] is just people who might like have a lot [36:14] of stuff to do on their job and now that [36:16] also happened and now that is really [36:17] annoying to them but it's actually not a [36:19] big change. They might just not be very [36:21] familiar with with with what they're [36:22] doing there or they might not stay up to [36:24] date. So thinking about these people and [36:26] being respectful of their time I think [36:27] is as important as people who like come [36:30] to PHP with an issue and say this broke [36:33] something also being respectful and like [36:35] the easiest way to to make sure that [36:37] your stuff works is of course to test it [36:39] before we make a new release because [36:40] then we can discuss that and change [36:42] things. Uh but yeah just due to the [36:45] nature and the age of PHP there is a a [36:47] lot of stuff in there like I think PHP [36:49] has always um over the years like been a [36:53] language where if you had a very [36:54] specific problem especially like in the [36:56] in the earlier like 2 three four days [36:58] like you could put that in PHP and you [37:00] had like your very specific solution to [37:02] your very specific problem and now like [37:04] the standard library is not changing as [37:07] much like new things like the um the new [37:10] random extension or the the URI passer [37:13] or something are built into their own [37:15] name spaces so they fit like very well [37:16] with um with the rest of the ecosystem [37:19] but uh the the real core functions [37:22] aren't touched so much because it's just [37:25] hard to not break people's things [37:28] >> um and like also for people who want to [37:32] now put features in PHP like come from [37:34] very different backgrounds in how they [37:35] write applications and like what they [37:37] want to do and um I think over the years [37:40] PHP has adapted features from all other [37:43] programming languages. Um, and like [37:47] sometimes there I feel like there's a [37:48] checklist of like, oh, this language has [37:50] a feature like with a syntax that [37:52] doesn't fit in PHP. Can we cram that in [37:54] as well? Um, as a bit of a joke, of [37:57] course, but like people get inspired by [37:59] a lot of stuff and are like, why doesn't [38:00] PHP have that? And because the language [38:02] is so welcoming to to changes, um, a lot [38:06] of that stuff then happens. So, uh, I [38:08] think it's quite fun to see like all the [38:10] little bits and pieces coming coming [38:11] together. [38:14] >> Yeah. Yeah. Well, I found this really [38:17] interesting actually just finding out [38:18] what happens uh I suppose from the [38:20] release manager point and how the [38:22] language is um put together and and all [38:25] the additional constraints that you have [38:26] to work with things that perhaps most [38:28] developers don't think about because [38:30] they just think about their own you know [38:33] sphere of knowledge they know about. So, [38:35] uh, thank you very much for all the work [38:37] you do on we've done and for getting PHP [38:40] 8.5 out. Uh, I'm looking forward to your [38:42] talk at, uh, PHP UK conference, uh, [38:45] which is on the February the 20th, uh, [38:48] of, uh, 2026 in London. Um, so I look [38:52] forward to to seeing you there and thank [38:53] you for having this taking this time for [38:55] this chat. [38:56] >> Very excited to be there and, uh, yeah, [38:58] looking forward to it and thank you very [39:00] much. That was a great conversation, a [39:02] lot of fun.