You may have heard the buzz about ways to make building certain kinds of Drupal sites easier. The terms "installation profile," "distribution," and "feature module" get thrown around a lot. But what do these terms really mean, and why do they matter?
When you first install Drupal, you have to complete a short wizard that helps you set up some basic values to get vanilla Drupal working. When the wizard is over, it does some processing in the background and then Drupal is ready. Installation profiles are responsible for that part at the end of the wizard where Drupal pre-configures itself. Technically installation profiles can add extra steps to the wizard too, but most of them don’t.
Installation profiles are useful because they can pre-configure Drupal in a way that is different than the default – a process that could take some time to do manually. Installation profiles can set up vocabularies and fill them with terms, add and configure your basic content types, create user roles, and fill in their permissions. In other words, they make it more efficient to set up sites for specific use cases. For example, you could build an installation profile for blog sites that would set up a "blog" content type, add a "creator" role, and give that role permission to add, edit, and delete blog posts.
Installation profiles take the form of a ".profile" file which goes in the folder "profiles." When running the installation script, you will have the option to choose which profile you would like to run. Because profiles only run during installation, you cannot switch profiles once you are finished installing.
Distributions are installation profiles "plus other stuff." They take advantage of the fact that installation profiles can also enable modules and – if Drush is available – download and install external resources (like jQuery extensions, WYSIWYG libraries, and even patches from issue queues). In other words, the term "distribution" refers to an installation profile and everything else that profile needs to work. You can either think of an installation profile as being one component of a distribution (just the .profile file), or you can think of a distribution as the subset of installation profiles that includes extra modules, themes, or whatever.
Distributions are even more helpful than standard installation profiles because they remove the stage in every Drupal project of having to sift through the thousands of available modules to decide which ones are most appropriate for your site. A distribution could make building an image gallery site much easier, for example, because it could choose and set up the best image gallery solution for your site. Again, distributions make it easier to build specific kinds of websites. Installation is the same as with an installation profile – just put the whole distribution directory in your "profiles" directory before installing Drupal, and then choose to run that distribution’s installation profile during the installation script.
Because tools like installation profiles are much more useful when they can pull in non-core modules, almost every "installation profile" you see is actually a distribution. In fact, the terms have become so synonymous that Drupal.org only uses the term "installation profile" and doesn’t mention "distributions" at all. (There is an issue to fix this.)
Almost every "installation profile" you see is actually a distribution.
In fact, installation profiles have been around since Drupal 5.0, but they didn’t become practical until the distribution model became easier (due mostly to the awesomeness of Drush) in Drupal 6. The ability for installation profiles to use external modules and files is a relatively new development. Drupal.org still doesn’t support some of the important features that many distributions use, mostly due to licensing problems. As a result, most of the major distributions are not hosted on Drupal.org.
But distributions sound great, you might protest – why isn’t there a distribution for every type of website? It turns out that creating installation profiles (and thus distributions) in Drupal 6 is fairly difficult, and it is one of the least-documented parts of Drupal. Because of this, only a few Drupal firms (and a few dedicated individuals) have created distributions.
There are a number of distributions available on Drupal.org, but only a few of them are mature, stable, and supported. Here are some of the major ones:
First of all, building distributions is going to be easier in Drupal 7. (Let’s hope that the documentation will be better too.)
Secondly, people have started to realize that combing through the 7000 modules on Drupal.org is pretty tedious. It would be much easier if someone had already figured out which modules are most useful for the type of site you’re trying to build. It’s also much easier to have an installation profile automatically configure everything for you than to do it all manually.
It is much easier to answer the question "can Drupal do XYZ?" if you already have a distribution that is doing it… this is the beginning of a movement for "Drupal as a product."
Third, as enterprise adoption of Drupal picks up, companies are starting to ask why they have to build things from "scratch." It is much easier to answer the question "can Drupal do XYZ?" if you already have a distribution that is doing it. (That’s a major reason why Acquia built Drupal Commons; they wanted to demonstrate to enterprises that Drupal is a viable competitor in the social enterprise space currently dominated by Jive and Telligent, and making that argument is easier with a distribution available.)
This third reason is the beginning of a movement for "Drupal as a product." Distributions enable easily building certain kinds of websites essentially pre-packaged. Vanilla Drupal is a flexible framework, but distributions like Drupal Commons have a specific purpose that is simple to pitch to clients. Imagine the potential of building something like Facebook-in-a-box (which I plan to do).
Features is a module that was conceived as a solution to the problem of keeping track of versions of Drupal configuration, but it has morphed into a tool that lets feature sets be exported and imported. For example, if you build an image gallery site, Features can automatically examine it and create a module that re-creates your image galleries with no configuration needed. Like with distributions, this allows skipping all of the setup and just jumping straight to the result you want to see. Instead of figuring out what modules you need to build an image gallery, you just install an image gallery feature.
Unlike installation profiles and distributions, you install feature modules after installing Drupal, and you can install as many as you want at any time. In fact, some distributions (like Drupal Commons) have begun to include feature modules, making it easier to upgrade between different versions of the distribution.
Instead of figuring out what modules you need to build an image gallery, you just install an image gallery feature.
However, Features is best used with specific feature sets. You shouldn’t build a feature that sets up an entire site like an installation profile does. Distributions are better for "all-in-one" solutions that fit with the "Drupal as a product" description.
You can go download distributions from Drupal.org, join the Distribution profiles group, or perhaps try building one yourself. Or you can just get excited, because as Drupal distributions become more prevalent and Drupal matures as a product, you can bet that there will be a lot more enterprise interest (and thus investment) in Drupal. It will also get a lot easier to build Drupal websites without memorizing the top 1000 modules.
If you want to learn more, check out the video of Irakli Nadareishvili’s session on Drupal Distributions at Drupalcamp Atlanta.
Isaac Sukin is a student at the Wharton School at the University of Pennsylvania. He has worked with Drupal for over 3 years, and is particularly interested in Drupal as a social networking platform. He interned at Mediacurrent during the summer of 2010. You can follow him on his blog or on Twitter.