-
Notifications
You must be signed in to change notification settings - Fork 29.8k
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
WHATWG URL API is marked as Experimental
, but is not behind a flag
#11362
Comments
Personal opinion on this: I'm not even completely sure if we should keep the whole «Stability index» thing around. I think that with recent clarifications in the To clarify: I'm not proposing to change the process here, but this would in fact bring the documentation into line with the actual process. |
So For this specific issue though, I guess if it's |
I would just update the stability to index description to say may be gated behind a flag. For |
@jasnell I think the argument for putting it behind a flag was made by @sam-github in #11200 (comment)
|
I think the concept of "breaking" is a little bit different when it comes to WHATWG URL, because the API doesn't come from Node.js. If we apply the stability index to it as-is, it might never fit the description of a "Stable" API, even if we polish it enough for broader usage. Suppose it becomes "Stable", and the spec introduces a breaking change or we catch up the spec compliance with a breaking fix (though at this point those should probably be just edge-cases), if we can't backport it to LTS or a Stable release because it is "breaking" from Node.js's perspective, then users are stuck with a incompatible implementation and this makes the idea of a Web standard implemented in Node less attractive. |
IMO, stable is stable, and all promises we have made to our users by the instrument of Semantic Versioning cannot be broken just because the API originally came from another source. On the other hand, I trust the authors of WHATWG URL Standard to recognize the fact that an incompatible change in the standard is not to be taken lightly, and that when such a change is made, not only would Node.js become incompatible, so will the Internet browsers installed on billions of computers worldwide. |
Regarding the issue of flagging, I personally don't think it is necessary. I would also not go so far as to say that the idea of a stability index is to be abolished completely, since I believe what we have right now is clear and easy to understand (especially when compared to the version used in pre-io.js Node.js), and certainly useful. However, I shall defer to the opinion of @nodejs/ctc members. |
@TimothyGu By incompatible I mean incompatible with the spec, not necessarily incompatible with general usage. Browsers still do breaking changes if they only break edge cases, but Node.js might have different opinions about what is an "edge case", especially in the scope of an LTS release. This is probably just the limitation of semver though, because a lot of bugfixes and API additions are just breaking in nature, even though not intended and only breaks edge cases, like adding Although at this point I would say changes coming out of the spec and already implemented by browsers should not be |
Indeed. But the fact is that even the most current of browsers are incompatible with the current spec. If Web developers can deal with older versions of the spec, so can Node.js developers.
The definition of "implemented" is quite vague. Implemented in Chrome Canary? or Stable? or Firefox Nightly or Stable? If we follow Chrome Canary and bleeding-edge spec, we don't really have much guarantee that the change doesn't "break the Web"; and if we align ourselves with Chrome Stable, with the current Chrome release cadence it'll take ~2.5 months for Canary to reach Stable anyway. For Firefox, this period is even longer (4-5 months, if the change isn't fast-tracked to a more stable release series). |
I mean stable releases of browsers, because the time they need from experimental builds(or something alike) to stable releases is what "don't break the Web" entails. |
^ and I was referring to the backport process (where semver labels matter), not the implementation process. |
I might be making a bad analogy here, but not backporting spec fixes to a LTS makes it an IE6 of Node.js releases :P It's not about whether it is compatible now, but about whether it will receive fixes and how frequent that would be. IE7 and later don't help the situation of IE6 if that's what users are stuck with. |
Key questions:
The documentation should be clear about what changes should the users expect and per what process, from «might be removed in a semver-patch» to «requires several semver-major versions per the deprecation process» — that clarification of the expetations is exactly what those stability indexes were originally for, but they don't serve that purpose now. (Note: Node.js didn't even follow semver back then when those were introduced). |
I would not expect frequent significant breaking changes as that's not the approach that the WHATWG takes to evolving it's specs. Changes are likely to be fairly small for the most part. We are, however, just getting going with this and will need to work out a process that makes sense. We do not control the specification but we do have input on it (they've been reaching out to us for input on a number of items and the relationship has been very productive so far). Bottom line is that it's not 100% clear what the process will ultimately need to be but I do not anticipate much variance from our existing semver policy |
Fixed in 10754b6. |
Previous discussion in #11200 (comment), but this deserves a separate issue.
Per the documentation:
That explicitly states that all
Stability: 1 - Experimental
API in Node.js should be hidden behind a command line flag, but The WHATWG URL API (introduced in #7448) is marked asExperimental
but is available without a command-line flag in v7.x.This means that people might miss the «Experimental» label (especially given that it's description is contradictory) and
url.URL
could be used in the wild, which limits how we could change things there (makingurl.URL
not so experimental-y in fact).Also note that the current
Accepting Modifications
/Breaking Changes
/Deprecations
policy doesn't differentiate betweenExperimental
andStable
APIs, it only cares about the API being public (whichurl.URL
certainly is), documented (which it also is), or used in the wild (which it probably also is by now)./cc @nodejs/ctc and especially @jasnell, also @sam-github and @gibfahn
The text was updated successfully, but these errors were encountered: