Systemjs: Release SystemJS 1.0.0

Created on 6 Apr 2017  Â·  7Comments  Â·  Source: systemjs/systemjs

Hi

This one will be cruel post, but I think someone have to start this discussion.

I propose to release SystemJS 1.0.0 now, or in closest time, in current state.

The reason for this is quite simple — SystemJS keeps breaking semantic versioning for no reason. We've seen 0.19.0 release which had some big changes, and 0.20.0 which contained significant amount of breaking changes and large codebase rewrite. Those releases had to be denoted by MAJOR version change.

There is simply no reason to keep SystemJS in 0 version, because it isn't how semantic versioning works. Many people confusing MAJOR release with versions (like Angular 1 and Angular 2), but it isn't. It just incrementer which indicated how library progressively changed during it's development. Because of that misunderstanding many libraries stuck with single pre 1 or 1 MAJOR release and wrongly bumped MINOR version. Unfortunately, seems like SystemJS has fallen to this category too.

I know it might be scary to do first MAJOR release because people might think that this means that "hey, it's completely finished product, production version 1!". But it isn't what it means. It just denotes reaching of large milestone.

Afraid that after MAJOR release that whole library will be rewritten? No problem. Just bump MAJOR version again. That's what it for. Otherwise we're doing much more harm by providing to enduser version 0 and saying "meh, we're not sure that it's production ready... maybe we will change something... maybe we will change whole thing and release on you MINOR version and you won't notice a thing which crawls to your bed at night and chokes your whole work to death. Meh."

Thus, stucking in pre MAJOR 1 version or with beta label forever and keep bumping because of it no matter what MINOR version isn't good idea, especially when library spreading further — it doesn't give consumers to see real state of changes.

As an important benefit of such change, finally MAJOR changes in SystemJS evidently will become understandable. When MAJOR version will change, we will know that "hey, this version of SystemJS significantly changed, I need to update codebase. Besides, it will allow^` operator to finally work as intended and DO NOT pass MAJOR releases, like SystemJS 0.20.0, on nothing expecting naive codebases.

So

Do it

Most helpful comment

1.0 will come eventually I promise, when the project can be considered stable.

All 7 comments

I would argue that ^ works correctly for 0.x releases: https://docs.npmjs.com/misc/semver#caret-ranges-123-025-004
To me 0.x signifies that SystemJS is still unstable and you should be careful when using it in production.

I would argue that ^ works correctly for 0.x releases

It matches PATCH and MINOR versions, thus when SystemJS 0.20.0 has been released with significant breaking changes, it passed too, while it had to be released with MAJOR version change, thus ^ operator would prevent upgrading of 0.19.0 to 1.0.0.

I'm sorry, probably it's me not being clear enough about this. I didn't mean that ^ operator works wrongly. I meant that current releasing approach of SystemJS forces to pass changes, which shouldn't pass.

To me 0.x signifies that SystemJS is still unstable and you should be careful when using it in production.

As specs saying, "Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable." source.

SystemJS passed initial development stage long time ago and now huge number of projects using it in production, we have to accept it as it is. If we want to introduce further breaking changes, they should be denoted by MAJOR releases instead hiding them among MINOR releases and beta changes.

Nope, read the link above carefully: ^0.19 means >=0.19.0 <0.20.0

The changes don't come from SystemJS itself but are rather caused by the underlying WHATWG and TC-39 specs, which are still in flux, so it can't reach 1.0 until those are stable.

Nope, read the link above carefully: ^0.19 means >=0.19.0 <0.20.0

Ah, sorry, my bad. For some reason I always thought that it matches MINOR too. Anyway, it doesn't denote whole point of this issue.

The changes don't come from SystemJS itself but are rather caused by the underlying WHATWG and TC-39 specs, which are still in flux, so it can't reach 1.0 until those are stable.

I understand. Nevertheless, library is standalone thing, its version shouldn't be tied by peer "dependency" and instead should be dictated by its state.

I strongly believe a 0.x version is a great indicator of unstable code, and what to expect from the entire experience. We do not have a team of developers ironing out the every workflow, it's just me, so it's important to communicate this instability of the project.

Yes, 0.x releases are meant to be unstable. As SemVer specifies: http://semver.org/#spec-item-4
Keeping it 0.x before the spec and the implementation are stable makes total sense.

1.0 will come eventually I promise, when the project can be considered stable.

Was this page helpful?
0 / 5 - 0 ratings