Over the last year, a lot of effort has gone into building the next generation of Joomla in working on the Joomla! 4.0 and Joomla! Framework 2.0 releases. In addition to introducing several new features, including a fully rebuilt Media Manager, an enhanced event dispatching system, and new security features such as support for prepared SQL statements, we have also been doing some routine maintenance and paying off some of our project's technical debt by retiring deprecated code and raising the minimum supported software stack. In an update from last year's manifesto, today we would like to announce that the next major Joomla releases will require PHP 7.
Why PHP 7?
PHP 7 is presently the only fully supported major version of the PHP language, with support for PHP 5 drawing to a close (presently only 5.6 is receiving security updates and all previous releases are no longer supported). By the time Joomla! 4 is released, the oldest supported PHP version will have less than one year of remaining security support.
In looking at the overall lifetime of Joomla! 3.x, whose first release was in September 2012, Joomla! 3.x will have had a minimum of eight years of support by the time it reaches its end of support date. Assuming that Joomla! 4 releases in 2018 and has a similar lifetime, this means Joomla! 4 could potentially be supported well past 2025. As you can see, this is a large timeframe to support software, especially software whose primary purpose is building and managing websites. Looking toward our project’s future support needs, how the web industry as a whole is evolving (including technologies that Joomla is directly dependent upon to function), and using our existing development strategy to guide us, the releases of Joomla! 4.0 and Joomla! Framework 2.0 are our only opportunity to re-evaluate our supported software versions for quite some time.
Adopting to PHP 7
PHP 7 was a major release for the PHP language, one that required most software packages and extensions for the language itself to make updates to varying degrees. Looking at the usage statistics our community provides, of all installations that have provided data since the system was launched in early 2016, approximately 17% of sites report running a PHP 7 version. This number may seem low, but the statistics server contains data from all sites that have ever reported information and the public data includes sites that are no longer online or have opted to not send data any longer. Therefore, we also analyzed the usage data of sites reporting a Joomla! 3.7 version and have found that 42% of those sites are running a PHP 7 release. Another interesting trend we have noted over the course of 2017 is the increase in the number of sites running a PHP 7 release and the decrease in sites running PHP 5.5 or earlier. Using this data, we are comfortable with the rate of adoption in our community of PHP 7 and that requiring PHP 7 for the next generation of Joomla is not an unreasonable request.
What if I can't upgrade?
An important thing to remember is that Joomla! 3.9, our last scheduled 3.x release, will be supported for two years after its release. Similarly for Joomla! Framework users, the Framework 1.x packages will be supported for roughly the same timeframe (especially as the CMS has inbuilt dependencies to many Framework packages). Again, assuming Joomla! 4.0 releases in 2018, this means you can run your Joomla! 3 site comfortably until 2020. By 2020, it will be more urgent to upgrade as not only will your Joomla version no longer be supported, but most PHP versions that will run Joomla! 3 will be unsupported, as will many server software packages and distributions.
How will this impact the core code?
With Joomla! 3's minimum PHP version being PHP 5.3.10, there are numerous features and optimisations that we can make in our code as we phase out PHP 5 support. Many of these changes can be made without impacting the existing public API, however some features (for example, scalar type hinting) if implemented would introduce backward compatibility breaks if accepted. Therefore, we will be adapting the following policies as it relates to Joomla! 4.0, Joomla! Framework 2.0, and new and existing code:
- All new classes and methods in the new major versions may make use of all features available in PHP 7, including scalar typehints and return type declarations
- Private methods and methods in final classes (which cannot be extended by definition) may be updated to use PHP 7 typing
- Public and protected methods in existing classes generally will not have their method signatures changed unless the change improves understanding and use of the code (for example, methods which could use variadic signatures)
We are firmly committed to making the next generation of Joomla the best generation and feel that embracing PHP 7 going forward will help to deliver the highest quality product for our users.