Obviously, as a once-upon-a-time core developer for the project, and as someone who continues to work in that community, I am pretty familiar with WordPress. There’s hardly a day that goes by that I’m not hip-deep in WordPress code and news. I’ve watched its evolution over these past 7+ years as it has moved from a simple blogging system towards becoming a more full-featured CMS.

Before WordPress was born, I was searching for a platform to build my own site on. I was waffling over whether to write my own from scratch or to use an already existing program. One of the projects I looked at early on was Drupal (in fact, my drupal.org user account is 2 years older than my wordpress.org account). It was kind of interesting, from a philosophical/architectural point of view, but it wasn’t easy to set up and use. I tinkered with it briefly, shrugged, and moved on to inspect the next tool for consideration.

In recent years, my wife, Susan, began using Drupal at her job, which brought me a couple of opportunities to look at it when she had questions that she thought I could help her with. When I watched her configuring her Drupal sites, I could see that while it had some nice architectural features, it still had a steep learning curve. So when the D7UX initiative came around, with the goal of making Drupal 7 easier to use through a new-and-improved interface, it piqued my interest. Also, Susan has been involved with the organization of DrupalCamp Atlanta for its first two years (as the voice of the @DrupalCamp_ATL account, AKA “Drupal Peachy Head”). So I’ve gone with her to those two DrupalCamp events, and had the opportunity to learn more about that CMS.

I’ll admit that I’m still not terribly familiar with actually using Drupal, though I did finally install D7-alpha-6 on my laptop recently. But I have had the opportunity to observe its community some — online, in person, and through podcasts — and I’ve learned a little bit about how they manage the release of a new version. And so I have a pretty good perspective on comparing some traits the WordPress and Drupal communities. I’ve said it before, and I’ll say it again: there is a lot we can learn from each other, and I think that it is a win-win for the community in doing so.

First of all, what can Drupal learn from WordPress? Well the main thing is one that they are already working on: they should improve their user interface. It’s no secret that probably one of the biggest factors of the success and popularity of WordPress is that it is so darned easy to use. It starts with “the famous 5-minute install”. You don’t have to be any kind of technical wizard to set up WordPress. Pretty much all you need to get started is the database information that will be provided by your hosting company in most cases. And then once you’re past the install phase, the rest of the software is pretty intuitive. The ability to upgrade plugins, themes, and even the core system itself at the click of a button is icing on the cake.

This slideshow presentation from Jen Lampton makes most of the salient points:

And what can WordPress learn from Drupal? They have a really solid core architecture with amazing introspection capabilities. The Features module for Drupal makes it easy to export modules — along with their dependencies, configuration, and data — from one installation to another. WordPress will be hard-pressed (no pun intended) to emulate something like that for many versions to come. Drupal has automated runs of unit tests whenever someone contributes a patch for core or a module, giving developers almost instant feedback of problems and regressions. It is common for Drupal developers to build modules which do nothing more than provide infrastructure and APIs for other modules to leverage. Having a dependencies system in place makes this possible.

Drupal developers will sometimes scoff at WordPress and deride it as “just a blogging platform”. WordPress developers might point out how hard it is to do certain tasks in Drupal which just work “right out of the box” in WordPress. But some of those same Drupal developers look at how easy WordPress is, or how popular it is, and feel a little jealous. A few WordPress devs recognize our lack of database independence, dependency checking, or flexible URL routing, and wish we could push these things into core now.

Drupal devs note that WordPress has been beefing up its custom taxonomy and content type support, and say that WordPress is just copying Drupal. WordPress devs point out how often Drupal gets compared to WordPress when discussions of good UI come up, or tout how even Mark Boulton Design put their D7UX blog in WordPress to start with, because it was easier to use than Drupal at the time.

But I think these changes are a pretty natural evolution for both systems. If you could imagine “The Perfect CMS”, what would it be like? It would be easy to use, and it would be full of powerful features, right? It would be lovely to look at, and it would have a strong underlying architecture and API.

I think WordPress and Drupal are both heading in that direction — they just had different starting points. WordPress started with good usability, but a limited architecture and feature set. Drupal started with a strong architecture, but a very developer-centric user experience. But WordPress has been steadily improving its architecture. And Drupal has been working on its UI. They had different origins, and they have taken different paths, but they are both evolving towards CMS Nirvana. And we users get to ride along.

If you could bring a feature from one system to the other, what would it be?

Like this:

About Dougal Campbell

Dougal is a web developer, and a "Developer Emeritus" for the WordPress platform. When he's not coding PHP, Perl, CSS, JavaScript, or whatnot, he spends time with his wife, three children, a dog, and a cat in their Atlanta area home.

37 Responses to WordPress and Drupal: Convergence?

i wish Drupal had as many available themes as Word Press. I love working with the Zen theme in Drupal, then customizing sub-themes. But sometimes a solid pre-built theme would be great for smaller projects.

I would love to see Drupal have a stronger baseline USER experience. This would be features like a WYSIWYG editor. This is more a “polish” feature than an actual line item. I think Drupal should do more for the end user in a thought-out way out of the box.

