One of the things about maturing software is that there is lots of legacy code based on decisions that were made long ago. Oftentimes this is refactored or removed, but sometimes the concepts are so deep that they are there to stay. Something that has been rattling around in my brain for a while is a question about what we would do differently if we started Drupal today. There are tools that are available today that weren't available 10 years ago and the web has fundamentally changed since then. There are many things that should be done the same but other things that it would be nice to have a do over on. The purpose of the post is not to call for a fork or to start a new project. It is to take a step back and look at the project as a whole and not from a legacy standpoint. Hopefully it will allow us to see the forest for the trees.
Things done well
Node/Entity ConceptThe idea that (almost) everything is a node, and in Drupal 7 everything is an entity, is one of the best design decisions made by the Drupal community. Having used several CMSes before Drupal, I know the pain of the other way. In other systems I'd install the blog module and the forum module. They didn't talk to each other or know anything about each other. All the data was stored in their own tables in unique ways. If I wanted to add a five-star rating system, I'd have to hope that someone had written a five-star expansion for the blog and a different one (that kinda-sorta worked the same) for the forum. The great thing about nodes and entities is that they allow items on your website to all be extensible in the same way. Those who have never used other systems may not fully appreciate how big of a deal this really is.
Easily ExtensibleRegardless of what type of extensibility system a software system uses, it needs to be easy and pervasive. Drupal has done this remarkably well. I often tell new programmers that if they are writing more than 5 lines of code to do something they are doing it wrong. The fact that we can do so many tweaks with so little code is a testament to how well done the extensibility system is. Regardless of what happens in Drupal 8, 9 or 34, it needs to remain very easy to extend.
Great Site Building ToolsOne of the things that really sets Drupal apart is the site building tools. The ability to create content types, define fields, set up displays and generate views of data; without having to write one line of code is one of the most amazing things Drupal has achieved. Think about that for a second. In the past people had to hire a programmer who created database tables and wrote SQL queries with libraries to fetch, parse and deal with html and forms. Programmers are no longer needed to achieve that in Drupal and it can be done with nothing more than a web browser. This will be one of the lasting legacies of Drupal. Figuring out some of the UI needed to do complex system designs.
Users/Roles/PermissionsAnother thing that Drupal really pioneered on the web was the users/roles/permissions system that allow for fine grained (but manageable) control of users. Prior to this most CMSes were designed around building out brochure ware or static type websites. Drupal, being "community plumbing," did a great job designing from the ground up around users and permissions. While there are still ways it could improve, the general design is awesome and still far ahead of other popular systems out there.
CommunityTo anyone who is not involved in the community: you are missing out. Drupal has by far the most amazing community around a software product that I have ever been involved in. People are genuinely helpful and available and there are fun and exciting groups all over the place. There are regular camps and cons that push the envelope forward and drupal.org is a good (and improving) place for collaboration. Without the community Drupal would be only fraction of what it is today.
Things done differently
Ruby vs PHPIf Drupal were started today, hopefully we would choose a different language. PHP has it's advantages in that it is easy to understand and very forgiving. While this encourages new and inexperienced programmers, it also encourages bugs. PHP is also growing up as a language (finally adding proper objects). But still has lots of little crazinesses. Hopefully we would choose a language like Ruby that is an absolute joy to write and was properly designed from the beginning. How many times have you written
if(! something)? In Ruby you can do
unless(something). If you haven't gotten to know Ruby yet, try it out and be amazed. I really wish Drupal was written in Ruby instead of PHP.