Replies: 14 comments 10 replies
-
One of the things that "1.0 stability" would mean to me is backported bug fixes to pre-announced Long-Term-Stable releases. That means a team can target a single stable version to make an entire game with, and expect that non-breaking fixes will actually reach them. That works well with Rust's semver conventions: we ship 1.0, then X months later ship 2.0 and so on, but continue to release 1.1, 1.2 etc for a couple of years with the fixes we can manage. |
Beta Was this translation helpful? Give feedback.
-
On release cadence: I think that a 3, 6 or 12 month breaking changes release cadence is all defensible. Like before, we would still very much want to do train releases. I think Godot 4 adequately demonstrates the danger of not doing so. |
Beta Was this translation helpful? Give feedback.
-
On I'm a bit nervous about figuring out releases and tracking this, given how manual and time-consuming our releases are currently. On the current status of the crates listed:
Other crates:
|
Beta Was this translation helpful? Give feedback.
-
I think as a first step it would be useful to add a milestone for "Bevy 1.0". #254 and #85 seem like they can be added to the 1.0 milestone immediately. |
Beta Was this translation helpful? Give feedback.
-
annoyingly, there's a lot of work for stabilisation that's largely out of our control. cargo's particular flavour of semver means we can't have exports from non-1.0 dependencies (e.g. glam). we'd need to push hard for stabilisation in these crates, wrap the relevant apis in our own thin layer or annoyingly violate semver in certain cases (perhaps only with the assent of the respective crate developers). |
Beta Was this translation helpful? Give feedback.
-
A fairly major thing we'll want to decide on before stabilizing |
Beta Was this translation helpful? Give feedback.
-
I am new to this engine and I'm not professionnal game dev so maybe my comment is not relevant, or maybe this is just not the right topic to point out those things, but I think that the first two things that I would consider when looking for adoption are :
I emit the first criteria because it seems there is enough serious engines being asset-oriented, where you are expected to download an editor and start from it, where the game code is somewhat an "extension" of the engine constructs and assets rather than the starting point of the application. It's nice and fancy for artists or newbies wanting to try out game-making, but finally, the kernel of a real game is always the code. The dev team is the team which links all things together. Some developers may appreciate that the game starts in a humble main() function. This feels more programmer-friendly. It feels easy to customize engine bootstrapping and select the runtime features. It's nice that Bevy is made this way while striving to become a feature-complete engine. But for programmer-friendliness the second criteria may also matter a lot and I think it's important to make it fulfilled for a 1.0 release. If the engine is thought as a platform rather than just a simple library to make 2d/3d renderings, then the engine must make it easy for an ecosystem of reusable features to be built and used, with parallelism and safety in mind. For Bevy this implies that the plugin architecture be taken seriously since this is the junction point between app developers and middleware developers. At this time in Bevy a plugin seems to be at the core a simple function that registers Systems in the app that invokes the plugin, but I see no way for the host developer to import a plugin with a fine-grained control over it, for example, overriding their way of reading/writing world's data (components/entities) to ensure proper isolation, when needed, and also safety. If a plugin is written too naively and, either in general case, or either in the specific context of an app, wrongfully interacts with components or entities that the host app must keep intact in some game phase/state, then the developer must jump into the plugin's code to handle the problem and change things there (unless I missed a specific, non-hacky technique to avoid this ?). This may hurt the purpose of plugins. Would it be planned for 1.0 to make plugins virtualizable, less side-effect prone, through specific engine API ? I pointed out this concern in #9732 for a specific case I encountered but I hope a composable plugin architecture is considered generally as a serious thing. |
Beta Was this translation helpful? Give feedback.
-
Sorry in advance, I am not a native speaker and use a translator. first questionIf you have a Bevy 1.0 in the future, how do you want to deal with new better ideas. Second questionHow should one deal with "unnecessary" features. What I want to get at, when do you check the existence permission of a feature, how do you check feature and when do you remove features you don't want anymore? |
Beta Was this translation helpful? Give feedback.
-
Fırst: I am not much experienced about open source versioning but somethings came to my mind and I want to share with you. I think this is depends on what we are aim for;
For me it doesn't matter if the project version is 1.0 or not because I am an indie game developer. I will always adapt my project for new breaking changes. So my question is can't we continue without stable release? |
Beta Was this translation helpful? Give feedback.
-
One thing that jumps to mind are breaking changes along the lines of: "changed a query parameter in a public bevy system". Which are theoretically breaking, but most likely doesn't affect anyone. I'm not sure how you'd go about that. It's probably worthwhile to have a wrapper type for systems that just wraps systems so that arguments are private, so that we can make them public. |
Beta Was this translation helpful? Give feedback.
-
1.What problems does it solve with other engines?2.How to use most established game library( like physx)? |
Beta Was this translation helpful? Give feedback.
-
I'm curious about whether we actually need a stable or even crate-matching version of Bevy as a whole, as opposed to stabilizing individual sub-crates as the time comes? Unlike most of the popular engines I know of, Bevy is build as modular to the core. That allows it a much larger degree of flexibility in versioning that with most other engines when it comes to things like versioning. Especially since, in practice, the "bevy" crate is nothing more than a container of known-to-work-together versions of the sub-crates. The closest comparison to other engines I can think of is Unity's package manager - which has a wide variety of unity features at different versions and degrees of stability, but unlike Bevy those features are much higher level rather than being part of the core functionality. As far as I can tell, the big benefits of having a stable release & version are:
And I think those can still be achieved without needing to separate out a "bevy_platform", or even without having fully-stable versions of all the sub-crates. Essentially what we'd need are multiple "meta-crates" (i.e. crates that collect the sub-crates at a specific version, like the bevy crate does right now) with different dependency lists based on their stability. A release of a stable bevy version, or an LTS bevy version, would basically amount to issuing an update to a "bevy_lts" or" bevy_stable" crate's dependencies, and then for each of those dependencies we can follow best practices for back porting non-breaking fixes as needed. One last important aspect here is that they don't need to be actually separate crates - they could just be different versions of the bevy crate. It's more about the recognition that the main function of a stable "bevy" is to aggregate versions of it's sub crates that are known to work together, and not update their versions to breaking versions during the lifecycle of that stable release. |
Beta Was this translation helpful? Give feedback.
-
I am new to this engine and I'm also not a professional game dev so maybe my comment is not relevant, I want to get my 2 cents in and hopefully is something useful, I'm also new to rust and planning to use bevy in the future when it's stable.
I really like how Flutter does it so far, Flutter has 3 branches "Main", "Dev" and "Stable", the stable versions come at random intervals and even many versions later, like the last stable version was "3.24.5" and the next stable is "3.27.0". The part I like the most is when something is done in a better way then the old way, what they do is put an annotation "@deprecated" and a description of which new thing substituted the old one (sometimes with a link for more details), this is also very integrated with the LSP, the deprecated code is highlighted and it will also make suggestions on how to auto-convert to the new thing if possible. The deprecated code is eventually removed from the code about a year later. |
Beta Was this translation helpful? Give feedback.
-
The big problem I see with any stabilization effort is the inability to enforce the policy. Bevy relies almost entirely on volunteers: we have no way to force them to do anything, and people working for free tend to be most interested in working on the new and the shiny. It's hard to find dedicated people who will do grunt work for free. While we can refuse to merge PRs that don't follow the policy, this requires taking a hard stance, and the resolve to hold the line can easily falter in a storm of passionate arguments. |
Beta Was this translation helpful? Give feedback.
-
First: I don't think we're ready for any form of stabilization yet. This will be a long path. Just trying to start the conversation while we have plenty of time to let it simmer.
I think we're still at least a year or two away from a Bevy 1.0.
What does stabilization accomplish?
Stabilization accomplishes a number of goals:
How (1), (2), and (3) should work is very TBD. We can discuss that here (I'm leaving this discussion open ended).
However I have one thought that I'd like to discuss earlier rather than later:
Partial Stabilization via some
bevy_platform
crateMaybe we don't need to wait for the whole engine to be stable before we start stabilizing. Before a "true Bevy 1.0" (and whatever release scheme comes after), we could start building a "stable"
bevy_platform
meta-crate.It would be structured like the
bevy
meta-crate, but it would only contain "core" pieces of functionality unlikely to change.An initial
bevy_platform = 1.0
crate would likely contain something likebevy_ecs
,bevy_app
,bevy_util
,bevy_core
,bevy_reflect
, andbevy_time
. Stuff that we will eventually (and ideally sooner rather than later) stop breaking regularly. And also stuff that provides a minimal foundation that some plugins could build functionality on.We would continue releasing Bevy 0.X releases normally. But a given Bevy 0.X release would internally depend on a specific
bevy_platform
version (and re-export thebevy_platform::x
crates asbevy::x
... for examplebevy_platform::ecs
tobevy::ecs
).A subset of Bevy Plugin authors could then enjoy longer stability windows (and not break across
bevy
crate revisions) provided they limit themselves the thebevy_platform
crate.To justify
bevy_platform
's existence we would probably want a first release to support a reasonable chunk of existing plugins.Some plugins might be able to do "baseline
bevy_platform
functionality with optionalbevy
features". Ex:This would be a path for something like the
bevy_rapier3d
crate to provide "baseline"bevy_platform
functionality with opt-inbevy
functionality (for things like debug rendering). That way when we release the nextbevy
version, provided it also relies onbevy_platform = 1.0
, users don't need to wait forbevy_rapier3d
to update to the new bevy version (they just need to wait for the opt-in debug visualization features to be updated).We would still likely need to break the
bevy_platform
crate on occasion. By the time a Bevy 1.0 happens, we'd probably be onbevy_platform = 3.0
or something.Over time as things stabilize, we would pull more and more things into
bevy_platform
(ex: bevy_render would likely take a good chunk of time to be added, as it is still heavily in flux). Eventually we could mergebevy_platform
intobevy
and bump to 1.0 (aka do the Bevy 1.0 release).The "stability" (how often we release a new major version) and functionality of
bevy_platform
would also be a very good "are we ready for Bevy 1.0 yet?" measure.Beta Was this translation helpful? Give feedback.
All reactions