Drupal 7 is supposed to be somewhat better than previous versions in that regard. I still haven’t had a chance to play with it much, myself. But I expect that over the next few releases, we’ll be seeing more improvements to the out-of-the-box user experience, and probably also some niche distributions specifically geared towards ease-of-use.

Pathauto + Views + WordPress = CMS Nirvana. Some way to upgrade/install modules that doesn’t make you want to kill yourself and anyone in the vicinity + decent documentation for beginners + Drupal = CMS Nirvana. As you can tell, I use both, and they both frustrate me to some degree :). p.s. paragraphs in comments = blog nirvana

There are plugins for WordPress which are supposed to be much like CCK and Views (Gravity Forms, Flutter). I’m not sure where they might fall short of the comparison to Views, though. As far as Pathauto goes, isn’t the native “pretty permalinks” feature of WordPress pretty much the same thing? If not, what am I missing? I know there’s not a way to radically override the URL structure without plugins, but other than that?

+1 on the wysiwyg and file upload for drupal off the shelf. afaik that’s been pushed into drupal 7, though i may be wrong. installing modules on the fly for drual would be a big plus. using ftp / drush for new modules on a shared server is a PITA IMO. hopefully their multisite stuff gets fixed in 7, i hear WP multisite installs are fairly simple with wp3.

People’s expectations are rising. Clients now just expect that certain things are “included” in a build because of their experiences with WP, i.e. WYSIWYGs. This leads to additional Drupal tasks for me and either lower profit margin or increased cost for clients over time. Adding these types of features to Drupal core would be great, but would need to be done in such a way that they can be completely overridden.Case in point, the WP WYSIWYG used on this very form caused my Mac Safari 5.0.2 to completely crash twice. I had to switch to FireFox to even post this. The ability to override the default “feature” to add something custom would be ABSOLUTELY ESSENTIAL, i.e. in the case of the WYSIWYG, being able to override it and install CKEditor in its stead would be fantasterrific. But this is basically the direction that the Drupal packaged distros are already headed, yes?I have the opposite experience as you do, Dougal. I shrugged at WP, so unfortunately don’t have a good idea about all the features WP offers, but just from my exposures to it, it has definitely caused me to become more interested in following the developments of the D7UX project.Good, thought-provoking post. Thanks, Dougal.

Amazing article! I’m not familiar with Drupal but I look forward to get deep into it. But I love WordPress in the other hand. I don’t find it contradicting to use both or to like both, especially now that they are getting nearer on every release.

I’ve also been using both systems extensively (WP for 6+ years personally, and Drupal for about 3 years at work), and I agree with how you see the two of them evolve towards the same goal from two different starting points.

So, what features to bring from each other? I’d say that from WordPress to Drupal you would want a) the media library / media handling for sure. This is being done in the media project for Drupal 7, and they to *great* work there, but WP is still way ahead, and will probably be for quite some time.

Also b) a polished WYSIWYG integration. One of my favourite things in WP is not that there is a WYSIWYG included (as that can be done in Drupal too, and also with freedom of choice regarding which editor you wish to use), but how great it works when you have to do stuff like switch from WYSIWYG to code mode and back again, without the different modes mangling each other up (like creating a blob out of all your text when going from WYSIWYG to code).

Also how well thought out the filters are. I’ve actually used WP loads of times to clean up and make semantically correct HTML just by pasting bad code into the editor and pasting it out again from source. WYSIWYG in WP just works great, while in Drupal you might get it to work quite good, *if* you are *very* familar with Drupal.

From Drupal to WP? Strong APIs for sure, and I’ve also missed a more flexible permissions system in WP several times. From contrib space CCK and Views are the obvious killer modules that makes life a joy for site builders.

Personally I’m very familiar with and fond of Drupal now, and I would not pick up WP as the tool to do any job anymore, even how much I love it. There are just so many, many more things that are possible with Drupal

I found WordPress before I found Drupal. I’ve tested Drupal several years ago. I think it’s harder for WordPress users to switch to Drupal than the other way around. The main reason I’m still using WordPress after all these years, it’s easy to use.

I’d love a mixture of both..My experience is that wordpress is easier for users and Drupal is easier for developers.Having worked with both I think I prefer Drupal. I expect that Drupal 7 will come with a wysiwyg built in and that will bridge the obvious big difference.

Funny enough, I’ve been in direct contact with Drupal devs on their Database Abstraction layer. They have discussed it and believe that it would be possible to make it third-party so other systems can utilize it and further it’s functionality. For instance, this DB Abstraction layer could be injected (love using that word when talking about DBs hehe) via a plugin that would take over certain WPDB class functions to allow MySQL / MS SQL / etc.. to be used with WP. It’s not that WPDB can’t really be fashioned to do this, it’s that WPDB is itself not abstracted enough and WP core utilizes MySQL-only functions / syntax. Shifting towards using an updated layer — WPDB is based off of a third-party class built many many years ago and abandoned by it’s original developer who had continued development years beyond the version of WPDB we now use (it had support for more than just MySQL too).

