Lullabot Ideas

We know stuff. We empower you to know stuff too.

Understanding 8: Where Drupal Is and Where it's Going

Article by Jeff Eaton

What we've built, where we're going, and how to stay sane

For the past several weeks, long-running debates in the Drupal community have been in the spotlight. Since DrupalCon London in August, discussions about the maintainability of Drupal Core, the nature of Drupal as a web framework, and its proper target audience have generated hundreds of comments. At the heart of the current debate are some key questions:

  1. Drupal core has become larger and more difficult to maintain in recent releases. How can we make it easier for increasingly overloaded core developers to maintain the software?
  2. The rapid growth of Drupal has led to a much more diverse pool of users. How can we account for the different -- and sometimes incompatible -- needs of that very diverse userbase?
  3. The same complexity and tight coupling that overloads core developers also makes building major products and sites on top of Drupal difficult; how can we simplify that work?

Those Sound Serious

In many ways, these concerns overlap with each other. The traditional solution to serving more diverse needs is to add more functionality to Drupal core, but that exacerbates the problem of developer burn-out and increases the complexity of building focused products on top of Drupal.

On the other hand, pruning lots of code from Drupal core would reduce the maintenance overhead and the complexity of customizing it, but would leave site builders and newcomers with a less useful tool.

Anarchy in the UK!

During the post-DrupalCon Code Sprint in London, old discussions about removing modules from Drupal core were reignited. Patches to remove our old friends, the Blog and Profile modules, were committed to the Drupal 8 branch. The fate of other "feature modules" like Poll, Forum, and Trigger, is actively under discussion, though it's unlikely that all of them would be removed.

While everyone seems to have a hitlist of modules they rarely use, and a whitelist of ones they'll fight for, the tactical discussions about individual patches makes it easy to lose sight of the strategic purpose of "refocusing" Drupal core.

A Way Forward

Core developers Nathaniel Catchpole (catch) and Daniel Kudwien (sun) have been two of the most active participants in the conversation, and my "Product, Framework, or Platform?" session from DrupalCon London summarizes my take on some of those issues. Last week we had a chance to talk about some of these issues, and while there's still a lot to iron out, quite a bit is becoming clear.

Rather than simply hunting for modules that experienced developers often ignore -- and evicting them from Drupal core -- our community needs to assess what Drupal core is and what it should be. There's broad agreement that we need to establish a set of heuristics that our community can use to weigh new functionality against its shared vision of what Drupal should be, and examine existing functionality to see if it's still appropriate for core.

These are hard decisions, because our community has rarely invested in building consensus around Drupal's purpose, target audience, and internal architectural philosophy. The current explosion of interest in these topics, and the demand for viable solutions, tells us that the time is right to tackle them.

What is Drupal?

One of the key problems we face in talking about Drupal is the relatively clunky terms we use to describe different parts of our relatively complex software stack. Often, discussions pit Drupal's potential as a "Development Framework" against its possible future as a "Product for end users", but that binary split gives a false picture of how our system really works.

In his 8/31 blog post, Nathaniel Catchpole addressed this issue by naming five distinct layers of the Drupal software stack, and I think they're a great way to break things down.

The Web Framework

The foundation of that stack is the essential "web framework" code for Drupal. It's the portion of Drupal that provides essential services any web application would require. Rendering data into HTML and other formats, identifying and loading plugins, handling HTTP requests and responses, caching, database and storage access, and so on all live at this layer; today, most of this code is found inside of Drupal's includes directory.

Drupal's developer tools.

The Web Framework portions of Drupal are actually the least "Drupally." Serious core developers and maintainers of large modules are familiar with it by necessity, and its performance and stability is important, but none of the functionality at this level is unique to Drupal.

In the future, we can ease our complexity and maintenance problem by using code from other PHP web frameworks instead of reinventing the wheel. In Drupal 8, for example, we're replacing certain parts of Drupal's low-level framework layer with well-supported code from the Symfony Project.

The Building Blocks

