Upgrade & Migrate a Drupal 6/7 site to Drupal 8

With the upcoming release of Drupal 8, we are hearing a lot of discussion about what the upgrade process will look like.  With comments like – “There is a built-in upgrade path from Drupal 6 to Drupal 8 – there is no upgrade path from Drupal 6 to Drupal 7.“ – it appears as though some vendors are not quite clear on the difference between upgrade and migrate.

The assumption above may have been formed after reading Drupal.org’s post which states: “As of August 12, 2015, the D6 migrations in core are essentially complete. Work on D7 migrations is currently underway – the goal is to have the big four (terms, users, nodes, comments) complete by the end of next week (i.e., August 22 or thereabouts).”

It is important to note that this assumption is based on old information. As of today, (November 17th, 2015), the migration functionality is in Drupal 8 core.

It may sound like upgrading your Drupal site (Drupal 6 or Drupal 7) to Drupal 8 is easy: install D8 on the same box as the D6/7 install, and activate and run the migrate module in D8;  alternatively, run the drush migrate-upgrade command from the command line.  Sounds easy enough, right?  Unfortunately, there are quite a few things that some salespeople and vendors are not explaining …likely due to their lack of experience with Drupal upgrade/migration.

It is most important to note that the core migrate module only supports a few core modules.  NONE of the contrib modules or custom modules are currently supported in the core migrate module.  This means that the migration of a simple Drupal 6 or Drupal 7 site without any contrib modules may work out of the box.  However, a simple migration from views 2 or views 3 (the most used module in Drupal) is not yet supported.  In fact, it might never be supported, due to the fact that migration from views 2 to Drupal 7 views 3 is a nightmare, particularly if there are special contrib modules being used (remember – a lot of Drupal 6 views have custom PHP code, which is never going to be easy!).  This is just an example of some of the problems you may encounter when migrating to a new, major version of Drupal.

There is no doubt that the migration module makes the upgrade process easier for developers.  Having said this, you can’t underestimate the need for a skilled and knowledgeable developer who has an in-depth understanding of the system, particularly when there are custom modules involved.  The developer will need to know what these modules do, and have the ability to upgrade them manually.  This upgrade can be complicated even further, as there are a lot of contrib modules that are not yet supported on Drupal 8, making upgrading/migration impossible at this point in time.

Based on our experience with Drupal 6 to Drupal 7 migrations, we have learned that it is often easier to simply rebuild the site in D7, export the data from the D6 site, and import this data into the new D7 site.  Alternatively, you could write a special module to read the data from the D6 database and recreate it in D7 with the provided hooks. Since Drupal 8 is so different from any Drupal 6 or Drupal 7 installation, our initial thought is that it is going to be wise to follow a similar process for upgrading to D8.  Rebuild the site in Drupal 8, import all of the data from the D6 or D7 database, and rebuild your views.

As we can remember with the introduction of Drupal 7, a lot of contrib modules will not be available right away.  As a result, migrating a complex site that has a lot of contrib modules will not be easy to migrate.  It’s not quite as simple as “writing some code using the migration tools provided”, as some articles will have you believe.

Drupal.org’s post, Known Issues with the Drupal 6/7 → 8 Upgrade Path, gives you insight on some of the problems that you can expect when migrating a simple Drupal 6/7 site.

Some Drupal 6 site owners will hear something like this in the coming weeks/months: “Drupal 6 will be marked unsupported, 3 months after Drupal 8’s final release. So, dear customer, you better hire us to migrate your site to D8.”.  Even this (scare tactic) approach simplifies the dilemma.  It’s true that we are unlikely to see any security updates to Drupal 6 core, three months after Drupal 8’s final release.  Similarly, we will not see much development on any of the Drupal 6 contrib modules.  The latter is already the case, though, as most developers already concentrate on Drupal 7.  Many will be relieved to hear that there has been some discussion about extending the life of Drupal 6 by an extra 12 months, although this is yet to be confirmed (this extension would be for security updates since Drupal 7 updates are often based on problems found in Drupal 6).  Either way, we are of the opinion that it is now time to move away from Drupal 6, as a lot of new features and contributed modules are not in Drupal 6, nor are many Drupal 6 modules actively maintained.  Additionally, most Drupal 6 sites are not responsive and are in need of a major refresh.

Whether or not to upgrade a Drupal 6 site is not really up for debate.  The question is, do you upgrade your Drupal 6 site straight to Drupal 8?  As mentioned, a lot of contrib modules will not be ready for Drupal 8’s launch, and you can expect that it will take at least a year (if not more) before they are.  We anticipate that it will take longer than expected for these contrib modules since a lot of developers are not ready to use the new object oriented structure of Drupal 8.  We predict that some contrib modules will need new developers, or need the existing developers to learn how to code in Drupal 8. This all will take time, and we have a feeling that the learning curve for some developers will be too steep to jump right into Drupal 8 at the release.
Themers may also find the transition to Drupal 8 problematic.  We have noticed that several themers are still using the simple flat css2 file structures, which will limit their abilities within Drupal 8. For example, some themers may have trouble with responsive theming with the Sass preprocessor, which gives a lot more power than flat CSS allows. The key problem here is the fact it requires some technical knowledge of the command line interface to install.  Drupal 8’s arrival is increasing its complexity. Responsive theming is manageable, but the theming engine has changed, and Twig is replacing the PHPTemplate as the default templating engine. All of these changes pose new challenges for themers that are not accustomed to using the command line interface. Twig is less of a templating language and more of a programming language that needs to be learned before you can change a template.

Drupal 8 brings some other challenges with it.  Although this new release ships with modern responsive features, it drops support for IE 6,7 and 8, thus enabling the use of JQuery 2.0 (another challenge for many) and other code that assumes modern HTML/CSS3 browser support.  Also, Drupal 8 does not support browsers that do not support SVG (which includes IE 8 and Android browser 2.3).

So, what’s the verdict?

In our opinion, it is too early for complex sites to head down the Drupal 8 path. For new, simple sites, Drupal 8 is perfect and gives developers the chance to get their (D8) feet wet.  This experience will allow them to get ready for some serious developments as time passes.  One of Drupal 8’s goals is to make life easier for its users by moving several modules into the core, as well as the addition of an extended UI.  Building a site is getting easier for those without any programming experience, and this is a good thing.  Even so, a lot of the sites that I have been working on require custom modules, and that will continue to be the case, even with the advances in Drupal 8.

Our recommendation is that Drupal 6 sites should first convert to Drupal 7. The switch to Drupal 8 can be made in about 3-4 years, at which point many of the modules will be ready (and developers will have a lot more Drupal 8 experience!).  Considering that the true lifespan of a website is approximately 3-4 years, it would be a logical time to overhaul your site and make the upgrade to Drupal 8.  By this time, there will be great solutions on hand to transfer data to Drupal 8 (as we see today with D6 → D7).