Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial Release #28

Closed
mikeal opened this issue Dec 2, 2014 · 97 comments
Closed

Initial Release #28

mikeal opened this issue Dec 2, 2014 · 97 comments

Comments

@mikeal
Copy link
Contributor

mikeal commented Dec 2, 2014

In the TC meeting today we came up with a vision for the first release.

First, a few assumptions we've internalized that probably need to be stated for this to make sense.

  • Node is pretty damn stable already. There are huge companies with it in production, 100K+ modules, etc. It is already far more stable that its pre-1.0 release tag suggests.
  • Releasing more frequently leads to a more stable product, not a less stable product.
  • The entire ecosystem uses semver while node uses a confusing even/odd release structure.

If people disagree with any of those assumptions then they certainly won't agree with anything the TC determined for the initial release.

So, first release of io.js:

  • January 13th (Fedor's Birthday!) target date.
  • Will be 1.0-alpha1, with alpha releases continuing until 1.0.0.
  • Switching to semver.
  • We will be taking new v8 releases as fast as possible moving forward.
  • Trying to get to a weekly release cycle. Which version number is incremented each week is determined by the changes and whether or not they are breaking. Again, following semver.

Some questions still left open:

  • Are there any changes other than dep upgrades and fixes required for 1.0?
  • Is build confident we can have enough automation in place to hit this date.
  • Is the plan to have the installer install an iojs binary and an alias to node?
@SomeoneWeird
Copy link
Member

We will be taking new v8 releases as fast as possible moving forward.

Absolutely +1.

Is the plan to have the installer install an iojs binary and an alias to node?

I think this should work, but it should check if node is already installed and not alias if it is.

@creationix
Copy link
Contributor

I have a concern and a question.

First to me it seems that weekly is too often. I understand you're trying to balance the insanely slow pace of recent node development, but don't flip to the other extreme. How much effort is it to cut a release? I know for me a luvi release takes a couple hours, iojs is a bit more involved, but also has a lot more supporting scripts.

Second, I love the idea of pulling in V8 changes as fast as possible. What ever happened to the idea to create a new C API layer that shields addon authors from V8 API changes? I could offer some help here but I thought Trevor has some ideas here and was farther along. Would this need to get in before a 1.0.0 release or could it just be a 1.1.x thing or 2.0.x thing?

@domenic
Copy link
Contributor

domenic commented Dec 2, 2014

Will be 1.0-alpha1, with alpha releases continuing until 1.0.0.

I am curious what differentiates 1.0.0-alpha.1 from 1.0.0? Perhaps that is your

Are there any changes other than dep upgrades and fixes required for 1.0?

I am leery of a long series of alpha/beta/gamma releases before a true, semver-ful 1.0.0 is released. All in all I would prefer a 1.0.0 release as the initial release---unless the TC anticipates actually making breaking changes in the subsequent releases.

@indutny
Copy link
Member

indutny commented Dec 2, 2014

@creationix the idea with shielding C API was rejected. V8 should stay more stable in next versions, as they have finished their major API migration.

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

How much effort is it to cut a release?

The goal is zero and that everything is entirely automated. Without that I don't think weekly releases are practical at all.

@cjihrig
Copy link
Contributor

cjihrig commented Dec 2, 2014

Wasn't nan at least partially blessed in node-forward for shielding addon developers as well?

@chrisdickinson
Copy link
Contributor

If people disagree with any of those assumptions then they certainly won't agree with anything the TC determined for the initial release.

Curious: what does this mean for changing core primitives, like streams, going forward? Are they effectively locked now?

Other questions / concerns:

  • How many prior major versions will be supported by core?
  • How much lead time will the community have before a new major version drops? Is it possible to move towards a canary release system where one week's release is last week's canary, so we give folks who are instrumenting Node (cough cough @wraithan) enough time to adapt?

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

@domenic I would be cautious about a brand new build, release and test system. I'd like to put out some alphas that people can use just to shake out any bugs and build confidence before we stamp something 1.0.

@espadrine
Copy link

I wonder what the plan is regarding the adoption of ES6 features. Specifically, modules and promises. iojs currently has competing technologies, and it could potentially transition. Would that trigger a major version increment, and therefore, be the 2.0.0 version?

@ghostbar
Copy link
Contributor

ghostbar commented Dec 2, 2014

@mikeal agreed, I think the -alpha makes sense for watching out for new bugs, even a -rc0,1,2,3...

@therebelrobot
Copy link

@ghostbar @mikeal 👍

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

@chrisdickinson well... the last few changes to streams required full backward compatibility (or at least what we thought was fully compatible) because of the mountain of existing dependencies. I would expect additional changes to run through the same gamut, although with semver we do have a way to signal that a compatibility break is happening, but there is still going to be a big cost benefit analysis on breaking something so depended upon.

that said, you could see a future where moving toward or being more compatible with the upcoming streams work @domenic is doing as being the kind of benefit that might push a breaking change over the edge.

@basicallydan
Copy link

I think an alias to node would be useful but not by default. An uneducated user who doesn't know about the relationship between iojs and Node might not be expecting it.

@creationix
Copy link
Contributor

Regarding the locked primitives. I highly recommending splitting the code into core and sugar like I did for luvit. The luv module is just libuv bindings for lua. We could have just libuv bindings for v8. Then the luvi project is luajit + luv + openssl + other C libraries, but zero API sugar. Very C-like APIs. This would be the mythical no.js project. Then luvit is the full node.js style APIs with node streams, event emitters, etc all implemented in pure lua on top of luvi. That's the equivalent to node.js/iojs level of abstraction.

I know this is harder for node because of how optimization was done mixing the lines between bindings and sugar, but I still think it's the only viable future to preserve the current APIs that everyone uses and enable a clean way to explore other styles while still reusing the C core of node.

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

How many prior major versions will be supported by core?

This is going to end up depending on the level of adoption in each version and how many contributors we end up bring on board. It's not something we should commit to now except to say that "until we say we're deprecating support of a release all releases are supported."

How much lead time will the community have before a new major version drops? Is it possible to move towards a canary release system where one week's release is last week's canary, so we give folks who are instrumenting Node (cough cough @wraithan) enough time to adapt?

We want nightly builds, and this weekly swap is probably also a good idea.

@a0viedo
Copy link
Member

a0viedo commented Dec 2, 2014

Switching to semver.

👏

Is the plan to have the installer install an iojs binary and an alias to node?

I'm with @SomeoneWeird, it should not make the alias if node is already installed.

@indutny
Copy link
Member

indutny commented Dec 2, 2014

@cjihrig it is, gosh! I always forget about it :) please do not take it as offense.

