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

Comments

Projects
None yet
@mikeal
Copy link
Contributor

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

This comment has been minimized.

Copy link
Member

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Contributor

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link
Contributor

commented Dec 2, 2014

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

@chrisdickinson

This comment has been minimized.

Copy link
Contributor

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Contributor

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

This comment has been minimized.

Copy link
Member

commented Dec 2, 2014

@mikeal

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Contributor

commented Dec 2, 2014

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

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Member

commented Dec 2, 2014

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

@sintaxi

This comment has been minimized.

Copy link

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

This comment has been minimized.

Copy link
Contributor Author

commented Dec 2, 2014

@sintaxi the 0.12 branch here.

@sintaxi

This comment has been minimized.

Copy link

commented Dec 2, 2014

@mikeal sounds good. thanks.

@domenic

This comment has been minimized.

Copy link
Member

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

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link
Contributor

commented Dec 2, 2014

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

This comment has been minimized.

Copy link

commented Dec 2, 2014

👍

@mikeal

This comment has been minimized.

Copy link
Contributor Author

commented Dec 2, 2014

@kenperkins perfect :)

@mikeal

This comment has been minimized.

Copy link
Contributor Author

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

This comment has been minimized.

Copy link
Member

commented Dec 2, 2014

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

This comment has been minimized.

Copy link

commented Dec 2, 2014

👍 👏

@mikeal

This comment has been minimized.

Copy link
Contributor Author

commented Dec 6, 2014

@jamonholmgren we already have pulled a couple in :)

@JamesKyburz

This comment has been minimized.

Copy link

commented Dec 6, 2014

This is awesome!

What do you think about the idea of adding iojs to n and nvm?

Easy to switch between versions for developers + should then work in all CI servers who support n/nvm.

@naholyr

This comment has been minimized.

Copy link
Contributor

commented Dec 6, 2014

Adding to nvm would be such a great thing, easy install = easy testing = easy adoption.

@cjihrig

This comment has been minimized.

Copy link
Contributor

commented Dec 6, 2014

@JamesKyburz @naholyr that is currently being discussed in #40

@JamesKyburz

This comment has been minimized.

Copy link

commented Dec 6, 2014

@cjihrig ok thx!

@creationix

This comment has been minimized.

Copy link
Contributor

commented Dec 7, 2014

FWIW, nvm doesn't deal with symlinks at all. It works by putting a certain
version of node's bin folder front in the user's path in their current
shell session. Thus a user is able to have multiple shell sessions going
on at once with different versions of node in each one. And it can do this
without a subshell. n and nave use two other techniques and have their
own strengths and weaknesses.

But this means that if you want node in your path to run a certain
version of iojs, there needs to be a node binary in the iojs bin folder
or putting it first in the PATH won't mean anything.

On Sat, Dec 6, 2014 at 2:08 PM, James Kyburz notifications@github.com
wrote:

@cjihrig https://github.com/cjihrig ok thx!


Reply to this email directly or view it on GitHub
#28 (comment).

@igormelnick

This comment has been minimized.

Copy link

commented Dec 7, 2014

I think aliasing iojs to node should be used. It's generally a good practice, have a look at mysql/mariadb. You just install maria and you're ready to go.
Another option is to use iojs as a sub-version of node, which would still allow seamless switching.

@guybrush

This comment has been minimized.

Copy link

commented Dec 9, 2014

looking forward to use my n-semver with semver'ed io.js :)

@Nicolab

This comment has been minimized.

Copy link
Contributor

commented Dec 13, 2014

io.js takes a good direction, exciting!

@Solido

This comment has been minimized.

Copy link

commented Jan 8, 2015

I was in doubt with node.js but I started to learn ES6 just by confidence in IO.JS to be the next platform

@siliconprime-tung

This comment has been minimized.

Copy link

commented Jan 14, 2015

will it be released today?

@mathiasbynens

This comment has been minimized.

Copy link
Contributor

commented Jan 14, 2015

@siliconprime-tung: It has been released already! Get io.js v1.0.1 here: https://iojs.org/

@MoOx

This comment has been minimized.

Copy link

commented Jan 14, 2015

This issue should be closed.

@chrisdickinson

This comment has been minimized.

Copy link
Contributor

commented Jan 14, 2015

Congrats all! Closing this as fixed. ❤️

@davidhuang3

This comment has been minimized.

Copy link

commented Jan 14, 2015

Glad to see it.

@mgol mgol referenced this issue Jan 20, 2015

Merged

`io.js` support #616

aljachimiak added a commit to aljachimiak/node that referenced this issue Dec 1, 2016

aljachimiak added a commit to aljachimiak/node that referenced this issue Dec 1, 2016

test: changes var to const/let in tls-ecdh; nodejs#28 from nina16
This commit changes var to const/let in
test/parallel/test-tls-ecdh.js.

Note this was *part* of task 28 from NINA 2016. The file specified
in the task (/test/parallel/test-tls-ecdh-dge.js) did not exist
so I modified a file that was simmilar in name with the same noted
deficiencies.

aljachimiak added a commit to aljachimiak/node that referenced this issue Dec 1, 2016

test: changes var to const/let in tls-ecdh; nodejs#28 from nina16
This commit changes var to const/let in
test/parallel/test-tls-ecdh.js.

Note this was *part* of task 28 from NINA 2016. The file specified
in the task (/test/parallel/test-tls-ecdh-dge.js) did not exist
so I modified a file that was simmilar in name with the same noted
deficiencies.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.