How PHP Engine Works for Performance
44sReveals insider knowledge on PHP internals and performance intuition, appealing to developers seeking deeper understanding.
▶ Play ClipIn this interview, Volker Dusch, a PHP release manager and co-founder of Tideways, discusses PHP performance optimization. He explains how understanding the PHP engine's internals can help developers write faster code and debunks the myth that PHP is inherently slow. The conversation also covers his role as release manager for PHP 8.5 and the future of the language, including the path to PHP 9.
Volker's talk will cover how the PHP engine works internally, how to measure performance externally, and how to develop intuition for performance issues.
He will show how to use open-source profilers to see every function call and understand what's happening in PHP without changing code.
An e-commerce shop had a plugin that fetched a tracking token on every page load, adding 1.5 seconds per request, even though the token never changed.
PHP is not inherently slow; it depends on the use case. For web applications, PHP holds up well against JavaScript, Python, and Ruby.
Rewriting in a new language is often faster because you re-evaluate decisions, not because of the language itself.
After upgrading Doctrine 3, Tideways' software became five times slower because custom optimizations didn't apply to the new version.
Tideways is an APM tool that focuses exclusively on PHP, automatically instrumenting code via a PHP extension without requiring manual changes.
Volker is one of the two release managers for PHP 8.5, a role that involves coordination and decision-making rather than complex engineering.
The upgrade path to PHP 9 is expected to be smoother than past major version jumps, thanks to lessons learned from previous migrations.
"The title accurately reflects the interview's focus on PHP performance, profiling, and the future of PHP, including the release manager's perspective."
What is the main topic of Volker Dusch's talk at PHP UK Conference?
The PHP engine works internally and how to make decisions based on that understanding.
00:11
What type of tool does Volker recommend for seeing every function call in a PHP request?
A profiler.
01:30
What was the cause of a major performance issue in an e-commerce shop mentioned by Volker?
A plugin that fetched a tracking token on every page load, adding 1.5 seconds per request.
02:48
Is PHP inherently too slow, according to Volker?
It depends on the use case. PHP is great for web applications but not for real-time or high-frequency trading.
03:52
Why does rewriting an application in a new language often make it faster, according to Volker?
Rewriting forces you to re-evaluate all decisions and approaches, which usually helps more than the language change itself.
05:13
What was a performance issue Tideways encountered with their own software?
They upgraded Doctrine 3 and learned that custom optimizations didn't apply to the new version, making things five times slower.
07:00
What is Tideways?
Tideways is an APM (Application Performance Monitoring) tool that focuses exclusively on PHP.
10:46
How does Tideways provide performance insights without requiring code changes?
It automatically instruments your code via a PHP extension, so you don't have to write instrumentation code yourself.
11:00
What role does Volker Dusch have in the PHP project?
Volker Dusch is one of the two release managers for PHP 8.5.
16:00
What does the role of a PHP release manager primarily involve?
It's more about coordination, making sure everyone is happy, checkboxes are checked, and the release goes smoothly, rather than complex engineering.
18:59
How is the decision made to make the next PHP version a major version (e.g., PHP 9)?
An RFC (Request for Comments) needs to be proposed and voted on.
25:00
Why is the upgrade path to PHP 9 expected to be smoother than past major version jumps?
The industry learned from painful migrations (PHP 4 to 5, 5 to 7) and Python 2 to 3, so they aim for smoother transitions.
26:42
Name two of the PHP sub-communities mentioned by Volker.
WordPress, Drupal, Laravel, and Symfony.
31:40
Using a Profiler
Explains how to use open-source profilers to see every function call and identify performance bottlenecks.
01:30PHP Performance Myth
Debunks the myth that PHP is inherently slow, explaining it depends on the use case and comparing it to other web languages.
03:52Rewrite Fallacy
Highlights that rewriting in a new language is often faster because of re-evaluation, not the language itself.
05:13Tideways APM
Describes a PHP-focused APM tool that automatically instruments code without manual changes.
10:46Smoother Upgrade Path
Explains how lessons from past migrations are making the upgrade to PHP 9 easier.
26:42[00:00] Vular, welcome. You're going to be
[00:02] talking about performance in PHP. What
[00:06] exactly will you be telling us all about
[00:08] at PHP UK conference?
[00:11] >> Hey, thank you. Nice to to be here. Um,
[00:14] so the main thing I want to I want to
[00:16] talk about to people is how does the PHP
[00:19] engine actually work and how do you make
[00:21] decisions based on that. So not just uh
[00:24] and we'll also be talking about that not
[00:26] but not how just how to measure the
[00:28] program externally but also to develop a
[00:30] better intuition and understanding of
[00:32] how these things work so that when you
[00:33] look at a piece of code you can also
[00:35] already make some guesses about the PHP
[00:37] side of the performance and then we're
[00:39] also going to talk about the usual
[00:41] performance aspects like how do I
[00:42] measure how long the database is taking
[00:44] and we'll we'll see some other
[00:46] approaches like most people probably
[00:48] have seen how to instrument this in in
[00:50] userland like you make a wrapper around
[00:52] your database calls and you and and and
[00:54] you do that. But I want to show some
[00:56] more um seale approaches, some more PHP
[00:59] extensions you can use in some more
[01:01] low-level tooling to really figure out
[01:02] what's going on without having to
[01:04] necessarily change the code. For
[01:05] example, if you have a problem that only
[01:07] happens in production,
[01:09] >> I see. So if people come along and if
[01:11] they have uh slow running code or code
[01:14] that you know doesn't seem to be
[01:16] performing as well as they would expect
[01:19] then the takeaway from your talk will be
[01:21] one of the takeaways from your talk will
[01:23] be here's how we can measure it and
[01:25] here's will will actually show how to
[01:27] make changes um based on that
[01:29] information.
[01:30] >> Um so what I will be showing is a bit
[01:32] how to work with a profiler. There's a
[01:34] couple great open source tools out there
[01:36] where you can like run a request or run
[01:39] a process and really see every single
[01:41] function call that happens or see like a
[01:43] couple thousand times a second what's
[01:44] what's going on in in in PHP and then
[01:47] how this looks after you make a change
[01:50] but also just how to like reason about
[01:52] performance and how PHP actually
[01:54] executes your code internally so you get
[01:55] a better understanding for what's going
[01:57] on there as well.
[01:58] >> Amazing. And in your work, have you
[02:01] applied these principles on projects
[02:03] that you've been working on? And what's
[02:05] been your biggest performance increase
[02:07] based on this the kind of work the kind
[02:10] of analysis you do?
[02:12] >> So like there's always a couple fun
[02:14] stories to tell, but so um I work for
[02:16] for a company um we'll maybe talk about
[02:19] that a bit later. I'm not going to go
[02:20] into much detail where we help other
[02:22] other people with performance problems
[02:24] both in a consulting fashion but mostly
[02:26] in providing a a software as a service
[02:29] platform to them where they can improve
[02:31] their code and like there is there is
[02:34] like the the hard winds of people like
[02:37] hey I have this service it has like a 7
[02:39] millisecond response time we want to get
[02:40] it down to five like what what can we do
[02:43] what can we measure and those are like
[02:44] very intricate and very specific but
[02:46] then there is also like here's an
[02:48] e-commerce shop and they had installed a
[02:50] plugin that uh every for every single
[02:52] page uh page load that they make like
[02:54] wants to get like a a token for like
[02:56] some tracking service and that just
[02:58] takes one and a half seconds. Uh and
[03:00] it's just like every single request and
[03:02] that token never changes and they could
[03:04] just have it in there but that plug-in
[03:06] just like fetches it for every single
[03:08] page request. And um because it's like a
[03:11] big e-commerce shop with a bunch of
[03:13] plugins that you haven't written,
[03:14] debugging that can actually be quite
[03:16] annoying. So like people can use our
[03:18] tool or other tools to like get that
[03:20] information very quickly and so that was
[03:22] a great great experience with the
[03:24] customer of like their onboarding to the
[03:26] product and the first thing was like oh
[03:28] that's the problem and within minutes
[03:29] you have a solution and it's it's really
[03:32] fun to see like
[03:33] >> how how fast you can make PHP and what
[03:36] you can get out of the language while
[03:37] still having like a nice highle language
[03:39] that allows you to work very quickly uh
[03:42] but then still get really good
[03:44] performance out of it as well.
[03:46] So the PHP haters who say it's too slow,
[03:52] that's not really true, is it? I mean,
[03:54] it I it always depends on like for what
[03:56] use case and what you want to do with
[03:58] it. um like uh if if if you need a
[04:02] real-time application or like if you
[04:04] want to do high frequency trading
[04:06] wherever you would want to do that like
[04:08] I probably wouldn't do that in PHP and
[04:10] um but uh for a website and like if we
[04:13] if we compare PHP to other web languages
[04:17] like JavaScript, Python, Ruby um I'll go
[04:22] a bit in the talk about like some
[04:24] comparisons there as well but I think
[04:25] PHP holds up really really well And um
[04:29] given the given how core works and the
[04:32] and the improvements there and how the
[04:34] engine works, there are some things that
[04:36] PHP is really good at. Like it also
[04:38] checks your types at runtime. So you
[04:40] don't like if you get a JSON response
[04:42] from an endpoint that you didn't expect,
[04:43] it won't magically do the wrong thing
[04:45] because the types didn't match because
[04:47] it actually checks the types. And that's
[04:48] cool. And it still manages to outperform
[04:51] some of the languages that don't do
[04:52] that. So I think there is there's a lot
[04:54] to be said for running PHP.
[04:57] I see. So if people are watching this
[04:59] and maybe they've got a slow web
[05:01] application or e-commerce thing and
[05:03] they're thinking, do we need to change
[05:05] from PHP to another language? The answer
[05:08] would probably be well actually let's
[05:10] look at the performance of our PHP
[05:11] application first. And
[05:13] >> yes,
[05:14] >> I I I think it's not like usually like
[05:17] uh if you rewrite something in a new
[05:19] language, it's not faster because you've
[05:21] used another language, but it's faster
[05:22] because you rewritten the whole thing.
[05:24] Um, and the the process of like
[05:27] re-evaluating all your decisions and
[05:28] reing your approaches and like redoing
[05:30] that usually helps more. And so chances
[05:33] are if you're good at one language and
[05:35] you do it again in that language, you
[05:38] actually end up with a way better result
[05:40] than if you move to a new language where
[05:42] you don't know all the pitfalls and all
[05:43] the potential issues that are coming
[05:45] with that.
[05:46] >> [gasps]
[05:47] >> But yes, but I suppose that a far a far
[05:50] lower effort or engineering effort is to
[05:53] use some of the things you're going to
[05:54] talk about and maybe some of the tools
[05:56] that you're going to talk about in this
[05:58] talk and that will probably illuminate
[06:01] some of the uh some of the issues you
[06:02] might be having uh with with with
[06:04] performance.
[06:05] >> Yes indeed.
[06:08] And have you have you on on well you
[06:10] might not want to answer this but on
[06:11] projects you've worked on have you had a
[06:13] really embarrassing uh find where you
[06:16] suddenly gone oh my goodness this is the
[06:17] reason it's it's it's so slow.
[06:21] >> Um like yes like so due to due to the
[06:25] nature of our product like we we get
[06:27] thousands of requests per second with
[06:29] with customer data um that that we use.
[06:31] So like we have some some endpoints that
[06:33] are rather performance critical and um I
[06:37] mean I wouldn't necessarily like say
[06:39] embarrassing. That's just uh the nature
[06:41] of working in a in a small self-owned
[06:44] company without like billions of startup
[06:47] money where you do stuff and then you
[06:49] see in production if it works and
[06:51] especially if you work on a tool that
[06:53] helps people run their software in
[06:54] production, measure it in production, it
[06:56] also makes sense that we use our own
[06:57] tool to look at our own software. So one
[06:59] of the things um that we did was the the
[07:02] doctrine 3 upgrade and um my boss
[07:05] Benjamin is also one of the core people
[07:07] of the doctrine project and we upgraded
[07:10] that and then during that process we
[07:12] learned that a couple of the custom
[07:13] things that we've done around doctrine
[07:15] to make it faster didn't fully apply to
[07:17] the new version. So like after the
[07:19] upgrade things were quite a bit slower.
[07:21] Uh and it was really fun to see like
[07:23] like we we made the deployment and then
[07:25] our software told us like hey the thing
[07:27] is five times slower now and it's like
[07:29] ah cool um like that is like one of the
[07:31] normal stories where you know you're
[07:33] doing something but also over the years
[07:35] there is a bunch of stuff where we where
[07:37] we looked at something I was like
[07:40] not sure why we're looping over this
[07:42] thing every time to find an element here
[07:44] like this is a very long list uh like
[07:48] this is really like some PHP level thing
[07:50] where like it's a million elements in an
[07:52] array and like we're looping through it
[07:53] to find something and uh we have so many
[07:57] hashmaps in PHP. This might actually be
[07:59] one of the good use cases for that.
[08:01] Let's let's do that. and then like yeah
[08:03] seconds of that stuff goes away or like
[08:05] you're not clearing some some um or m
[08:08] cache or something and that means the
[08:11] thing has to loop through a lot of stuff
[08:12] and it's quite fun to see when when
[08:14] using a tool that shows you like all the
[08:16] function calls that a process makes and
[08:19] then it's like
[08:20] >> string leng 50 million it's like ah that
[08:23] seems a bit off
[08:25] [laughter and gasps]
[08:26] maybe we shouldn't be doing that.
[08:28] >> Wow. So when you look at these things, a
[08:30] lot of the some of the things just jump
[08:32] out almost immediately, do they? Oh,
[08:34] well, that's something to investigate.
[08:36] There's some inner loop we're going
[08:37] around millions of times. And
[08:39] >> yeah, I mean, that's the that's the fun
[08:41] moments when you when you open it up and
[08:42] you immediately find something. But the
[08:44] other the other fun part I think of
[08:46] performance work is also like buckling
[08:48] down with a problem for an hour or two
[08:50] or uh longer and using a tool and like
[08:54] really looking at like the individual
[08:56] steps and where the time is spent and
[08:58] trying to make something like trying to
[08:59] make something 10% faster usually that
[09:02] is already fast is a lot harder than
[09:04] trying to make something a lot faster
[09:06] that when when when there is like these
[09:08] obvious errors. So it's both of these
[09:10] things can be fun. Yeah, I've certainly
[09:13] had some embarrassing uh performance
[09:15] related uh problems on on projects. Uh
[09:18] one of them we were running is ages ago
[09:21] we had a like a Jenkins box for for CI
[09:25] >> and the test suite took 45 minutes to
[09:28] run and back then we were using Garrett
[09:31] so every single commit had to had to go
[09:34] through validation and there were bits
[09:36] where we would leave it on in the
[09:37] evening and come in the next day and it
[09:39] was still running. And we're like, "Oh,
[09:40] we've got to get these tests down." And
[09:42] then somebody looked at the
[09:43] configuration. They said, "Why have you
[09:44] got XD debug running on the Jenkins
[09:48] thing and they like flicked the flag and
[09:50] suddenly the test went from like 45
[09:51] minutes down to 15." I [laughter] mean,
[09:55] it was it was like I spent three days
[09:57] trying to speed it up prior to that. So,
[09: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.
⚡ Saved you 0h 39m reading this? Transcribe any YouTube video for free — no signup needed.