@sintaxi
Copy link

sintaxi commented Dec 2, 2014

Looks like a solid plan. One question, will v1 be based on node 0.10.x or 0.11.x?

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

@sintaxi the 0.12 branch here.

@sintaxi
Copy link

sintaxi commented Dec 2, 2014

@mikeal sounds good. thanks.

@domenic
Copy link
Contributor

domenic commented Dec 2, 2014

@domenic I would be cautious about a brand new build, release and test system. I'd like to put out some alphas that people can use just to shake out any bugs and build confidence before we stamp something 1.0.

That makes sense. Would just like to suggest making some sort of explicit commitment that the goal is to get a 1.0.0 out within a few releases or some time period. Maybe revisit the details of the commitment when 1.0.0-alpha.1 lands so you can take stock of what people think of the release.

All I'm saying is that as-is, the only stated goal is 1.0.0-alpha.1, with no thought toward a real 1.0.0, which makes me nervous that we'll end up like Ember and play around in the alpha/beta stage for half a year (similar to 0.12 being stuck in the 0.11 stage for ... well, forever).

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

@domenic all good points, I guess we should probably state that "no features will be added between 1.0-a1 and 1.0"

@kenperkins
Copy link
Contributor

How about:

The goal of not immediately releasing v1.0.0 is to provide a buffer between v1.0.0-alpha1 and v1.0.0 to allow the build process to mature.

@sergi
Copy link

sergi commented Dec 2, 2014

👍

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

@kenperkins perfect :)

@mikeal
Copy link
Contributor Author

mikeal commented Dec 2, 2014

I think this should work, but it should check if node is already installed and not alias if it is.

The problem with this is that the installer also installs npm which is going to link to a different node than the one accessible by node if already installed. Apparently, package managers have a way to mark a package as "conflicting" with another. We can use this to ensure proper warnings when installing iojs where nodejs may have already been installed.

@SomeoneWeird
Copy link
Member

Apparently, package managers have a way to mark a package as "conflicting" with another.

For sure, I guess it just makes testing/migrating to the other one slightly trickier.

@paulohp
Copy link

paulohp commented Dec 2, 2014

👍 👏