I believe Drupal has superior functionality at the core regarding DB, and WP could really learn a lot from the lessons Drupal has had to teach itself over the years. That’s my two cents, just a taste of what’s to come hopefully as I help bring over some DB love from Drupal in WP.

I use both Worpress and Drupal in my work (and also Joomla), but if there ever was a perfect system in the making, it was Movable Type. Unfortunately, bad management has virtually killed it. But both WP and Drupal still lack some features that MT had back in 2003 (for example their simple and powerful template markup language and the static publishing feature).

I personally couldn’t stand MT’s static publishing system, it was like working with something from the 90’s. Change, republish, change, republish, absolute nightmare.WordPress has a very straightforward templating system, add a caching plugin and you have something far more powerful than MT ever was.

MT from version 3.2 onwards had a very flexible static publishing setup, and you could choose which pages to publish statically and which to do dynamically. I published static indexes and dynamic archives, so that people could still read the main blog if the database went down. It worked very well for me.

I use WP and Drupal now for three different sites, and the thing Drupal has that I wish WP would have is the ability to set widgets (blocks) per theme. That way you can select a theme which has a different set of widget areas from your old one, and set the widgets for that theme alone, and then, if you don’t like it, go back to your old theme and find your widgets where they were before. You can’t do that in WP as it stands.

I’m with Michelle – making upgrades easy. I am on 5.x and too scared to upgrade to 6.x let alone consider 7.x – I have almost a thousand pages and there’s no way I want to lose any of them. A simple upgrade process would make life very much easier for all users.

I actually migrated to Drupal a couple of years ago, as I found the flexibility very nice. However, I completely agree with Les and Michelle, Drupal needs an easier way to upgrade. For smaller sites I’ve been looking at using WordPress again for ease of use.

Being on of the self taught, like to do things myself as I then only can blame myself when it is not done or is not done the way I want it.I purely went to wordpress because of the fact that it is so easy to use I can set up and have a site running in 5 / 10 mins after the interface is done with the hosts.I had lots of hassles trying to understand and configure my site with drupal.One of the things that i however do wish that WordPress did have was a back end client login facility.I do photographic work and often – clients want to be able to download and access the images in hi res – if I could give them a back end almost ftp access similar to phpalbum then I’d be in 7th heaven

It’s strange but lately I was thinking the same thing. Open Source projects are maturing, some bugs are “overall bugs” and are applied in many projects the same way, functionality and features are growing so the architecture has to move along to be become broader. And abstraction layers are build based on common (development) patterns where in the end the application running on top of it matters less but becomes an application platform. E.g. WordPress running completely inside Drupal, with the advantage that development teams can merge and big fixes only have to applied once in the codebase.

I love WordPress and the WordPress dev’s to death, but the architecture is terrible. Just about every function uses multiple global variables. I understand it was initially built in the bad-old-days of PHP4, but I would really love to see the WordPress team begin to weed out every global variable, inject dependencies, move everything into well-defined classes, and begin unit-testing everything.It’ll probably never happen, but, hey, one can dream.

Keep in mind that backwards-compatibility with older versions is very important to the WordPress devs. If you look at how the codebase has evolved over time, you’ll see that a lot of underlying core features have been built around classes, and even parts that didn’t start out as OOP have evolved into classes.

Besides, OOP isn’t the end-all-be-all of programming. It’s just another tool for structuring code and data. Procedural programming isn’t inherently “bad”, even though we mostly consider things like global variables to be “sloppy”.

In fact, WP’s mix of procedural and OOP methodologies has probably contributed to its success. If it was completely structured as an OOP application, it would be much harder for budding developers to create plugins and themes. And while we might complain about the quality of some plugin code, it’s good to remember that even us experienced developers had to start somewhere, once upon a time.

I think they serve different services for different people. I have had experience with both Drupal and WordPress and usually I can purchase a domain and have it powered up and running WordPress in an hour (no specialty graphic design)… this is not the case with Drupal. I can get Drupal up and going in 4 hours after creating all the views and in it for a more unique site right out of the box.

That’s a loaded statement, the WP team cares about Security and Scalability too. So the best statement would really be to say, Drupal’s capabilities regarding Security and Scalability are more advanced than WP. Of course Drupal nor WordPress will be like the other exactly. Drupal has it’s pluses, WP has it’s pluses.

I was in the same boat as you–having been making websites since 1995, I eventually wanted to stop writing HTML and just get on with creating content. WordPress has been great so far, however just one comment about nirvana: it seems the more sophisticated architecture WordPress gets, the user interface seems to get more complicated. That is to be expected, I guess.

From my personal experience, I prefer Drupal more than WordPress because of these very powerful modules – CCK, Views, Panel and Rules. In short, Panel is used for any kinds of complex layouts and Rules is used for complex decision making based on different custom user roles, content types and conditions, so on.

Whom can be the winner, if we compare both in SEO, Performance Optimization, User Roles, Complex Decision Making, Data Import/Export, (Flexible) Security, etc..?