- π§π·Brazil fabiorubim740@outlook.com
fabiorubim740@outlook.com β made their first commit to this issueβs fork.
In #586146: [policy, no patch] Decide if and how to implement semantic versioning for Drupal 8.x β , there has been a lot of talk about Drupal 8 adopting semantic versioning, where version numbers and the way they change convey meaning about the underlying code and what has been modified from one version to the next. While we do certain classes of changes and additions during stable versions now, there's a lot of things we don't touch until we do major versions, in part due to limitations of our current 2-digit version scheme, and in part due to a culture of shifting focus to the next major version right away.
I believe semver is a great framework to adopt. The tricky part is in the details. I propose we look at this problem through the eyes of four personas.
Persona 1: Drupal core contributors. They'd like to see more frequent releases to increase the velocity of innovation happening in core, and to reduce the time commitment required to get innovations into the next release. Right now, we couple innovation in our admin UIs, markup, APIs, and internal implementations of subsystems to huge releases that re-write half of core. Not only does this result in a multi-year cycle to get new functionality released, but it also makes development of even minor functionality and UX improvements difficult because it requires constant patch rerolls as things shift.
Persona 2: Drupal contrib maintainers. Contrib authors may come across core limitations that either block their porting or development progress altogether, or require sub-optimal workarounds that are difficult to maintain. The faster these get resolved, the better the entire Drupal ecosystem is for it users. On the other hand, contrib maintainers also require a stable core API to work against so that once they release a stable version of their project, they don't need to worry about it breaking with every minor core update. This means we need to be very careful in what we do and do not break between minor releases.
Persona 3: Users without ongoing development resources. A lot of people get their Drupal site up and running and pretty much stop spending time or money on it, either because they don't have the resources or because they don't want to. Other than dealing with the occasional security updates, they don't want to be bothered upgrading themes or modules. Ideally, Drupal would expand the Update Manager feature to automatically upgrade Drupal core from one minor or patch version to another, to allow for both innovation and security releases to be less disruptive to this audience.
Persona 4: Users with ongoing development resources. Some users have maintenance contracts, internal staff, or sufficient free time to improve their site over time, to upgrade Drupal modules, etc. These people are willing to both chase and contribute to the latest functionality if it benefits them, but don't want to do so at the cost of a major, multi-thousand dollar upgrade.
Let's look at some of the details of the Drupal core release cycle if we adopt semver:
With these four personas in mind, I think the best way to go is with:
Given these set of recommendations, and nearly complete backward compatibility, here is what it means for each of the personas.
Drupal core contributors: Core developers can improve core and use those improvements on real sites faster, so long as they (mostly) preserve BC. More frequent, less backwards-compatibility-breaking releases of Drupal core would allow us to move culturally to a more agile development approach of getting smaller changes out faster, seeing how they do, and making further changes based on real-world data. This move also potentially allows us to build core more sustainably, by giving core developers the option to tie some of their development to billable client work, which can only happen if meaningful changes are released more often than once every three years.
Drupal contrib maintainers:
Contrib maintainers can expect their modules and themes to keep working with new minor releases of core, most times with no changes needed at all, sometimes with new integration code needed for whatever new implementations are added to core, and very rarely with some small fixes needed to accommodate a trivial BC break. There will be at least one release candidate for each minor release to allow contrib authors to test their code in advance of site builders updating their sites.
Users without ongoing development resources: We will need to provide guidelines to these users, such as either stick to LTS releases or:
So long as these site owners stick to these guidelines, they should be able to update to new minors as easily as updating to new patch releases.
Users with ongoing development resources: These site owners can use custom modules and themes, as well as contrib projects that they help maintain, to the extent that they're able to keep them up to date with minor core updates. Since only trivial BC breaks will be allowed, this will not require too much of their resources. More of their resources would be needed if they want to use and integrate with whatever new features/implementations are available in the new release, but they can decide which of those to use and when.
We compared and contrasted release strategies with a number of different projects: WordPress, TYPO3, Joomla!, Firefox, Ubuntu, PHP, and Symfony. All have a substantive release anywhere from every 6 weeks (for Firefox) to 1 year (for PHP), with most at around 6 months. The projects differ in whether or how they provide LTS releases: Ubuntu does so once every two years and supports them for 5 years, while WordPress only provides security support for their latest release, but tries hard to always preserve BC, even in major releases.
The proposed approach attempts to take the best ideas from these projects, and put them into a framework that can work for our community. The approach of mostly BC-preserving but innovative releases every 6 months maps closely with most of the projects studied, providing a single LTS release as the final minor maps closely with Joomla!, and supporting an LTS release until after two additional ones are released maps closely with Ubuntu.
I think it's important for us to hash this out now that Drupal 8 has positioned us via its new architecture to support iterative innovation, and hopefully grow the core development team as well.
Questions? Comments? Please provide feedback about this proposal.
Big thank you to catch, alexpott, webchick, Crell, effulgentsia and xjm for helping me create this proposal, and to all the participants on #586146: [policy, no patch] Decide if and how to implement semantic versioning for Drupal 8.x β , whose comments have also influenced this proposal.
Fixed
8.0 β°οΈ
documentation
Not all content is available!
It's likely this issue predates Contrib.social: some issue and comment data are missing.
fabiorubim740@outlook.com β made their first commit to this issueβs fork.