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

io.js support #2539

Closed
dougwilson opened this issue Feb 9, 2015 · 31 comments
Closed

io.js support #2539

dougwilson opened this issue Feb 9, 2015 · 31 comments
Assignees

Comments

@dougwilson
Copy link
Contributor

This is a tracking issue for when "official" io.js support comes to Express 4.x and 3.x. As of now, support for io.js is not completely known, but if there are issues, please open a new issue and they will be fixed, even before "official" support.

Official support will not arrive until nodejs/node#269 or something similar is resolved; Express needs to be able to specify engine compatibility on installation.

@dougwilson dougwilson self-assigned this Feb 9, 2015
@dougwilson dougwilson changed the title io.js 1.1.0 support io.js 1.2.0 support Feb 16, 2015
@dougwilson dougwilson added 5.x and removed 3.x labels Feb 18, 2015
@dougwilson
Copy link
Contributor Author

3.20.0, the last 3.x that will ever have an enhancement like this, will be released 2/18. This will not make it into the 3.x series, but that series does support Node.js 0.12, so it'll support io.js as long as it functions with Node.js 0.12 code.

@dougwilson
Copy link
Contributor Author

Referenced io.js ticket was closed. Express may never officially support io.js now.

@Fishrock123
Copy link
Contributor

@dougwilson I'm not really sure that was the correct issue for this? I read through the discussion throughly and nothing there was either actionable or a good choice, were you thinking of nodejs/node#493 / nodejs/node#491?

Express needs to be able to specify engine compatibility on installation.

Why, are we doing anything that dirty in the internals?

@aredridel
Copy link
Contributor

Yeah, why does this block support? What does support entail?

@dougwilson
Copy link
Contributor Author

Express needs to be able to specify engine compatibility on installation.

Why, are we doing anything that dirty in the internals?

That line of reasoning means that Express clearly functions on Node.js 0.4, since there's no practical reason Express would need to express supported versions.

@dougwilson
Copy link
Contributor Author

Realistically as long as Node.js and io.js ship with built-in modules (like path, url, http, etc.) we need to express what versions are supported. Otherwise why not just have everything in dependencies just be *.

@dougwilson dougwilson changed the title io.js 1.2.0 support io.js support Feb 26, 2015
@dougwilson
Copy link
Contributor Author

@Fishrock123 for my above statement, is this a failure of io.js or npm? Though I have been bringing up this issue since November, I have never gotten a real answer and basically refuse to have anything to do with io.js if I cannot declare the versions of those built-in modules I support (I don't care about the runtime, only those built-ins).

@dougwilson
Copy link
Contributor Author

And if nodejs/node#943 is merged, that just removed the "Backwards-compatibility is guaranteed." from the Stable modules, basically re-enforcing that I now need to declare the versions of those built-ins I am compatible with.

@Fishrock123
Copy link
Contributor

for my above statement, is this a failure of io.js or npm?

Probably an oversight of both npm and node/io.js

Though I have been bringing up this issue since November, I have never gotten a real answer and basically refuse to have anything to do with io.js if I cannot declare the versions of those built-in modules I support (I don't care about the runtime, only those built-ins).

Versions of the modules isn't exactly possible. Is there a good reason to not support io.js if you support node 0.12? Is this just an issue of what you mean by "support"?

If you are always going to be supporting node anyways, wouldn't { "engines" : { "node" : ">=0.8 <2" } } work? All the discussion I see in the original issue is how to support iojs-only modules.

And if nodejs/node#943 is merged, that just removed the "Backwards-compatibility is guaranteed." from the Stable modules, basically re-enforcing that I now need to declare the versions of those built-ins I can compatible with.

Not really, all that is doing is clarifying long ambiguous language. See the revised stability definition:

Stability: 2 - Stable
The API has proven satisfactory. Compatibility with the npm ecosystem
is a high priority, and will not be broken unless absolutely necessary.

(Just like API Frozen is a silly idea in userland, it is also usually a silly idea in core.)

@dougwilson
Copy link
Contributor Author

If you are always going to be supporting node anyways, wouldn't { "engines" : { "node" : ">=0.8 <2" } } work?

Only if there is a statement somewhere from Joyent saying there will never be a >= 1.0.0 of Node.js or from npm saying they will never allow Node.js to be >= 1.0.0. Otherwise, all that is is a declaration of a Node.js version, nothing to do with io.js.

Not really, all that is doing is clarifying long ambiguous language. See the revised stability definition:

I can read, yes. It still stand: how can I declare that I don't work with io.js 2.x (or, the more important, that eventually I don't work with io.js 1.x)? All I can do is declare Node.js versions in package.json, not io.js versions.

@dougwilson
Copy link
Contributor Author

Is this just an issue of what you mean by "support"?

By the way, "support" means "I care"; as in, if I don't support it, I don't care about it. I won't test anything with io.js, I don't run io.js, I don't particularly care about issues filed were it doesn't work on io.js, etc.

@dougwilson
Copy link
Contributor Author

Express will absolutely never support io.js in any near-term time frame: nodejs/node#491 (comment)

@aredridel
Copy link
Contributor

Doug, this is angrysadmaking.

iojs is compatible. It just works. It'd be nice to express this dependency, but ... the fine grains aren't there yet. But the 'it just isn't supported' is upsetting. (doubly so because 'support' means 'works' in most people's minds)