targos added a commit to targos/node that referenced this issue Apr 17, 2021
Original commit message:

    Merged: [wasm-simd] Fix loading fp pair registers

    We were incorrectly clearing the high reg from the list of regs to load.
    The intention was to prevent double (and incorrect) loading - loading
    128 bits from the low fp and the loading 128 bits from the high fp.
    But this violates the assumption that the two regs in a pair would be
    set or unset at the same time.

    The fix here is to introduce a new enum for register loads, a nop, which
    does nothing. The high fp of the fp pair will be tied to this nop, so as
    we iterate down the reglist, we load 128 bits using the low fp, then
    don't load anything for the high fp.

    Bug: chromium:1161654
    (cherry picked from commit 8c698702ced0de085aa91370d8cb44deab3fcf54)

    (cherry picked from commit ffd6ff5a61b9343ccc62e6c03b71a33682c6084d)

    Change-Id: Ib8134574b24f74f24ca9efd34b3444173296d8f1
    No-Try: true
    No-Presubmit: true
    No-Tree-Checks: true
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2619416
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Reviewed-by: Clemens Backes <clemensb@chromium.org>
    Cr-Original-Commit-Position: refs/branch-heads/8.8@{nodejs#28}
    Cr-Original-Branched-From: 2dbcdc105b963ee2501c82139eef7e0603977ff0-refs/heads/8.8.278@{#1}
    Cr-Original-Branched-From: 366d30c99049b3f1c673f8a93deb9f879d0fa9f0-refs/heads/master@{#71094}
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2649176
    Reviewed-by: Victor-Gabriel Savu <vsavu@google.com>
    Commit-Queue: Achuith Bhandarkar <achuith@chromium.org>
    Cr-Commit-Position: refs/branch-heads/8.6@{nodejs#55}
    Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1}
    Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472}

Refs: v8/v8@482e5c7
targos added a commit to targos/node that referenced this issue Apr 27, 2021
Original commit message:

    Merged: [wasm-simd] Fix loading fp pair registers

    We were incorrectly clearing the high reg from the list of regs to load.
    The intention was to prevent double (and incorrect) loading - loading
    128 bits from the low fp and the loading 128 bits from the high fp.
    But this violates the assumption that the two regs in a pair would be
    set or unset at the same time.

    The fix here is to introduce a new enum for register loads, a nop, which
    does nothing. The high fp of the fp pair will be tied to this nop, so as
    we iterate down the reglist, we load 128 bits using the low fp, then
    don't load anything for the high fp.

    Bug: chromium:1161654
    (cherry picked from commit 8c698702ced0de085aa91370d8cb44deab3fcf54)

    (cherry picked from commit ffd6ff5a61b9343ccc62e6c03b71a33682c6084d)

    Change-Id: Ib8134574b24f74f24ca9efd34b3444173296d8f1
    No-Try: true
    No-Presubmit: true
    No-Tree-Checks: true
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2619416
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Reviewed-by: Clemens Backes <clemensb@chromium.org>
    Cr-Original-Commit-Position: refs/branch-heads/8.8@{nodejs#28}
    Cr-Original-Branched-From: 2dbcdc105b963ee2501c82139eef7e0603977ff0-refs/heads/8.8.278@{#1}
    Cr-Original-Branched-From: 366d30c99049b3f1c673f8a93deb9f879d0fa9f0-refs/heads/master@{#71094}
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2649176
    Reviewed-by: Victor-Gabriel Savu <vsavu@google.com>
    Commit-Queue: Achuith Bhandarkar <achuith@chromium.org>
    Cr-Commit-Position: refs/branch-heads/8.6@{nodejs#55}
    Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1}
    Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472}

Refs: v8/v8@482e5c7
targos added a commit that referenced this issue Apr 30, 2021
Original commit message:

    Merged: [wasm-simd] Fix loading fp pair registers

    We were incorrectly clearing the high reg from the list of regs to load.
    The intention was to prevent double (and incorrect) loading - loading
    128 bits from the low fp and the loading 128 bits from the high fp.
    But this violates the assumption that the two regs in a pair would be
    set or unset at the same time.

    The fix here is to introduce a new enum for register loads, a nop, which
    does nothing. The high fp of the fp pair will be tied to this nop, so as
    we iterate down the reglist, we load 128 bits using the low fp, then
    don't load anything for the high fp.

    Bug: chromium:1161654
    (cherry picked from commit 8c698702ced0de085aa91370d8cb44deab3fcf54)

    (cherry picked from commit ffd6ff5a61b9343ccc62e6c03b71a33682c6084d)

    Change-Id: Ib8134574b24f74f24ca9efd34b3444173296d8f1
    No-Try: true
    No-Presubmit: true
    No-Tree-Checks: true
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2619416
    Commit-Queue: Zhi An Ng <zhin@chromium.org>
    Reviewed-by: Clemens Backes <clemensb@chromium.org>
    Cr-Original-Commit-Position: refs/branch-heads/8.8@{#28}
    Cr-Original-Branched-From: 2dbcdc105b963ee2501c82139eef7e0603977ff0-refs/heads/8.8.278@{#1}
    Cr-Original-Branched-From: 366d30c99049b3f1c673f8a93deb9f879d0fa9f0-refs/heads/master@{#71094}
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2649176
    Reviewed-by: Victor-Gabriel Savu <vsavu@google.com>
    Commit-Queue: Achuith Bhandarkar <achuith@chromium.org>
    Cr-Commit-Position: refs/branch-heads/8.6@{#55}
    Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1}
    Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472}

Refs: v8/v8@482e5c7

PR-URL: #38275
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Shelley Vohr <codebytere@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests