Hi,
This post is created to promote a rational community discussion regarding the release system we use. It was born out of a conversation at DrupalCampNYC5 in which about 8 of us got together to discuss why we hadn't been launching sites on Drupal 6 yet.

We know this will probably raise some 'ghosts of Christmas past', in which similar conversations have went south. We're not interested in that. No one in this is demanding anything, we just want to have a conversation and garner feedback.

In comments, please avoid anything that isn't giving input. No one needs to see '+1', or 'I disagree' without supporting rhetoric.

That said, a group of us created this article of the past week. We then opened it to a small group for feedback, and later edited some more based on that.

We like to think we all put a lot of thought and care into it. However, it is a conversation starter, not a definitive white paper. We're all open to having our opinions changed. Please let us know what you think.

===============================
Disparity of Versions:
Towards Creating a Sustainable Solution to the Disparity between Drupal Core and Contributed Modules

"This is not about core moving too fast, but about core and contrib moving away from each other."

Define the Problem

Summary:

* The current release of Drupal 6 is not being implemented by much of the community due to the unavailability of certain contributed modules, despite it being a great core release on its own.
* As Drupal core versions, and core grows, the community becomes spread across several versions (There is active development on the full featured release Drupal 5, the new release Drupal6, and the upcoming release Drupal7). This is natural, but should be considered in releasing.
* Part of the conceptual development of a core release is dependent upon contributed modules interaction with the previous release. Drupal 7 is in danger of becoming a 'de-facto fork', because Drupal 6 has yet to have the time to interact with many contributed modules.

There are a set of modules that are not in Drupal Core, but which are critical for fully featured production sites to function. Many critical contributed modules exist in isolation to core, such as CCK, Views, Pathauto, Token, Node Queue, Image, File Field, and more. Critical modules affect core. So long as several of those modules do not have a stable release, Drupal 7 cannot take input from that interaction.

It would be easy for this discussion to descend into finger pointing at certain functionality, modules, and people. THAT is NOT the point. If that is what you want to do, move on, please. Were it not Views or Token, it would be NextBigModule Charlie, or NextBigModule Omega. The issue we are attempting to describe is a flaw in how we determine the viability of a Drupal Core release as it pertains to the current contrib environment at any given time.

Only now are we beginning to see a hint of the first major sites migrating to Drupal 6, and even that is tentative and taken with the understanding of the risks involved in using pre-release versions of several critical modules. Over half a year after the release of Drupal 6, there is a general feeling that these sites are early adopters.

Additionally, many developers have openly stated they plan to wait for a Drupal 7 release, and to jump directly from 5. This has become a commonly accepted practice, and at face value it would seem there is nothing wrong with it. However, anyone who planned on doing that for 4.7 -> 6.0 has been stuck on unsupported, potentially insecure software for close to a year now. You can easily say that they can upgrade to 5, and they could, but either skipping a version is a valid standard option or it isn't. Having this constantly be a judgement call indicates the need for some standardization in our release cycle. This is not a new issue, but, it appears, the first time versions have spread out to encompass wide use of three Drupal's.

The developer community loses cohesion as versions spread out. While many developers are concentrating on upgrades and trying to keep up with development they do not have time to participate in the development of core. While this is a natural process, it is also detrimental to a community that stresses participation.

The reality is that the current release of Drupal 6 does not provide all the features that professional site developers have come to expect when building high feature sites. Drupal 7 is in real danger of becoming a de-facto fork, because it is simply impossible for development work on 7 to be informed by the community's use of Drupal 6.

For various, highly valid reasons, it is not advantageous to inhibit development in any area. The issue is not the pace of development, but rather the disparity of compatible versions of core and contributed modules. There is no pride in a release for the sake of a release. There is only pride in releasing the next best Drupal platform.

Define a metric (how do we measure the problem?)
Summary:

* Rate of Adoption by Deployments: Seven months after the release of Drupal 6, we still don't have a stable release of many "critical" modules preventing many sites from implementing this essential upgrade.
* Rate of Adoption by Developers: Many developers are still hesitant, or even unable, to use Drupal 6 for existing projects.
* Ratio of previous contrib stable to current contrib stable: Currently less than 44% of contributed modules with stable 5.x releases have a 6.x release. 7 is set for code freeze in January.

If we are going to acknowledge a problem, the first aspect is to define it, and the second is to assign a metric so we know both the extent of the issue, and a way to define concrete guidelines to avoid the problem in the future .

However, as the disparity of Drupal core releases and Drupal contrib releases grows deployments of latter releases become inversely proportional. That is to say, the core release with the smallest number of compatible contrib modules is also the least used core release. We need to keep an acceptable Rate of Adoption by Deployments. We need to conceive of release criteria that foster the adoption of new Drupal releases, rather than viewing them with dread.

Similarly, we need to maintain a good Rate of Adoption by Developers. If Drupal is indeed a developer centric community, a release that has a slow rate of adoption among those developers is a red flag of the highest proportion.

Finally, if we accept that core Drupal is benefited by its interaction with the contrib repository, then it follows that a future release of core needs to be dependent upon some/certain modules being compatible with a previous release. A core version that marches ahead adding new features without this input in effect is blazing a trail, not collaborating towards an end.

Possible solutions that are self-correcting and sustainable
Summary:

* There are many potential solutions, not exclusive to each other. We don't have an easy answer.
* Potentially include more things in core, Not a long term solution.
* Create a "Supported" tier of modules, a level between Core and Contributed that directly influences the release cycle of core.

As a community there is a set of things that need to be nurtured and supported, not only by the community, but by the people defining the direction of Drupal. We can't tell a developer what to do. But we can (and do) call a code freeze, thus telling them that if they continue in a direction, it may not be supported later. So, some development guidelines do get traction.

We don't have a good solution. We can suggest some course of action, but REALLY want to have an open conversation. These are merely starting points for a broader, rational, community discussion.

Some have said, "The disparity of versions problem would be solved if this or that module were part of core." Although such an action may have merit on its own basis and should probably happen, we believe it is not a long-term solution, and is actually irrelevant to the problem. There are cases where our fellow developers have decided that they can contribute their work most effectively by keeping a module out of core so they can retain more control over a module's development path -- we respect and see no reason to second-guess their decision.

Adding new modules to core would, by virtue of the inevitable increase of complexity of core, slow down future releases of core, but there will always be a new contributed module that suddenly becomes essential to production sites, thus continuing to create a disparity between core and contrib. That is to say, this is a temporary solution and not a systematic future solution.

One possible solution, following the lead of several other Open Source projects, including many distributions of Linux, would be for the community to create a "Supported" tier of modules, as a level between Drupal Core and Contributed modules. The current work flow states that at a certain point in time, a code freeze for core is in place for a stated amount of time, to give time for contributed modules to catch up with core. There are emails sent to encourage people upgrade in a timely fashion.

The system could change to make this more explicit, defining that a certain critical set of modules must also have a stable release for that version before the final Drupal core is released. Given the track of several Drupal related shops and businesses we are seeing a supported tier of modules naturally develop already. Making that an official community policy would not be out of place.

We are used to a release, followed by a lag until certain contributed modules are ready. This model would lessen the ensuing lag time, as much of the essential contrib functionality would be ready on release. It would also require that some criteria be defined for a core RC to let the small contigent who doesn't require the contrib tier to know when an RC is ready.

The community could choose a method to vet which critical modules will be considered to be in such a 'Supported' tier. What method gets chosen does not matter so much, as long as the method is explicit and intrinsically tied to the release cycle. Recognizing the problem, multiple companies have already stepped up to the plate and publicly offered to do this job of selecting a set of critical modules to support. Their are many vetting methodologies we could use to define such a Supported tier and it is outside of the scope of this paper to define one. We understand that there is a group actively looking into various rating/voting methodologies [ http://groups.drupal.org/module-metrics-and-ranking ] and we look to them to participate in this discussion and inform this part of the debate.

For this to have any real meaning, we would finally need to alter the work flow for future Drupal releases. After the announced release candidate, we would not release a final core version until all (or a large majority of) Supported modules had stable releases. This code freeze may or may not have an associated duration; we need to continue to maintain the flexibility of responding to the demands of a current situation. However, we might further state that if a Supported module is not stable (or perhaps with a release candidate) within a certain time frame, then it will automatically be relegated back to Contributed status until such time as developers decide to give it the needed attention.

Such a methodology could exist side-by-side with other proposed methodologies, such as modules popular amongst the larger community, company-sponsored (or otherwise funded) modules, and those pinging from an enabled Update Status module. In fact, ALL of these methodologies already publicly exist in some form or another. The aspect that is lacking is a community policy acknowledging that there exists an essential group of contributed modules on which the effective deployment of Drupal core in most environments depends.

We, the signatories of this document, believe that the disparity between Drupal Core and its Contributed modules has become prohibitive to the effective deployment of the latest Drupal release, and that steps need to be taken to bring them back into balance, without hindering the pace of development. We believe that this is necessary to the image and future growth of acceptance of Drupal, and for sustaining an exponentially increasing adoption rate of Drupal. We believe that our proposal to create a Supported tier of modules, if adopted by the Drupal community at large, would help to solve the current disparity of versions, while at the same time encouraging the essential fast rate of development of both Core and Contrib.

Aaron Winborn
Eric Goldhagen
Nat Meysenburg
Joe Golden
Kris Vanderwater
Oleg Terenchuk
Matt Corks
Sam Tresler

This document was born out of several conversations had at DrupalCampNYC and a small working group that interacted for a week after that.

Comments

RobLoach’s picture

Great discussion. I see one of the major problems being that many organizations that are already on Drupal 5 don't have the resources to update their custom modules and themes and have derived off (or virtually forked) from the Drupal ideologies. They have implemented their own solutions instead of using the community supported modules, they've forked contributed modules destroying the upgrade path, made core changes making the update very difficult. If you stick with the Drupal ideologies, then you're walking an easy line, if you branch off from using the community support modules and making core changes, the upgrade path becomes virtually impossible and you're stuck in the Drupal 5 ecosystem.

aaron’s picture

Yes, we recently upgraded a site from 4.6 to 5 for an organization that had waited for this very reason, and I recently learned of a site launched in 6 that has its own hacked version of Views to enable that (and I'm sure it's not alone).

That is not a new issue (although, granted, Drupal 5+ core is generally easier to use without the hacks often necessary in some of the older versions). I hope we can collectively create a system that more actively encourages core and contrib to evolve together.

Aaron Winborn
Drupal Multimedia (my book)
AaronWinborn.com (my blog)
Advomatic (Web Design for Progressive Advocacy, Grassroots Movements, and Really Cool Causes)

dylanclear’s picture

I disagree that you haven't proposed "a good solution." Superstar contrib modules and cutting-edge features are what drive new users and ongoing business investment to the platform. (Users care little for the elegant design in core that encourages such extensibility). Bringing new people and businesses onto Drupal will continue to propel and fund Drupal innovation. The entire concept of contrib vs core means nothing to 90% of end users. CCK and Views (to name 2 modules) are to their minds - and more importantly to their sites - the essence of Drupal.

I believe creating a " 'Supported' tier of modules, a level between Core and Contributed that directly influences the release cycle of core" is really a no-brainer.

chx’s picture

Creating a "golden" contrib has been discussed for very long. It's not clear what we would achieve and who would work on achieving that.

Also, the whole issue is IMO Drupal 6 specific. As Drupal 5 is such a fantastic release, people felt it's good enough to serve longer and redesigned the architecture of their modules. This is not something that will be repeated soon IMO. As the Drupal 7 cycle is made longer, the issue will smoothen itself out during the next half year.
--
The news is Now Public | Drupal development: making the world better, one patch at a time. | A bedroom without a teddy is like a face without a smile. |

--
Drupal development: making the world better, one patch at a time. | A bedroom without a teddy is like a face without a smile.

catch’s picture

Isn't actually slated for January - last news was that "it's unlikely to be before January" (or something similar). I'm personally hoping we won't see code freeze until March or so, but there's absolutely no official line yet - and IMO it'd be a bad idea to freeze Drupal 7 until several major sites, including Drupal.org, have been running on D6 for a good 4-5 months.

omar’s picture

... is part of the idea here as far as I can tell.

Perhaps having clear policies based on publically available metrics would help everybody evaluate where we are in the project cycle, thus encouraging more synergism overtime. Otherwise, it seems sometimes like you have to know the right people or be in the right place at the right time to get a heads up on what the current thinking is.

In general, I favor almost any initiative that is aimed at making the Drupal-sphere more accesssible and transparent. At the moment, everything is a comment in a threaded forum where all comments are equal, all threads are equal... the sphere is flat so to speak. No wonder then, that there are so many annoying +/-1 from people trying in vain to promote/demote some of these comments/threads over others. We need to help people cut through the clutter, find the important conversations and quickly understand the positions being taken and the degree of concensus around them, and provide them a way to demonstrate their support for ideas without forcing them to make the thread *even longer*.

It is not as though all of these techniques are obsure either. "most active threads" with comment ratings/tagging would be a beginning. We could learn a thing or two from Slashdot (even though we should be teaching them about "community plumbing"). There are many approaches that could help us, but most (all?) involve the use of some kind of automated or user-generated metrics.

Whether or not these tools could or should be used for actual decision-making is an interesting question, but it is a completely seperate one from whether or not it is helpful to allow people help structure the discussion around the decision.

I'm not a release engineer, or even a real programmer for that matter... but I can't help but appreciate that this initiative would result in increased transparency throughout the community surrounding some fairly strategic questions.

Thanks to the authors (who had the cojones to try to be constructive on what is, let us admit, a politically charged subject).

Omar

Tresler’s picture

Right now our criteria for a release consists of, 'When it is ready', and, if I understand correctly, 'When there are no critical bugs left'. Those are excellent criteria for quality control, and part of what has made Drupal so great.

However, it is really tough to plan projects around that, and also it doesn't account for any interaction of Drupal with contrib. It has become important for certain parts of contrib to stay more closely in synch with Drupal core in order for professional site developers to find a specific core release usable for building large full featured sites.

The initial inclination is to move those contrib modules to core, or to pour money into getting them up to speed, but the question on the table, in my opinion, is weather either of those is a sustainable, or good model for a release cycle. This isn't a race to the finish line, it's a race to the top.

To phrase it differently, we have this great criteria that says core will be ready when core is ready no matter how long that takes, and as soon as we cross that line, contrib is harangued for not being ready fast enough, and No One quite knows when things will be usable beyond an educated guess.

When contrib was smaller and less essential, that wasn't really that important. Now, it appears to be.

-------------------------------------------
Sam Tresler
http://www.advomatic.com/

litwol’s picture

Perhaps relevant to show that there is indeed large support behind improving current workflow: http://drupal.org/node/311949

Sometimes something interesting appears on http://litwol.com

Amazon’s picture

I was one of the reviewers of this document and I really think it came along way in a very short time.

1) I think focusing on tangible numbers for release metrics are a great way to focus the community on common goals. I appreciate the authors offers to help crunch those numbers. I'll work with the infrastructure team to get that raw data to you.

2) The creation of multiple distributions for an open source project has brought good competitive benefits to the core projects as a whole e.g. Linux. The current community distributions of Fedora and Ubuntu show real innovation and a whole new class of contributors to the ecosystem that have benefited everyone up and down the stack. I am glad to see this discussion point to a solution to meet the needs of one part of the community, an economically powerfully part, professional site developers.

Keep up the good work. It's great to see this kind of sharing from a focused Drupal camp bubble up directly to the entire community.

If anyone else wants to make strong arguments about how Drupal project should run, and needs numbers contact the infrastructure team. Just make sure you offer to put in at least 10 hours of time to number crunching, and presentation and that you give us a few weeks. We are are all interested in sharing this information, it's just takes the time of some pretty busy folks.

Cheers,
Kieran

Kieran Lal

sun’s picture

Maybe this is the missing link for developers that are rather working on core than in contrib: While Drupal core provides a base system, there is only a very limited set of possible usage scenarios. Contrib modules are the answer to real use-cases, leveraging the power of the base system. I do have to agree with almost all points in this write-up, and I think you did a great job in *not* writing this offensive.

Agreed, we had this discussion before - D6 was released without CCK and Views being available, and we were not even eating our own dog food on drupal.org. D5 required all contrib modules to implement the Form API. One could say, it has never been different. However, the sole purpose of this write-up should be the question whether it has to be that way all over again.

One thing is for sure - having non-periodically "integration builds" (as suggested in http://drupal.org/node/311949) for developers will greatly speed-up the porting process for contributed modules and help to identify bogus APIs sooner (not to mention that we've arrived at 6.4 already with at least one API change in a stable release).

But then again, I fear that we will have contrib modules that decide to implement major changes for a new Drupal core version from now on, or, that parts of popular modules will be moved into core. Both events can and probably will happen (again), because they are usually based on rationale decisions. However, this has more than one downside: We announce a beautiful, shiny, new Drupal core version to the masses, but there are almost no real use-cases it can fulfill. Most of our marketing efforts vaporize, because many new, thrilled users are asking "Should I use Dx or Dy?" and get the answer "Use Dx, because you need Ping and Pong for your use-case, and those are not available for Dy yet."

Similarly, we have more and more API modules in contrib that even may or may not depend on one or more other APIs in contrib. This in turn means that maintainers of other modules are forced to wait with their ports until the dependent modules have been ported, which slows down the adoption rate of a new core release again. But unfortunately, that's not all: At least a few of those modules having the word "API" in its name were, I guess, developed to be moved into Drupal core someday. They could, in fact, already be - partially or not - in core, extending the use-cases for all end-users and enhancing the features of the base system for all contrib modules. However, we are delaying this process due to our release management. Contrib depends on contrib, which depends on a contrib API, which depends on sufficient contributors or Just Being Ready™. The actual time-frame for moving something into core is very small for contrib module maintainers.

In the end, the idea of having a list of "golden" contrib modules (to quote chx) makes perfectly sense, marketing-wise as well as technology-oriented. That is, releasing a first release candidate, but holding off the stable release until a certain, pre-defined list of contrib modules has been ported at least to RC as well. And now that I've asked in #drupal and learned that there was no such approach for a Drupal release in the past, I wonder what really prevents us from trying it once? If we learn that it all won't work out that way, nothing prevents us from ditching it again. If we do not have the right tools in place to coordinate such a community effort, who else has?

Lastly, we can speed up the relative release adoption time if we eat our own dog food again. If we, the developers as well as vendors of this CMS are not able to upgrade drupal.org, we should not expect that end-users will be able to do so. This is one of the best benchmarks we have directly at hand, and it would be illogical to ignore it for the next release. Not only because many Drupal sites are in the very same situation like drupal.org is now.

Daniel F. Kudwien
unleashed mind

Daniel 'sun' Kudwien
makers99

chx’s picture

So we will provide developer snapshots (and I hope alpha releases once we are in freeze) to make it easier for the contrib maintainers to port. If, however, we decide to hold off Drupal release until Foo and Bar modules are released, then what itch does the contrib maintainer have to port or do the API overhaul or whatnot? Extortion ("the whole Drupal community now waits on you!") does not work.
--
The news is Now Public | Drupal development: making the world better, one patch at a time. | A bedroom without a teddy is like a face without a smile. |

--
Drupal development: making the world better, one patch at a time. | A bedroom without a teddy is like a face without a smile.

jredding’s picture

My own comments "What's in it for the developers" echos this concern.

jredding’s picture

I liked the document when I read it the first time and this cleaned up version is even better ;)

I'm also happy that we're discussing how to vet modules and come up with a middle tier of modules that are more supported, kept up to date, etc. etc. I think there is value in this for our end-user community and developer community (as well as the integrators, project managers, etc. etc.).

My big question though is "What's in it for the developers".

What happens if I create a module that is really popular and makes it into this tier?
Is notoriety enough to keep me working on this module day/night handling support requests, etc.?

Tresler’s picture

I would think that a 'supported' tier of some sort would garner it's own 'supporters'. I think the idea is that if we can garner similar, if lesser, support to what we have around a major release around the essential modules the community as a whole will want to get those supported modules out. This may be naive, but even if it is, having a release that needs to wait X months to be usable is worse than having a to wait for X modules to get up to speed to have a release. The two give different impressions to the world at large.

However, this is also all solution specific. So far, I'm getting the impression of an acknowledged problem, but and still just trying to get people's opinions. I feel like being circumspect about this as there are many smart people in the room with me.

-------------------------------------------
Sam Tresler
http://www.advomatic.com/

jredding’s picture

I had suspected that this would be going the market type approach wherein good modules float to the top, are highlighted and then a community builds around them because of this. I can see this working.

Tresler’s picture

Good modules float to the top only works when deprecated modules settle to the bottom. Having an ever increasing supported tier and it being a goal to get into that supported tier just creates an expanded core. While I haven't thought it out completely we were definitely saying in that room that there would need to be a limit to the amount of code in this tier and also a way of taking things out of it in the event that it really wasn't 'essential' to a full featured production use case.

-------------------------------------------
Sam Tresler
http://www.advomatic.com/