@dougwilson
Copy link
Contributor Author

I'm planing to talk with @Fishrock123 today, so we'll see how it plays out. For now, you'll have to go by the "if io.js supports Node.js 0.12 code, then yes, express works on io.js as long as that's the case".

@dougwilson
Copy link
Contributor Author

For now, we will trust that Node.js 0.12 code is compatible with io.js 1.x. I will work on a more extensive plan for the future, but the unfortunate thing is Express depends on a lot of intricate internal details of core modules (like which events fire when and exactly what order do they fire in, which exactly do boolean flags flip, etc.) that with the high speed at which core modules are being refactored, it's hard to keep with with the current io.js support policy as "just upgrade to the latest version".

I plan to get together a repo that will contain Express and every single dependency in a way where all tests can be run together. I can then run this against the target versions and have a better idea what the support is like.

As an example, io.js 1.4 just came out today. As it stands, there would be no reasonable way to know if Express worked with that version without a few day's work. With the above repo plan, it should only take a few minutes.

@dougwilson dougwilson reopened this Feb 27, 2015
@aredridel
Copy link
Contributor

Hm. Tests pass = works?

But if io.js breaks backward compat, it will be 2.0..

@dougwilson
Copy link
Contributor Author

Right, but there isn't a way to assert on that, so I'll probably just note what the tested versions of io.js are somewhere in the readme.

@dougwilson
Copy link
Contributor Author

But otherwise yes, tests pass for Express + every single sub dependency will = works, because io.js releases too often for me to read through all their source code every release to know if stuff works or not by that means.

@dougwilson
Copy link
Contributor Author

Doug, this is angrysadmaking.

@aredridel I am concerned with this comment and have talked to @Fishrock123 today and am trying to put together some kind of plan on io.js support.

@aredridel
Copy link
Contributor

Thank you! Even if it's just "we test against io.js latest and tests stay it works", that seems pretty reasonable.

@dougwilson
Copy link
Contributor Author

Perhaps :) If you were going to "support io.js" what would your method be :)?

@rlidwka
Copy link
Member

rlidwka commented Feb 27, 2015

Add io.js to travis, and claim to support io.js as long as all builds pass?

@dougwilson
Copy link
Contributor Author

Adding io.js to travis CI for just express is not actually good enough; there are a bunch of sub dependencies that have their own extensive test suites and they are tightly-coupled with the implementation details of core modules. We can only know Express works on a specific version of io.js if we test Express and all it's dependencies on that version. This has worked fine with Node.js in the past since they release so slowly, as it gives me plenty of time to just slowly update every Express dependency to test on the new version, but io.js releases so fast that method is no longer feasible.

@aredridel
Copy link
Contributor

How about all our tests pass, and we can start working to get iojs testing going on for all those dependencies?

And the promise to actually take iojs bugs on the latest iojs seriously, as seriously as on node?

@aredridel
Copy link
Contributor

I think it mostly comes down to "will we accept the bug report?"

@dougwilson
Copy link
Contributor Author

Yes, bug reports are accepted, as in the first post (#2539 (comment)). The tests pass the last time I ran them (on 1.2.0).

@aredridel
Copy link
Contributor

Yeah. It might be a lot more useful to explain what support for io.js looks like. And, in fact, equivalent for node. What's tested? What's not? On what versions?

Give people the information they need for themselves, and accept bug reports as support.

@dougwilson
Copy link
Contributor Author

FYI as an update here, I have completely tested express and every single dependency against io.js 1.2.0 and everything seemed fine, tests passed, etc., so I think we can now say at least 1.2.0 works fine.

@aredridel
Copy link
Contributor

Oh that's awesome!

@dougwilson
Copy link
Contributor Author

Also (sorry, it was so busy today I didn't have time to write this up until now) I have been able to determine what an io.js support policy will look like. Since we as a module cannot declare what version of io.js we are compatible with, at this current time we will simply be compatible will all versions. This means from a testing perspective, since io.js says it follows semver, we will always test against 1.0.x, to ensure we do not end up requiring a feature added afterwards (since we cannot declare a minimum version). We will also test again the latest 1.x.x at the time to reduce the needed testing matrix.

This means that if I were to add io.js testing to Express right now, I would add v1.0 and v1.5 to the matrix and leave it at that. We will also accept all io.js bug reports and will check to ensure that any new code works on v1.0 and v1.latest.

dougwilson added a commit that referenced this issue Mar 17, 2015
@dougwilson
Copy link
Contributor Author

Alright, support landed and we are even testing in the two CIs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants