Define a release schedule for the project #8970
Replies: 5 comments 10 replies
-
Hello guys, Thanks @JoaoJandre for raising the discussion. Many might understand the benefits and the necessity of having a well-defined versioning schema; however, I feel that it is important to highlight the "why" before discussing the "how". We (the community) have a culture of generating code without breaking compatibility. At first look, this may seem interesting as there is an intention to guarantee the continuity of the ecosystem. However, along with that, there is also a tie with old and deprecated procedures, technologies, libraries, and models, which, in the long term, will also deprecate CloudStack and make it more costly to innovate and evolve. We have to understand that we have several development barriers. We are already working with a highly complex context; to work with CloudStack, developers need to understand storage, networking, virtualization, Internet protocols, and much more. On top of that we do not use mainstream/standardized frameworks for the RESTful APIs and JPA; we use Spring in a non-standard fashion; we do not have a solid standard between our APIs, and so on. We are constantly increasing the complexity to extend/evolve and maintain ACS. That creates a bubble of development where it is hard to join, which is not healthy for a community. All those development fronts mentioned require a lot of effort and investment to get addressed and will certainly generate incompatibility at some point. However, we do not have a well-defined protocol to address incompatibilities nor to release new versions; we have been on version 4 since 2012 and our minor release cadence has been sporadic since then. Knowing that a lot of effort and investment is required to make CloudStack compliant with new and modern standards and frameworks, and our versioning schema is not foreseeable nor addresses introducing incompatibilities between versions, would a contributor or company feel safe to sponsor and put efforts into such changes? Unfortunately, the answer is no. With that being said, by structuring a versioning schema, we can provide previsibility for the project and the community. We would know when to introduce breaking changes, and the community would be expecting them. Furthermore, we can look at how other projects, like OpenStack and GitLab, introduce breaking changes in two steps (deprecation on one major release and removal on another) to reduce their impact on the community. Moreover, we already had a discussion in the past about the same topic; thus, I invite you to check that discussion too: https://lists.apache.org/thread/lwlxs8xgz4glocctf7dv89k5nqqsxmlb |
Beta Was this translation helpful? Give feedback.
-
@GutoVeronezi points to the more abstract reasons we want to allow breaking changes.
On one hand, I think some of these can be introduced without breaking as well. APIs can be running alongside of each other and be slowly phased out. As to @JoaoJandre 's proposal:
(still think we should drop the 4 yesterday) |
Beta Was this translation helpful? Give feedback.
-
Github Discussions isn't the right place to discuss project governance related matters, but may be used for discussions and to build initial consensus; it was enabled only as a platform to support user-forum interactions. If the intention is/was to only build consensus, then fine - but many PMCs and other stakeholders aren't on Github (Discussions or follow activities on it actively). Releases, project policy for changes, modernising codebase, I believe there they must be discussed on the dev@ ML. Personally, I think we've well-defined project bylaws and release process that works for me (and perhaps many of us) and I'm not very interested 'currently' to change them, but on convincing arguments I (and others) may participate and help support proposed changes. We generally target two major and two minor releases every year for the CloudStack project and sub-projects releases are on need-basis. However, even if a hard policy of doing X releases a year was there - who would enforce them, who would drive them? And what happens if we as community miss that, I think there is no way to "ensure" or "enforce" that. I appreciate the intentions but it's not practical to pull off or to "ensure" it happens even if there was any policy, protocol, what have you, in place whether it's around releases or disruptive changes. Nobody is stopping any PMC or committers to do a release or lead an initiative; but releases cost time, energy and bandwidth, so many of cannot commit full-time on this to "ensure" they happen but only make our best attempt. I wouldn't consider if Joao or Daniel or others want to do more releases, go make it happen and update https://cwiki.apache.org/confluence/display/CLOUDSTACK/Releases There are whole variety of good remarks and thoughts in some other comments, but they don't converge on specific issues related to release schedule. However, I sense some new features or improvements can enable better DB upgrades via (new) framework/tooling that could assist better release management and upgrades. The following is my views on some of the things mentioned; CloudStack indeed can benefit from codebase modernisation, and we're already doing that. But it cannot be replaced overnight, such changes can only be iterative and discussed on case-by-case basis as a separate initiative/proposal/idea. Some changes may be beneficial but we would need to be careful with changes that disrupt users upgrades, integrations and expectations. Community is generally good at maintenance but not with new features or disrupting the codebase in its entirety, which would require willingness of sponsors and employers to fund their people's time and bandwidth on such projects. While we're still on 4.x, CloudStack of 2024 isn't same as that of 2012, it's a massively different, polished and improved project & product with more room to go. I don't think it's a bad thing. With what other opensource communities like Python have done with the whole v2 vs v3 transition (and they continue to do that within 3.10 and 3.10+), it's much better we don't disrupt the product too much for our users. It has both the legacy and pedigree of a product, with its features, benefits and issues. The project is in its plateau of productivity so this isn't surprising we aren't changing much, many of us largely users may not want major disruptions, for users CloudStack must just continue work and continue to be boring. What is practical for the community will most likely happen anyway, we must continue to exercise patience, develop soft skills, learn to build consensus and support and work with others to make such ideas happen. Coding is a small part in what it takes to drive such changes and make them sustainable and acceptable for the wider community. I think any large project such as ours, in however, whatever standards it must use is difficult to onboard new developers, we aren't unique in that way. For supporting CloudStack development learning/training, we have a self-learning courseware for aspiring developers. That said, I would encourage anything that helps improve CloudStack adoptability by developers, but it's the users I tend to include more towards. |
Beta Was this translation helpful? Give feedback.
-
Github Discussions is integrated with the users' mailing list; everything that is posted here is also sent by email and vice-versa. This discussion is way wider than the development scope (as @rohityadavcloud stated), it affects users as well; thus, GitHub Discussions seems the right place to have it. I see we agree on several topics, but not so much on others. What draws my attention in the whole discussion is that people say that we have a well-defined process: two major and two minor releases a year; however, with a remark that we never make that. In fact, looking at our history, we never accomplished that (regarding the major releases). Following there is the tag creation date of major releases since 4.10 (the tag creation divergences in an average of a week from the release itself): tags creation date
Looking at the data, it is clear that our current process is not adequate. Sometimes we barely release a major in a year and there is a case that we took more than a year to release a major. In my opinion, that occurs because the process we have is not well-defined and it seems we are not "caring" too much about it. What we are missing is planning and predictability; we do not know when the next release will be (after 4.20); we do not have a common goal. We delay months to deliver a release in order to fit a feature in a release. Thus, again, we lack planning. Regarding @rohityadavcloud question "who would enforce them, who would drive them?", well, it is the PMC's responsibility. Furthermore, we must comply with the Cyber Resilience Act (CRA). About the disruptive changes, we can look at how other projects are doing it and adapt to our context. For instance, in one version, the GitLab community introduces features that are disabled by default and lets the users enable it; then, in another version (after validations and defining that the feature is stable), they enable it and remove the configuration. We can use a similar approach, like introducing new features/behaviors in a version and marking the previous behavior as deprecated, and then, in another version, we remove the previous behavior, as @DaanHoogland commented. The problem is: we do not have it clearly defined. I believe we can benefit more from this discussion by separating it into small topics, for instance:
|
Beta Was this translation helpful? Give feedback.
-
"If it didn’t happen on the mailing list, it didn’t happen." https://theapacheway.com/on-list/ |
Beta Was this translation helpful? Give feedback.
-
Hi all,
I had created a thread for this on the dev mailing list, but following @DaanHoogland 's advice I've decided to create a new one here. That being said, I have a proposal for the versioning scheme. Instead of dropping the "X"
on our X.Y.Z.N, we can set a fixed schedule (that can be further discussed) for the version changes:
security versions (N);
The proposed schedule is only a sketch that can be worked on. However I believe that the project can benefit from:
Furthermore, having a schedule allows us to have a project roadmap, that outlines the future deprecations, changes and big features.
Beta Was this translation helpful? Give feedback.
All reactions