Drupal is a free, open source GPL-licensed content management system (CMS) which runs on top of PHP. As such, it is capable of running in any web server environment capable of supporting PHP. It supports Postgres and MySQL database backends, but many of the plug-in modules for Drupal do not support Postgres, so MySQL is definitely your best option for current versions. Drupal's home page is located at "http://www.drupal.org".

Drupal has a modular environment that allows its "modules", which extend functionality, to integrate themselves into every part of the site automatically. Even the theme engine, which is responsible for using "theme" files to produce HTML pages including menus and content, is itself a pluggable module, and several are provided.

Drupal is similar to the Everything Content Engine in that it is node-centric and it is extended using the same language in which it is written. Nodes come in various types, which are provided by modules (though some of them are provided by built-in modules.) A module can also extend a node type, by changing the way it displays. This allows some modules to, for example, add fields into the edit pages for node types belonging to other modules, on the fly. Meanwhile, since the site is written in PHP, an interpreted scripting language, you can also use PHP code anywhere you like. Since the system uses a central content repository, and all modules have access to functions in all other modules, each part of the system is able to benefit from the inclusion of any new module. Unfortunately a great deal of the data in the system is not node-based, which both simplifies and complicates extension of the system.

The current version as of October 20, 2006 is 4.7.3. The current testing version is 5.0 cvs. Each minor version substantially alters the behavior of Drupal, so modules from 4.5 (the oldest currently-maintained version) will not work on 4.6, and so on. This is also true of themes and theme engines.

Drupal is also capable of running in a multiple-site configuration using one copy of the drupal code, allowing patches and/or improvements to be used by multiple, independently administered drupal sites. These sites can use their own databases, or prepend a prefix to all of their tables so as not to collide with those belonging to other instances of Drupal. It is equally possible to use multiple instances, with or without their own databases, using separate copies of Drupal, so that they can have distinct code bases, modules, themes, and so on. Multiple installations on the same database are handled with a prefix which is added to the names of all tables, but you can also prefix only some tables so that multiple sites can share content, but (for example) have different user bases.

Drupal features a permission scheme which can also be extended. Specific permissions are granted to roles, any number of which can be applied to a user. The user gains the most permissions of the set. (Permissions are "or'd" together.) New user creation can be moderated (or not) and there is even a module that puts a captcha on the registration page, although once I got it working, I couldn't read it myself, so I disabled it. All of this is carried out using PHP extensions as is typical (though not universal) for Drupal modules, in this case mostly GD for generating the captcha image.

Drupal will even run on Windows, though there is certainly more difficulty involved. It can run anywhere PHP can run, which includes the Apache HTTP server, and Microsoft's Personal Web Server (PWS) and Internet Information Services (IIS). Since it is pure PHP, it will also run on any Unixlike system capable of supporting the latest PHP 4.x or 5.x. This is by far a better environment, because basically everyone developing modules assumes that you're running on Unix. There are few gotchas, but for the novice, they can potentially be show-stoppers.

With all this said, Drupal is both Free and free software and is more than powerful enough for most needs, with full support for RSS and ATOM syndication (publishing comes with it, re-publishing is well-supported through modules) and an assortment of blog API modules. It is relatively small and reasonably fast, and through modules provides nearly every feature the average individual might want in a content management system.

Drupal has undergone continual evolution and improvement and with each stage has become considerably faster and more reliable. The next release (Drupal 7) will feature sqlite-backend support; Drupal 6 received DB2 support contributed from IBM. Many major modules are being rewritten for Drupal 7, but the database code refactoring project is probably the biggest news.

Ultimately, you must have a development version of the site which can be used to test modules, because adding any given module to your production site might potentially break anything. You will have to do significant testing every time you add a module. You have to be especially careful while editing modules and testing them, because a flaw can cause your page to not render at all. Drupal is not forgiving of programming errors - this is largely because in effect, in PHP your programs become one gigantic script.