Moving up in the stack, we find the "building blocks" layer that Catch referred to as the "Platform" in his blog post. This is where we begin to encounter Drupal-specific approaches to CMS and web building problems. The Entity system, users, nodes, taxonomy terms and vocabularies, actions, roles and permissions, FieldAPI, text formats, and our concept of "Blocks and regions" live here, and can be used to assemble features and functionality. Reusable user interface tools and UX components are also here: things like drag-and-drop tools, Drupal 7's Overlay mechanism, and so on are all reusable tools used to craft usable interfaces.

Most of the functionality at this layer is invisible or irrelevant to the people who visit a Drupal-powered web site: they don't see Views and flags and nodes, just galleries and favorites and articles. That type of visitor-oriented functionality still has to be assembled out of the building blocks. Most of the "Big ideas" in Drupal's history made their splash at this layer: Node Types, CCK, Views, Context, and so on.

As Effulgentsia points out in his comment on Catch's post, the Web Framework and Building Block layers are what most people want to keep when they talk about "streamlining" Drupal or making it into a simple framework. Although a Drupal site could run using nothing but the components that exist at this layer, it would be hard to build it without the piece that comes next...

The Site Building Application

If the raw materials of a Drupal site live in the Building Blocks layer, the tools for assembling those materials into a working web site live here, in the "Site Building Application." It contains the tools that are used when building a new site from scratch via Drupal's own web interface. Examples include administration forms for creating content types and modifying their fields, as well as modules like Views UI that exist solely to create and configure new site elements. (This layer doesn't include day to day user management and content management, however -- just the tools used to actually create and configure a site.)

The site-building application.

Often, we're used to lumping this part of the Drupal stack into the same category as the building blocks themselves. A well-built Drupal site, however, doesn't actually need the Site Building Application to run smoothly: like the booster rockets on the space shuttle, its job is to 'launch' the site into existence. Later, if new features need to be built, an administrator can also use it to make the changes.

Why bother discussing it as a unique layer in the Drupal stack? Over the past several years, more and more tools have been built to provide alternate ways to set up and configure a site. Modules like Views, Flag, Rules, and more can export their configuration to files, and canned modules can provide ready-to-use functionality to users who don't have the time or the experience to build them from scratch.

Tools like Features allow even more complicated functionality to be bundled together, and command-line tools like Drush can handle some of these setup tasks without ever touching a web browser. Installation profiles can automate the process as well, setting up a fully-configured site for end users without the intervention of a traditional "Site Builder."

User-Facing features

We've talked about the framework, the building blocks, and the site-building tools that we're all familiar with. Now comes the layer that excites everyone: user-facing functionality.

The Feature and Product layers.

Features like photo galleries, blogging, discussion forums, online stores, social media integration and real-time chat all live here. Content administration tools like the node editing forms, user management screens, and so on also live here: the people who manage a Drupal site every day are its users, too! The Workbench Suite, developed by Palantir, is a great example of a feature/functionality module that's aimed at a site's managers and editors rather than its visitors. Regardless of who the audience is, functionality that lives in this "Feature Layer" is about the day to day operation of the site, rather than the creation and configuration of the site itself.

In the olden days of Drupal, features that lived at this layer were almost always custom-coded in PHP. Want a custom content type? Write a module. Want special behaviors like a calendar or a listing page or an RSS feed? Write a module. Many of the "Feature Modules" that ship with Drupal core (blog, Forum, Poll, Tracker, and so on) come from this era. Over the last five years or so, tools like CCK, Views, and others have changed the game. Rather than downloading a custom Photo Gallery module, we combine Views, Content Types, Image Fields, ImageCache, jQuery Sliders, and so on. Sometimes the "recipes" for great features get passed around as blog posts, screencasts, and so on.

Tools like the Features module have also emerged, allowing site builders to export the configuration choices they've made into a standalone module. It's still 100% configuration and combination of Drupal's Building Blocks, but it brings back some of the simplicity we lost when we moved away from the "Just turn on the module, and you have a Gallery" era. As the standard solidifies, projects like The Open App Standard may provide another approach to packaging and distributing these end-user features, but the place they occupy in the Drupal ecosystem is the same.

