At the time of this writing, it’s over a month since Drupal 9 was released. While the Drupal community has grown over the last decade, thanks to the innovative release cycle and building bridges to other communities, Drupal 9 release festivities were not as grand as I remember for Drupal 8. A significant reason for this is the COVID-19 pandemic that we all are facing right now (I hope you’re okay reading this in the future). But there’s a bigger point here. Drupal upgrades are not exciting anymore.
Stay with me for a minute. Drupal 8 will remain the most exciting Drupal release for the foreseeable future. It was an interesting time while we rewrote Drupal (almost) from the ground up. We did that using years of learned best practices and PHP community support. As a result, Drupal is more reliable and dependable now than ever before in its two decades of existence. On the other hand, Drupal 9 release was almost boring. The only thing we did was remove the deprecated code.
Understanding the Drupal release cycle
That’s a big deal here. As a community, we are approaching our tweens and deciding how best to lay our foundations for the long haul ahead. This is reflected in how we release Drupal. Drupal 1 through 4 were the only supported major versions throughout their lifetime. Drupal 5 support lasted well into the Drupal 6 lifecycle and this repeated for Drupal 7, 8, and 9. Due to an interesting combination of circumstances, Drupal 7’s support exceeds even Drupal 8.
We are innovating by introducing new features on a schedule. Read more about the release cycle here. At the same time, we are keeping Drupal maintainable for the long-term. It’s of little consequence that not all Drupal 8 code will run on Drupal 9. The important thing is that most of the code will. In fact, with the predictable release schedule of deprecations and new features, a well-maintained site might have had nothing to do when upgrading to Drupal 9. We saw this with a flurry of tweets and other social media updates announcing that people have upgraded their sites to Drupal 9 within hours of release.
Understanding major releases
Starting with Drupal 9, all major releases will be the same as the last minor release in the previous version, except for the absence of deprecated code. This means Drupal 9 is identical to Drupal 8.9 to everyone–editors, site builders, and developers (as long as they don’t use deprecated functionality). That will also be the case for Drupal 10 and Drupal 11. And this will go on until we see a significant shift in the PHP programming paradigm that warrants another Drupal 8 style rewrite (will it be generics or async programming or something else we haven’t yet imagined?)
Enough theory, what does this mean for you?
Based on everything we talked about above, let’s get down to business.
- Are you running Drupal 6 or earlier?
- Migrate right now.
- Are you running Drupal 7?
- You have until Nov 28, 2022, to migrate to Drupal 9. Yes, it would be best if you don’t plan to migrate to Drupal 8 right now*.
- Are you running Drupal 8.8 or earlier?
- Upgrade to Drupal 8.9 right now.
- Are you running Drupal 8.9?
- You’re good until November 2021. Evaluate your site’s contrib and custom code to plan for Drupal 9 upgrade when possible.
- Are you running Drupal 9?
- You have reached your destination.
* There are caveats to every situation. I always try to make sure that I never generalize.
Planning the upgrade to Drupal 9
You are on Drupal 8 and want to upgrade to Drupal 9? There are lots of resources to help, but I suggest you start by installing the Upgrade Status and Upgrade Rector modules. Chances are you won’t need to look elsewhere.
Upgrade Status module can check for Drupal 9 compatibility information for each of the modules you use (including custom modules) and, along with Upgrade Rector, generate patches that you can use on Contrib and custom modules. As we see here, many Contrib modules already have Drupal 9 compatible releases. Most of the remaining modules only need minimal changes to become compatible.
Personally, I have only upgraded one site to Drupal 9 so far. There are a few more sites I can upgrade to Drupal 9 right now if I switched to dev releases of certain modules I use. But there’s no good reason for me to hurry. My Drupal 8.9 site is as good as Drupal 9 in every way, except the amount of code, PHP has to load (and that’s not a major problem thanks to Opcache). We will only see new features in Drupal 9.1 in December 2020, and I can wait until then for the Contrib modules to have proper releases.
Understanding Drupal versioning
If you have used Drupal for some time, you might know that you recognize compatible Contrib modules by their version. For example, Pathauto 7.x-1.0 is for Drupal 7 only. It won’t work on Drupal 6, nor Drupal 8. Similarly, token 8.x-1.2 would not work on Drupal 7.
With Drupal 8, the community adopted semantic versioning for the core. This has now rolled out to even Contrib modules. This means that we would be dropping the familiar versioning system that we have used for over a decade in favor of semantic versioning. Don’t worry, existing major releases are fine. That means you would still see new releases coming out for Pathauto 8.x-1.x branch, but if it were ever to create a new major release, we would probably see Pathauto 2.0. Actually, we might see Pathauto in Core (I hope), but that’s a different story.
Some of the modules have adopted this and see new releases in semantic versioning style (devel comes to mind). Other modules are still on their existing 8.x-y.z release scheme because they don’t need to change anything. And that’s another sign of maturity in how we write code for Drupal.
Drupal has long since moved from being adventurous and made efforts to become more reliable and robust in serving the people, as it should. The Drupal community has long stood by its slogan: Come for the code, stay for the community. This shift in thinking about Drupal’s release cycle is a testament to that fact: Drupal is not built in a vacuum. It is built, foremost, to serve the people who would use it.