Drupal recently turned 15 years old, so I thought it would be interesting to see how the different versions of Drupal have evolved over the years.
I'm not going to critique the code base for quality or the correct use of design patterns here, that isn't my intent. Instead, I just want to see what different versions of Drupal were like, both in terms of the code base and the look and feel of the application.
This also isn't an exercise in commenting on HTML or CSS elements. The way in which websites have been put together over the past 15 years has changed drastically, so there is little point in going into a discussion about it.
This was where the story of Drupal started. Released on 15th January 2001 it was primarily written by Dries Buytaert and Hans Snijder whilst studying at the university of Antwerp. They needed a collaborative system that they could use to communicate between a group of eight students and built Drupal to fill that need. The initial ideas were modeled after a couple of other bulletin board systems like Scoop (http://www.scoopdev.org/). Drupal is the English pronunciation for the Dutch word 'druppel' which means 'drop'. Although this is actually a take on the Dutch word "dorp" meaning "village".
I wasn't able to track down a copy of Drupal 1.0, but Scoop is probably a good indication on how it looked in the early days of development.
I managed to track down a copy of Drupal 2.0, which was released on 15th March 2001.
After getting things up and running I was presented with lots of errors and warnings, solving some of these helped the site run, but it wasn't happy. I was unable to get any form to submit correctly and as a result I had to add content in directly through the database. I didn't want to spend hours getting an old code base up and running so I turned off the error display and got the home page working. I'd sort of expected this as PHP itself has evolved in the years since Drupal 2 was released. When Drupal 2 was released PHP was at version 4, which means that object oriented support was included, but not fleshed out. There were a few instances of keywords causing errors and global variables that had changed name since that version.
Architecturally, Drupal 2 is built with some familiar concepts to anyone involved with Drupal 6/7. Most of the code base is procedural and objects are used to pass data around, rarely used to actually do anything. Interestingly, the theme layer is actually driven by an object, with methods like header() and footer() outputting content onto the page. Concepts like user accounts, comments, modules and even a multi-lingual system are present here. The idea of a Drupal node isn't yet present but we have a Story object that holds content.
Instead of going for 3.0 I opted to install Drupal 3.0.2, which was released 15th September 2001. It's clear that a lot of work had gone into the project in the 6 months since the release of Drupal 2. That said, it still suffers from the same PHP incompatibility as Drupal 2.
The object oriented theme layer is still present and we now have the concept of the Drupal node being an item of content, which can be separated into different types. Also new is the first appearance of a 'hook' system, where functions are called based on their name.
Drupal 4 was released on 15th June 2002, although I opted to try out version 4.7.11, which was released on 10th January 2008. This is the latest available version of Drupal 4 and shows what the system looked like at the end of its life. Despite a few minor PHP errors and some deprecation warnings, but the system works for the most part. I was able to register, login, create some content and take a look at the administration forms.
In fact, things are starting to look very familiar. The object based theme layer has been replaced with theme directories. The overall system architecture and the administration interface look very similar to Drupal 7. Pages like the content overview page and the block administration page look very similar to their Drupal 7 counterparts. Modules are contained in single files but many of the functions I use in Drupal 7 can be found here (although in different forms). The hook system is also a lot more fleshed out here, with many modules also implementing their own hooks for use in the system.
It's also interesting to note here is the inclusion of a database abstractions layer so instead of being tied down to using MySQL we have the option of using either different MySQL PHP drivers or even PostgreSQL.
Next up was Drupal 5, which was released on 15th January 2007, although I installed version 5.23 (released 11th August 2010) as this was the last version to be released. Drupal 5 saw the first implementation of an install script, so rather than running some SQL statements against a database table we now have a little install wizard that sets up our database for us. There are still plenty of PHP errors being produced but the system works quite well.
This version of Drupal is the first to have modules defined within their own directories, which has been the trend for Drupal ever since. The Form API was also introduced in Drupal 5, which made creating forms easy and improved things like form handling and security.
The themes have also undergone a bit of an update and we now have a template.php file that allows for theme level overrides. Although templates were available in other versions of Drupal, it wasn't possible to create overrides in this manner. Drupal 5 was also the first time that the Garland theme was added, which is still in use to this day. This theme was removed as a default theme from Drupal 8, but it's still available for use in Drupal 8 as a downloadable theme.
I have seen Drupal 5 sites in the wild, and even migrated a couple of them onto newer versions of Drupal, but I never worked directly on this version. You can still find the odd module on the Drupal.org site that was built for Drupal 5 and still has a downloadable link, although these modules are no longer supported.
Drupal 6 was released on 13th February 2008 and is still officially supported, at least until 24th February 2016. This was the first version of Drupal I started working on and as such I'm quite familiar with Drupal 6.
This version built upon many of the elements introduced into Drupal 5, so there are many aspects of the system that have been improved.
Drupal 7 was released on 15th January 2011, which was the 10th anniversary of the initial release of Drupal. I've done a lot with Drupal 7 in the 5 years since its release and I'm still using it in projects right now.
This was another incremental improvement over previous versions of the system and the last to use a similar architecture to the previous versions. There are a lot of internal changes (like the fledgling entity system) but most modules could be ported from Drupal 6 to Drupal 7 without many changes.
One major thing that was added after Drupal 6 was the inclusion of fields. This meant that any entity in Drupal (content types, taxonomy terms, users) could have fields added to it to store extra information. This was previously only possible by using a module called Content Construction Kit (CCK) but the inclusion into Drupal really added a lot of power to the system.
Usability was also a big part of the new version, with new themes and the ability to create administration themes. Bartik, the new front end theme in Drupal 7 improved the look and feel of the default site quite substantially. The Seven theme was supplied to allow a more user friendly administration experience.
Drupal 8 is the latest incarnation of the CMS system with humble beginnings. Instead of just updating the system with incremental updates Drupal 8 is a massive change in the way in which Drupal is put together. Large parts of the CMS have been re-written to be fully object oriented. This reflects a similar change in the way that PHP applications are developed in general. Drupal 8 is built upon reusable components that are managed by a package called Composer. The use of Composer has meant that third party libraries can be included into Drupal 8 easily.
When work started on Drupal 8 the project was split into several groups, each group picking a part of the system to improve. The outcome of this was a system that had major improvements in usability, accessibility, web services, configuration management, and multilingualism. As a developer, there is a lot in Drupal 8 that interests and benefits me. The fact that Drupal 8 has embraced modern PHP working practices means that it integrates well with other systems.
If you haven't had a look at Drupal 8 yet then it's time to start.
Looking back at the previous versions of Drupal it's clear that we've come a long way. From simple beginnings the Drupal community have pulled together to improve the system year on year. Many of these improvements have been grown from userland modules that have made their way into the core of Drupal itself. The last 15 years has seen many CMS systems come and go, but Drupal has stood the test of time and continues to grow. Part of this success is to do with the flexibility of the system, but I'm sure a good part is down to the cohesion of the community. The fact that Drupal's motto is "come for the code, stay for the community" is integral to Drupal's longevity and means that Drupal is here to stay.