End-User Products

The capstone on this Drupal stack is one we're not as used to talking about in the community: products for end users.

When all the tinkering and programming and theming is done, a "product" is the end goal. A single-user blog for a book lover, a portfolio site for an artist or photographer, a local newspaper's web site, and so on are all concrete "products" formed by the careful use of all of Drupal's other layers.

What really lives at this layer? Often, they're one-off web sites built for a particular person or organization's needs. Increasingly, the world of Installation Profiles and Drupal Distributions has started capturing common types of sites in the form of reusable products like Open Atrium, Drupal Commons, and OpenPublish. Hosted services like Drupal Gardens, Buzzr, and SubHub are also products, because they package a particular administrative interface with a particular set of features, and target users with a set of needs more specific than simply "building a Drupal Site."

At the annual Do It With Drupal conference, one of our tracks is a parade of Fantasy Sites -- clones of popular sites like Stack Overflow, BaseCamp, Flickr, and others built in Drupal. They're built on a short timeline using existing Drupal building blocks, and deconstructed for the audience by the team that created them. It's consistently one of the most popular events at the conference, because people love seeing how compelling sites were created.

One of the greatest challenges faced by new users of Drupal is the spartan quality of the standard installation profile that it ships with. Although it pre-configures a handful of content types, it doesn't target a particular use case or type of web site, and leaves many users shaking their head as they evaluate the whole platform. Real products living at this layer of the Drupal stack are all about making clear and conscious choices, then implementing them with the tools Drupal provides.

The Drupal Platform

Drupal's platform hierarchy.

There we have it. The five layers of the Drupal Platform! At the very top, most visible to visitors and new evaluators, is the array of "Products" that can be built with Drupal. From hosted site-building services to high-end enterprise intranets to mom and pop web stores, it's where we shine. Although Drupal Core doesn't offer much on this front by default, successful Drupal products show newcomers its power and flexibility. These products can be thought of as combinations of features -- choices about what the purpose of each site really is, and decisions about what user-facing functionality should be combined to serve that purpose.

The Site Building Application is our "Product Zero" -- the piece that site builders use to construct their own features and products. Books are written about using it properly, new modules expand on its functionality, and tools like Features and the Drupal 8 Config Management Initiative are designed to simplify the process of capturing and reusing the things that are built with it.

The Site Building Tool would be useless, though, without the raw materials provided by Drupal Core and popular contrib modules -- the conceptual building blocks of every Drupal site. When earth-shaking changes hit the Drupal world, they usually start here with new ideas like "Content Types" or "Views" or "Fields." The building blocks, too, would be useful without the hard-working application framework that is Drupal's foundation. Though it rarely gets much attention, that very bottom layer of the Drupal stack is doing its work every time a page is served up.

The boundaries and dividing lines discussed in Catch's blog post and this one aren't perfect, but they give us a useful way to describe and discuss the way Drupal actually works today, as well as where we want it to be in the future. Looking at Drupal as a "five-layer platform" can also help us identify places where our existing code and modules bleed across those boundaries. That 'bleed" between layers makes maintenance and ongoing core development harder, and it makes building new and innovative products on top of Drupal more difficult.

Double Rainbow Over Amarillo by Kareno03, on Flickr

What does it mean?

So after all those words, what have we gained? Does this way of discussing Drupal help us understand some of the burning questions our community faces? Looking at our ecosystem and our codebase through the five-layer-lens can help us, and I think there are several critical conclusions we can draw.

  1. The long tail of Drupal users build features and products with the middle layer -- the "Site Building Application." They may know PHP and write custom modules to fill gaps, but the "Framework" and "Building Block" layers are a means to an end for them. Even code-centric developers need something at that level, whether it's Drush or custom-written tools.
  2. Calls to split the "framework" and "product" portions of Drupal core into separate projects would allow developers to obtain a slimmed down version that only includes the first two layers. However, the question of what should be bundled into the primary "Welcome to Drupal" introductory download would still remain. We can't avoid strategic choices simply by changing our infrastructure.
  3. One of the biggest pain points articulated by developers is the huge number of interconnections and cross-dependencies between different parts of Drupal Core's code. While it doesn't solve all of our problems, segmenting our code effectively along the boundaries discussed above can help. This would take discipline, though: loosey-goosey interaction between different subsystems and different layers is a big part of Drupal coding today.
  4. Dissatisfaction with canned features like Blog, Forum, and Tracker spiked when the community shifted to a "building blocks" approach. Those modules are useful, but no longer reflect our preferred way of solving problems. They're easier to understand, but less flexible, and have stopped evolving.
  5. Our preferred way of solving problems -- combining small building blocks into reusable features, and features into finished products -- is baffling for newcomers who have not yet mastered the building blocks themselves.

Where do we go from here?

There's no single step that will solve the kinds of problems that core Drupal developers are facing, or that newcomers to the project face as they try to ramp up. We can tackle individual challenges, though, as long as we keep the big picture in mind.

One way we can improve the situation is refocusing the tools that ship with Drupal core. We can simplify our code and serve site-builders more effectively by strengthening the building block functionality that comes with core, replacing the "canned" features like Blog and Forum with ones constructed from the building blocks, then shedding the canned feature modules that we've been dragging along for years. Finally, using use-case targeted installation profiles to give Drupal evaluators and new site builders a "running start" with common types of sites would help smooth our notoriously brutal learning curve.

Focusing on just one or two of those steps means that Drupal is likely to suffer, either from code bloat or a crippled experience for site building evaluators. The importance of Drupal's many constituencies makes this holistic approach a necessity.

When it comes to the nuts and bolts of Drupal's codebase, we've also accumulated a lot of technical debt over the years: we need to pry apart tightly coupled systems, reduce our dependence on oddball "Drupalisms" when we could use native PHP language features, and determine where our approach to extensibility is hampering developers rather than helping them. There's a lot of great work going on in those areas, but it often happens in isolation. Treating it as part of a holistic effort to reduce Drupal's complexity is important.

Over the next several weeks, I'll be posting more about several of the important projects that are converting the current discussions into actionable issues on Drupal.org. In the meantime, check out these "Meta-Issues" where important posts and code tasks are being collected, and weigh in here -- what do you think the future holds for Drupal's different layers?

Comments

One of the things I've been

One of the things I've been thinking about is the concept of Drupal core, which is the web framework and building blocks and a Drupal Starter Kit download, which includes core plus product-like functionality like Blog, Forum, Profile, etc. Much like CodeIgniter is the framework for the ExpressionEngine product. Sure, you can just download CodeIgniter and build sites with that, but if you're just getting started and trying to evaluate whether a CMS is going to meet your needs, most likely you want to see the full product first to see what's possible. Of course, someone would still need to maintain the Starter Kit and decisions have to be made about what gets included, which brings me to my next point.

One of the ongoing problems, as mentioned in the Drupal Drama podcast, is the number of new issues vs. the number of new contributors. Even with things like the Novice queue and core office hours, let's face it, contributing to core is not for the faint of heart. Perhaps by separating the framework from the product, we could attract more, for lack of a better term, "site-builder types" to contribute to the product while allowing people like sun and chx and catch to focus on the framework instead of spending time fixing issues with poll.module. If we had some Features-like functionality as part of the framework, maybe as a result of the Configuration Management Initiative, it would be even easier for site builders to piece together the building blocks for the Blog product, let's say.

I'm not sure this concept would ever fly, especially given the amount of Drupal cultural/organizational change that would have to take place in order to implement it, but I think it would go a long way towards cleaning things up, lightening some of the workload for current core contributors and possibly bringing in a greater number of new contributors.

Maybe for Drupal 9!

Yep.

Perhaps by separating the framework from the product, we could attract more, for lack of a better term, "site-builder types" to contribute to the product while allowing people like sun and chx and catch to focus on the framework instead of spending time fixing issues with poll.module.

I don't think that we're in a position (yet) to make a total separation, but that ultimate vision is definitely something that's on my mind. The five-layer approach that Catch originally described, and I echoed in this post, also provides us with a more nuanced picture than "framework vs. product."

The farther up the "stack" we move, the easier it is for people who aren't hardcore framework hackers to contribute, and the easier it is to develop solutions alongside core rather than inside. Long term, I think there's a consensus in the community that it's a good direction. In the short term, we have to perform a careful balancing act. Shedding the old-style feature modules, replacing them with more flexible tools, and bringing site builders and product-minded folks into the process to work on the upper layers? It's doable but we definitely have our work cut out for us.

Abstracting the Stack

Thanks for this awesome writeup, Eaton!

This is an exciting idea because it opens Drupal up to a whole world of devs who might have been uninterested otherwise. De-coupling these layers is advantageous because it allows someone to use non-Drupal components for one or more layers of the stack. That way, you can rely on good ol' Drupal for your website/app admin interface, but serve the data publicly using all sorts of architectures, e.g. JSON that powers a client-side app.

While appealing to site-builders, this type of flexibility could also attract hardcore front-end developers who would rather swap out entire layers of the proposed stack (likely the blue ones) in favor of more palatable replacements.

Exactly

I tried to explain this to webchick at DrupalCon London, but she couldn't understand, maybe I didn't explain it well. Having a Drupal for the admin that serve JSON to custom client side app IS the goal Drupal 8 should strive for. Or it will never survive the javascript wave that is shaking the web : node.js + client-side javascript frameworks that allows to build any kind of web apps, not just content facing websites like Drupal can do.

symfony

Gotta say, I am really excited about baking symfony into core. Replacing one-offs with a stable framework is such a great idea!

Lessons from D7CX

This is all very helpful and informative. It seems absolutely necessary to slim down the core so that it really is core, and this seems the way ahead.

One anxiety, though, is the number of modules whose maintainers pledged D7CX before the release of D7, many of which still do not have a released version to run with Drupal-7.x. Whilst moving building block modules out of core into a separate "layer" makes everything more maintainable, it means that sites built in D7 will use more modules that will be contrib in D8; even more so, sites built in D8 will use contrib modules a lot more. That then creates anxiety (certainly with me): If I use this contributed module, will there even be a version of it for the next major Drupal release, and if so when.

In an OSS community-driven enterprise like Drupal, there are never neat answers to questions like that, but they are key questions if the majority of Drupal sites are to move to the next major version easily and quickly each time it comes out.

I don't think Eaton is saying

I don't think Eaton is saying they won't be in core. Just that if you build them as features, then a completely different class of user can maintain and improve them. Hardcore developers can focus on making kick ass site building tools.

Also: I don't think the majority of Drupal sites SHOULD move to the next major version easily and quickly.

Not just that the maintenance

Not just that the maintenance would be different, but also we'd actually have good, modern examples of feature modules in core (which may not end up being the exact same ones that are in there now - but of that class).

There's several parts to major versions of core in terms of uptake:

- the difficulty vs. benefit for contributed module maintainers from upgrading to the next major version or starting new modules with that version.

- how quickly people building new Drupal sites start using the new version over the old one.

- how quickly existing sites migrate off older Drupal versions to newer ones.

For the latter, this can and should be a much slower process than the former two, since unless you're planning a major redesign or refactor anyway you already have a site that's working OK.

Part of the reason I'd like to move to using migrate module for this process is it would make it significantly easier for websites to skip major versions of core. There are still over 9,000 Drupal 5 sites pinging back to Drupal.org - some of those could potentially migrate directly to Drupal 8 and skip Drupal 6 and 7 completely if they haven't already upgraded by the time Drupal 8 comes out. People are already using this method to upgrade sites to Drupal 7 since it can be smoother than doing a two step core upgrade.

Useful framework for module selection

Thanks for articulating this. This eases my pain about people focusing on the site builder as end user, by clearly showing that _site building itself is a building block of the Drupal experience_.

Now the discussion can turn to which site features are part of the core download. Profile, Blog, Gallery, and Forums are all great candidates _if implemented as features made with the site building tools_.

Eaton: I'd like to be the first to nominate you as the Drupal 8 Product Manager for the core download.

Bingo!

Although I'm planning on expounding on it in later posts, those points are really important.

I agree that "Profile" and "Blog" and "Forums" and so on are all great candidates; a lot of the suffering around those modules today revolves around the old-school construction techniques used by the modules themselves. That forces the core developers to maintain what amounts to two codebases -- the "LEGO style" code of Nodes, entities, and Field UI alongside the "Toy car" code of Blog, Forum, etc...

Toys in core

Nice anaysis. Looking forward to the expounding ...

This hints at Lister in core, or Views in core, or some packaging change where non core projects are in the CMS download. Curious to see where you land on that. I'm OKish with lister in core, but in some ways that adds another toy. We already have a toy Panels in core (Dashboard).

Great Explaination

Great explanation Jeff - well written and illustrated. The stack that you and Catch have defined makes a lot of sense and should add value and clarity to the discussion. I don't have a lot more to add right now but wanted to just say thanks for contributing!

Download wizard

When reading your text I was think in something that would be awesome for new users or not so experienced user: a download wizard.

Let me explain. Users, as you said, don't think in Views, Panels, CCK and etc. while building their sites. They also don't figure out how to use all those modules together to build a simple feature as a image gallery. I observe it every time I teach how to use views and CCK to build this feature.

Based on that plus what you said, I think a good way to deliver the user what he want is to build a Drupal Download Wizard at drupal.org. This wizard will help users select what they want to use for their site based in some questions (or features they need). The resulting tarball can be a combination of Drupal stack + installation profile + features modules + contrib modules.

With that proposal in mind we can decouple the Drupal core into smaller modules or pieces and let the user select it à la carte.

Of course this idea need to be polished and some basic features should be built and hosted at Drupal.org to make it viable...

PHP features

"reduce our dependence on oddball "Drupalisms" when we could use native PHP language features" careful. Drupalisms are often more performant / powerful than what PHP offers.

Reduction, not elimination ;-)

Totally agreed that wiping out Drupal's unique solutions to thorny problems is a bad idea. Some of our design decisions, though, deviate wildly from what the the approaches taken by other frameworks and CMS projects. In some cases it's because we needed certain mechanisms before PHP could cleanly support them.

When those workarounds and kludges are no longer necessary, we can save ourselves a lot of pain and suffering by following the crowd. (Er, "Best practices...")

A Lesson From Zope

I think we should heed the lesson of the Zope world. Zope took its base framework and then built a separate layer on top of it called the Content Management Framework. On top of the CMF, Plone was built. Architectural beauty! But implementation nightmare. Certain features of Plone depended on a certain version of CMF which depended on a certain version of Zope. Then the makers of Zope decided to create Zope 3, which was to be yet a more beautiful shining architectural star. Plone did not come along for the ride, things decoupled, and according to Wikipedia

Zope 3 is, however, not compatible with Zope 2, so you cannot run Zope 2 applications on Zope 3. It was originally intended to introduce a backwards-compatibility layer so that Zope 2 software would run on Zope 3. Instead a module known as Five introduced the new Zope 3 paradigms into Zope 2, although full compatibility isn't possible that way either.

The process can be seen on this trendline, though I'm probably making sweeping conclusions and there are surely other factors at work.

The strength in having things in core is that decouplement is less likely to happen. It prevents the core devs from getting super excited and releasing a Zope 3. Of course, we already have decouplement with third-party modules, but in most cases we have only two layers: core and the modules.

Indeed

The danger of abstracting ourselves into the stratosphere -- and making our lives harder in pursuit of perfect separation -- is very real. The usefulness of these different layers isn't in deciding which one we can "carve off" and hand off to other developers, but in recognizing the very different kinds of problems being solved at each layer. I think that what people call "Drupal Core" -- the default download that you obtain from drupal.org when you say, "I want Drupal!" -- will always have to touch on all of those layers to be successful.

In addition, I don't think that there's much value to be found in separating the "Web Framework" from the "Building Block" layers and treating them as separate projects. For better or worse, the "Web Framework" layer of Drupal doesn't really have much going for it other than "It's what Drupal runs on." ;-) In my opinion, one of the most useful reasons to maintain the distinction is to help us spot we're spending our time on things that don't really contribute to Drupal's distinctive "Drupalness."

One of the things I'm pondering, though, is whether we're already there in Drupal -- is the 6.x to 7.x transition any easier than the Zope 2 to Zope 3 transition? We eschew backwards-compatible code, and there's already talk of replacing the current "upgrade path" approach with a generic data migration layer. I'm not sure that I agree with that approach, but it suggests we're already hitting the point where major version updates to the underpinnings of Drupal already break the product-style applications and sites that are built on top of it.

I think we've been at

I think we've been at 'rewrite rather than upgrade' for a while now, at least since Drupal 5 was released, definitely Drupal 6.

Possibly the difference with Drupal 7 is that this was made more official (via Field API mainly), whereas previously the fact that CCK was obsoleting a lot of modules could be ignored in contrib as long as someone kept porting them.

One of the biggest problems with Drupal at the moment is the close coupling of APIs and implementations (i.e. they're often the same thing). This means we're unable to fix implementations without breaking APIs usually. As we move more towards interfaces it may be possible to break APIs less often while still internally refactoring. However of course to get there requires breaking a lot of APIs and doesn't guarantee we won't change them again.

Since Durpal already does this though, I don't think it'll be as disruptive as when other projects have tried to do the same thing - it's not as if people are used to backwards compatibility now, it's more that there's a wider game plan emerging in terms of how exactly to change APIs.

Excellent summary

Great summary, Jeff!

I am personally very much in favor of keeping all five layers in the same repository. We do want knowledge cross-pollination between them, and the needs of one layer can and should help drive the development of other layers.

That said, one of the key issues Drupal has right now is that those layers are bi-directionally dependent. In many many cases, lower-levels depend on code that technically belongs to a higher level, not for any particular reason other than it was so simple to just hack it that way originally and we never quite got around to fixing that. Of course, that piled up over time and resulted in the rats nest that both the "unofficial framework initiative" and the "web services and context" initiative (WSCCI) are trying to unravel from different directions.

A key guideline for us moving forward is to track down and eliminate such circular dependencies, and to take steps to ensure that we don't create more of them. Even if we *could* get some nifty lines-of-code savings by reusing an upper level piece in a lower layer, we shouldn't. That too quickly leads right back to the problems we have now.

Especially when you consider that many of those layers have their own internal layers and sub-components, we need to make a concerted, deliberate effort to keep those moving parts independent of each other, even at the cost of not having the most tightly-optimized code. The maintenance burden that results, as we've seen, is simply too high.

A diagram of Drupal's architecture must be a DAG, or else we're doing it wrong. :-)

I see Trigger as a more

I see Trigger as a more useful module to be shipped with the core than Blog, Poll and Forum. And I have based this statement considering a what a person (like me) would want to come with Drupal Core.

As someone new to Drupal, I would assume that a module for Poll, Forum and Blog would exist but Trigger is not something that would come to my mind directly. Whereas if it exists, I would want to know what it is.

I am much experienced with Drupal Site Building so the above suggestions/statements are based on how I (as a newbie) would want Drupal to be so that I can make use of the less intuitive/highlighted features.

Awesome

Together with a small core and the ideas around Open Apps the future for Drupal newbies and hardcode devheads alike is looking pretty bright.

With regard to the what "Welcome to Drupal" may look like in future, perhaps we might see - "expand your drupal site here", á la Mozilla style. :)

PS: Agreed, get rid of Poll, Profile, Forum, and Blog/Blog API. These projects might even flourish out in the contrib-derness, they certainly all have much more potential.