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

Make single-engine WICG specs even less official looking #102

Closed
hober opened this issue Apr 16, 2020 · 40 comments
Closed

Make single-engine WICG specs even less official looking #102

hober opened this issue Apr 16, 2020 · 40 comments

Comments

@hober
Copy link
Contributor

hober commented Apr 16, 2020

This is a follow-on from #64 inspired by WICG/netinfo#82.

Sometimes, WICG specs define features that (a) have only been implemented by one engine, and (b) are unlikely to be implemented in any other engines.

@marcoscaceres wrote, in WICG/netinfo#82:

I think this incubation might have run its course as it hasn't successfully gained the cross browser support we had hoped for in the last 7 years.

I think cases like this should be clearly marked, ideally with a big red modal like WHATWG Review Drafts, stating that the spec documents the implementation of a feature that is implemented by only one engine, that it's unlikely to be implemented elsewhere, and that developers should refrain from using the features defined in it.

@cwilso
Copy link
Member

cwilso commented Apr 20, 2020

The big red model in WHATWG Review drafts is because almost no one should be looking at such a specification (they should be looking at the current LS - RDs are by definition for lawyercats only). By contrast, WICG incubations that have only been implemented by one "engine" are still... incubations.

It would be hard to argue that such incubations are innately inappropriate for developers to look at, given that early incubations are usually single-engine, and getting developers to channel that demand to engines is frequently critical in order to get engines to ramp up efforts to implement such things (including, of course, the impetus to move to a final standards body).

I'd be okay with putting vendor signals in the templating somewhere - but I would not limit it just to the current three engine vendors, and stating "this is unlikely to be implemented elsewhere" is not a rational statement to make. I do think we should somehow connect the signals from, say, Apple and Mozilla so they are surfaced on the incubations; but I patently disagree "developers should refrain from using features in this incubation" is a fair statement to make (do you intend to put such a big red modal in every incubation and feature proposal elsewhere as well, until universal implementation has been adopted?)

@sideshowbarker
Copy link

I understood the proposal here to be limited to being about specific cases like the one one cited in issue description: an “incubation might have run its course as it hasn't successfully gained the cross browser support we had hoped for in the last 7 years”.

For those kind of cases only, I agree something along the lines of “big red modal like WHATWG Review Drafts” doesn’t seem inappropriate — and instead seems useful to web developers as far as more clearly signaling to them about the fact the spec, despite being around for quite a while, hasn’t gotten implementor interest needed to put it on a trajectory to become part of the platform.

On the other hand I also agree that such a “big red modal like WHATWG Review Drafts” thing shouldn’t be applied prematurely to specs that haven’t had some chance yet to prove themselves — and I mean not as far as implementor interest, but also web-developer interest.

To be more specific: Consider a case like the original <picture> proposal. There was a point at which it seemed all implementors were pretty clearly opposed to that proposal and it would be nearly impossible for it to progress. And at that time, part of what helped keep it alive was that we had many web developers speaking out quite strongly about the need for a solution.

I realize the comparison to those earlier days of the <picture> proposal isn’t completely a fit comparison for what’s being discussed here. But I think there’s still a takeaway from the spirit of it that we should keep it mind: At least in cases where we have something with some significant web-developer enthusiasm/momentum behind it, we should be careful to not prematurely label it as something that’s absolutely headed toward becoming a “never gonna happen”.

@hober
Copy link
Contributor Author

hober commented Apr 22, 2020

@cwilso wrote:

The big red model in WHATWG Review drafts is because almost no one should be looking at such a specification (they should be looking at the current LS - RDs are by definition for lawyercats only). By contrast, WICG incubations that have only been implemented by one "engine" are still... incubations.

@sideshowbarker replied:

I understood the proposal here to be limited to being about specific cases like the one one cited in issue description: an “incubation might have run its course as it hasn't successfully gained the cross browser support we had hoped for in the last 7 years”.

Yes, Mike's right; I intended this suggestion only for dormant/maintenance-mode incubations with only one implementation and on-the-record opposition from other implementers.

@sideshowbarker wrote:

For those kind of cases only, I agree something along the lines of “big red modal like WHATWG Review Drafts” doesn’t seem inappropriate — and instead seems useful to web developers as far as more clearly signaling to them about the fact the spec, despite being around for quite a while, hasn’t gotten implementor interest needed to put it on a trajectory to become part of the platform.

Yes, this is exactly what I had in mind.

@sideshowbarker wrote:

On the other hand I also agree that such a “big red modal like WHATWG Review Drafts” thing shouldn’t be applied prematurely to specs that haven’t had some chance yet to prove themselves — and I mean not as far as implementor interest, but also web-developer interest.

Yes, agreed.

@marcoscaceres
Copy link
Contributor

I'd honestly prefer we time box specs instead... like, if they go dormant for 1-2 years, and there is clear indication that "it's not going to happen", we close them out. Having a sense of urgency around them help make more meaningful compromises towards reaching consensus on a "minimum viable spec" that at least has cross-engine support.

I also understand that that might not be realistic. People have different priorities and working on different things at different times. It's not unrealistic for some browser engineers to not look at things from ~3 years after incubation starts... maybe we should then set it to 5 years max?

@sideshowbarker
Copy link

I'd honestly prefer we time box specs instead... like, if they go dormant for 1-2 years, and there is clear indication that "it's not going to happen", we close them out.

“close them out” is ambiguous. But I think at least a lot of cases, one thing it shouldn’t mean is that we completely delete the repo and un-publish the spec. I say that because even in cases where a spec goes dormant, it’s often already been documented in MDN — with links from MDN into anchors to particular definitions/sections in the spec.

Given that, it seems like “close them out” should basically involve at least doing what’s proposed in the description for this issue — so that we don’t break the links and so that we give web developers an unambiguous indication of the implementation status of the spec.

@marcoscaceres
Copy link
Contributor

“close them out” is ambiguous.

Sorry: I mean, archive them. As we've been doing with some. See the "archived" tab at the bottom of this spreadsheet:
https://docs.google.com/spreadsheets/d/1K2EtkvKXMDk_h2goR34uMIWmw1LfPhIi-QAJHcQBP_4/edit#gid=1759632076

I say that because even in cases where a spec goes dormant, it’s often already been documented in MDN — with links from MDN into anchors to particular definitions/sections in the spec.

sigh... but yeah.

Given that, it seems like “close them out” should basically involve at least doing what’s proposed in the description for this issue — so that we don’t break the links and so that we give web developers an unambiguous indication of the implementation status of the spec.

Agree.

@hober
Copy link
Contributor Author

hober commented Apr 23, 2020

I think going forward it makes sense to have a timeout like @marcoscaceres suggests. If we adopt one, I think it would be worth the effort to go through the existing WICG repos to apply this to things that have already timed out, too.

@cwilso
Copy link
Member

cwilso commented Apr 23, 2020

I'm not sure why a timeout would make sense. The original issue that sparked this discussion - over in WICG/netinfo#82 - shows pretty clearly that even what might be considered "stagnant" incubations may actually regain momentum, because the whole gating factor that leads one vendor or another to be opposed to implementing may actually change when it comes up for discussion, and those vendors have bandwidth to discuss and explore.

To be clear: I am opposed to any arbitrary time-boxing of incubations - particularly in the world where it is difficult if not impossible to get bandwidth from other vendors, even to make statements on features with clear developer demand. (Yep, Web MIDI would be a good example here.)

Labeling implementation support for incubations is understandable; clearer signals on incubations where implementers can lay out their reasoning is great. Archiving or closing out incubations is not; there are IP questions opened by doing so.

I am strongly opposed to any auto-archiving based on time, as it shuts off any discussion or conversation in the incubation - and prevents, in fact, any vendor from participating in a discussion that might change their mind. The only reason to archive should be 1) the feature has moved to a different place - e.g. been adopted by the WHATWG into HTML - and discussion should move there, or 2) all parties - but most particularly those who shepherded the incubation to begin with, agree that it has failed.

@yoavweiss
Copy link
Contributor

To be more specific: Consider a case like the original <picture> proposal. There was a point at which it seemed all implementors were pretty clearly opposed to that proposal and it would be nearly impossible for it to progress. And at that time, part of what helped keep it alive was that we had many web developers speaking out quite strongly about the need for a solution.

Like this?

As @cwilso is saying, the fact that an incubation started X months/years ago is not a good signal about its future viability. Similarly, the fact that some vendors oppose a proposal in its current form doesn't mean that a compromise can't be achieved. This is even more true for features that have clear use cases and wide developer demand. Shutting down that conversation seems extremely wrong.

@marcoscaceres
Copy link
Contributor

I am strongly opposed to any auto-archiving based on time, as it shuts off any discussion or conversation in the incubation

Please note that no one is suggesting auto-archiving.

What I was proposing, and what we've been doing for the last year+, is politely asking those involved if the incubation is still viable or if some alternative solution was found - more often than not, an alternative emerged and all those involve agree that archiving is the way to go (or they ask for more time to try to keep things moving along).

Netinfo is a bit of an outlier here, because some folks really want it (in some shape or form) - and other folks acknowledge there is a need for something like it - but don't particularly agree with the direction.

What's kinda unfortunate with Netinfo is that it looks like a fairly formed spec, and an implementation to match - but without the agreement that the spec should have that shape. That's somewhat exceptional, because other incubations hopefully get shaped through collaboration and rough consensus.

To me, it seems like the best solution would be to scale back an incubation to just the parts people agree on. Any super controversial parts of the spec should be removed, and, in the worst case MDN should get updated to reflect the experimental nature of any proposal.

In the extreme case, we start slapping red warnings everywhere - but I'm hopeful we can avoid doing that.

@yoavweiss
Copy link
Contributor

What I was proposing, and what we've been doing for the last year+, is politely asking those involved if the incubation is still viable or if some alternative solution was found - more often than not, an alternative emerged and all those involve agree that archiving is the way to go (or they ask for more time to try to keep things moving along).

Archiving abandoned work (which everyone agree is abandoned) is fine from my perspective. This is not what this issue is about though.

To me, it seems like the best solution would be to scale back an incubation to just the parts people agree on.

What you described sounds a lot like collaboration on the proposal with the purpose of it graduating into a WG. That would be highly welcome. It's also something that cannot happen with archived proposals.

aside: I'm assuming you're talking about the specific case of a mature incubation which lacks multi-implementer support (as early-stage incubations should be encouraged to explore the problem space, rather than seek consensus).

In the extreme case, we start slapping red warnings everywhere - but I'm hopeful we can avoid doing that.

I'm failing to see how red warnings would be helpful for something other than discouraging WICG work.

@marcoscaceres
Copy link
Contributor

I'm failing to see how red warnings would be helpful for something other than discouraging WICG work.

Well, the thing people at Mozilla get upset about is web developers thinking that WICG incubations are "standards" (why we moved to add the "Unofficial" watermark to the top of CG specs - though if that was effective is something still up for debate). Developers come and express their dismay that we don't support some random WICG API linked to from MDN that's shipped in one browser - even though that API doesn't have broad consensus or hasn't been vetted beyond a single browser vendor.

I imagine that's also what's bothering @hober and the WebKit folks - and red boxes are a cheap solution to address that issue.

Now, again, without saying we should do the red boxes: I think that's what ultimately leads to a red box situation - so for us that are not shipping, we can point to a spec and say "see, this is not a thing yet... one day, maybe... but not yet".

@yoavweiss
Copy link
Contributor

Well, the thing people at Mozilla get upset about is web developers thinking that WICG incubations are "standards" (why we moved to add the "Unofficial" watermark to the top of CG specs - though if that was effective is something still up for debate). Developers come and express their dismay that we don't support some random WICG API linked to from MDN that's shipped in one browser - even though that API doesn't have broad consensus or hasn't been vetted beyond a single browser vendor.

That sounds like you're getting a clear signal from developers that those "random" APIs are solving a real problem they encounter in their day-to-day work. I doubt debating W3C process with those developers would help them solve those problems.

Maybe instead, when such signals are received, that should encourage collaboration on those APIs to make sure they are something y'all can implement and ship once the implementation work is prioritized?

@marcoscaceres
Copy link
Contributor

That sounds like you're getting a clear signal from developers that those "random" APIs are solving a real problem they encounter in their day-to-day work. I doubt debating W3C process with those developers would help them solve those problems.

Heh, valid :) Priorities tho.

Maybe instead, when such signals are received, that should encourage collaboration on those APIs to make sure they are something y'all can implement and ship once the implementation work is prioritized?

"We do what we can with what little we have".

@sideshowbarker
Copy link

Regarding MDN concerns ancillary to this, a somewhat-related guideline was very recently added to the contributor docs for the associated browser-compat-data project:

https://github.com/mdn/browser-compat-data/blob/master/docs/data-guidelines.md#removal-of-irrelevant-features

Features can be removed from BCD if it is considered irrelevant. A feature can be considered irrelevant if any of these conditions are met:

  • a feature was never implemented in any browser and the specification has been abandoned.
  • a feature was implemented and has since been removed from all browser releases dating back 2 years.

This guideline was proposed in #6018.

@garykac
Copy link
Member

garykac commented Apr 28, 2020

Developers come and express their dismay that we don't support some random WICG API linked to from MDN that's shipped in one browser - even though that API doesn't have broad consensus or hasn't been vetted beyond a single browser vendor.

Another thing that could be done here is to tweak the info on MDN to be more clear that the API is still experimental / being incubated.

For example, the Keyboard Lock API on MDN has a yellow bar at the top indicating that it's Experimental. But that's easy to forget as you scroll down and start reading the page.

When you scroll down to the "Specifications" section, the spec link to the WICG spec looks just as official as any other spec link on MDN. If you put one of those experimental Flask icons next to the spec (or flashing red tags, or whatever), it might help as a reminder.

@cwilso
Copy link
Member

cwilso commented Apr 28, 2020

Paging @jpmedley.

@sideshowbarker
Copy link

For example, the Keyboard Lock API on MDN has a yellow bar at the top indicating that it's Experimental. But that's easy to forget as you scroll down and start reading the page.

When you scroll down to the "Specifications" section, the spec link to the WICG spec looks just as official as any other spec link on MDN. If you put one of those experimental Flask icons next to the spec (or flashing red tags, or whatever), it might help as a reminder.

I added one there for now, just to show what it would look like.

But note that there’s already also such a “this is experimental” flask icon in the Browser Compatibility table just below that Specifications table. I would think web developers are likely to be paying more attention to that Browser Compatibility table than the Specifications table, so maybe adding the icon to the Specifications table too is overkill.

Anyway, https://github.com/mdn/sprints/issues and https://discourse.mozilla.org/c/mdn/236 are good places to discuss any ideas about how to make MDN articles give further signals about experimental features.

@marcoscaceres
Copy link
Contributor

@yoavweiss and I had a call about this. We feel making changes per the WHATWG is a bit too extreme for incubations – as the purpose of the incubations is to foster discussion and collaboration, not to scare people away.

We acknowledge there are issues with people outside the standards community being confused that these are not "real standards". We've made some efforts towards clarifying that... like making sure the "unofficial" watermark is across the header of a document (Mozilla folks wanted it through the whole document, but it made the documents too unreadable from an a11y perspective).

Now, there are special cases where an API ends up shipping in a single engine - and we should maybe work out some way of denoting that. MDN is doing this already for us, but maybe we could add something to specs to indicate that fact. However, we would be reliant on spec authors to annotate, or otherwise mark up, specs to show this.

We are open to suggestions for how to incrementally improve things.

@cwilso
Copy link
Member

cwilso commented Apr 28, 2020

SGTM.

@jpmedley
Copy link

For example, the Keyboard Lock API on MDN has a yellow bar at the top indicating that it's Experimental. But that's easy to forget as you scroll down and start reading the page.

Actually, these bars are being removed from MDN because they very badly lack needed subtly. (It also relates to a plan to move MDN content creation to GitHub. I'm leaving out details about that.) For example a spec like service worker, which is implemented in all major browsers, is largely the same in those browser, and changes very little, contains an experimental browser, while something like the Payments API, which is a candidate recommendation, and is still highly volatile contains no such warning.

I would think web developers are likely to be paying more attention to that Browser Compatibility table than the Specifications table.

I couldn't agree more. The distinctions you're all drawing in this discussion are murky at best to those outside the standards problems. I've had a front row seat to the standards process for six years, attended three TPACs, and had the process explained to me by Chris Wilson. I make no claims whatsoever about my knowledge of it. What do you think the average web developer makes of the distinction between various types of specs? MDN's primary purpose is for developers who just need to build something that works on as much of the platform as possible.

@marcoscaceres
Copy link
Contributor

This has come up again in w3c/web-share#150 - where Web Share L2 is an incubation.

@cwilso
Copy link
Member

cwilso commented Apr 30, 2020

Hmm, interesting. Where is Web Share L2 being incubated? I'm having a hard time distinguishing between "L1" and "L2" specs.

In general, this is a particularly interesting problem - e.g. for specs that are forks of current TR specs (e.g. https://github.com/WICG/media-source), how should we clearly delineate those?

@travisleithead
Copy link
Member

travisleithead commented Apr 30, 2020 via email

@sideshowbarker
Copy link

mdn/browser-compat-data#6059 came up today and has ended up making me think more about the MDN and BCD side related to this discussion. I posted comments there — which are long and basically a monologue at this point (though I’m sure others will weigh in) — but the summary is, it’s related to https://developer.mozilla.org/en-US/docs/Web/API/Window/onbeforeinstallprompt and w3c/manifest#836, which is a case of a feature that:

  • is only implemented in a single engine
  • other browser-engine projects are on record as saying they’re not going to implement
  • isn’t even in any current specification

The last bullet point above makes it not directly relevant to the specific issue discussed here — but for the MDN and BCD side, it’s related in that we need to decide what to convey to web developers about its status. Specifically, do we want to go so far as to have the MDN article say that the feature is “no longer recommended” and that “developers should avoid this functionality”? Or is it sufficient to instead just convey to developers that the feature is non-standard and experimental?

I don’t expect any further discussion about that specific case to take place here — you’re free to comment on it at mdn/browser-compat-data#6059 and I may raise a related meta-issue at https://github.com/mdn/sprints or https://discourse.mozilla.org/c/mdn/236— but it seemed worth mentioning here in order to point out a specific example where, along with the issue about how specs should be conveying feature status, we have a related need for MDN.

@marcoscaceres
Copy link
Contributor

@travisleithead, yes, we (WebAppsWG) have been a little bit slow about moving it over to the WICG. Mozilla and Apple folks were hoping to avoid that by trying to convince the editor to just drop the level, and let things sit in pull requests per the WebApps working mode/charter (w3c/web-share#107 (comment)).

However, some Editors like having WICG specs instead of PRs... which gets us back into this not so great situation.

@marcoscaceres
Copy link
Contributor

Here is a concrete proposal: we make it clear to all engineering leads/teams at all companies that: where a technology is in scope of a working group charter, we (the standards community) prefer pull requests rather than things getting pushed into the WICG.

That would:

  • avoid the "faux spec" problem.
  • avoid MDN confusion.
  • force people to keep championing their feature if they want it in a "real" spec.

That would also delineate more clearly what is in scope of the WICG and what isn't: if it doesn't fit in a working group, then the WICG will take it! But if it's a feature that a working group rejected, it shouldn't end up at the WICG. Similarly, if a single engine implemented it, but it got rejected by a Working Group, that's not a good reason to bring it to the WICG... it can be incubated as a pull request, or wiki page, or even a new repo, in a working group instead.

@cwilso
Copy link
Member

cwilso commented May 1, 2020

Both personally and on behalf of Google, I oppose that proposal. The whole point of incubation is to enable multiple experiments, and to try out unorthodox things. That's one of the strong points in favor of doing such experiments outside working groups (and why we have an Immersive Web Community Group as well as an Immersive Web Working Group, e.g.). I think letting a Working Group "lick all the cookies" is not a good idea, particularly when that scope is, frankly, intentionally huge like the Web Apps WG.

That's not to say that the community in such a group should be ignored; they absolutely should be invited if not involved (again, cf the Immersive Web groups, where the overlap is very high). I've been a consistent advocate that incubations should go where their community is; however, if the WG isn't interested, it clearly isn't there. Certainly, in some specs where the features being incubated are intimately involved in an already-extant WG spec, PRs are the right way to go (e.g. many smaller features that go into DOM or HTML), but PRs are already kind of a challenging mechanism for developing proposals for anything but small feature additions. For medium to large features, they should probably start as a standalone explainer.

But if a WG covering that feature's scope has explicitly rejected a feature, it seems they've explicitly stated they DON'T want to participate in incubating it further, so I'm not sure why you'd say to do it there. Moving it out elsewhere seems warranted.

Nothing (as per previous comment) can prevent the "faux spec" problem, other than commitments to clearly label status of proposals, incubations, and support from browsers and engines. MDN, in my opinion, absolutely should be leading with the "spec status of this feature" as a banner - not the current "experimental", but something that delineates clearly the baked-ness of, say, most of ServiceWorker or WebXR vs. onbeforeinstallprompt.

@marcoscaceres
Copy link
Contributor

Both personally and on behalf of Google, I oppose that proposal. The whole point of incubation is to enable multiple experiments, and to try out unorthodox things. That's one of the strong points in favor of doing such experiments outside working groups (and why we have an Immersive Web Community Group as well as an Immersive Web Working Group, e.g.).

The value of incubation is not in question here. We are all in violent agreement on the value of incubation, and we've had great success with the WICG over the last 5 years.

I think letting a Working Group "lick all the cookies" is not a good idea, particularly when that scope is, frankly, intentionally huge like the Web Apps WG.

My experience is that both Chairs and Team are pretty strict about not spinning up random work.

<webapps-wg-chair-🧢>
Note that I deliberately restricted the Web Apps WG's scope in the last charter: We've not added anything that was not explicitly listed in the charter, so the above doesn't hold - though it was definitely a problem in the past, which I hope I fixed.
</webapps-wg-chair-🧢>

... For medium to large features, they should probably start as a standalone explainer.

Agree.

But if a WG covering that feature's scope has explicitly rejected a feature, it seems they've explicitly stated they DON'T want to participate in incubating it further,

There is a difference between incubating and outright rejecting a feature... that's a hard pill to swallow sometimes, but that's basically what this really comes down to: not all ideas will make it into "The Platform", irrespective of how much we want them to succeed or how many years they sit in incubation - or even if it's shipped in a single engine and developers are relying on it at the expense of privacy and/or security.

There are good reasons to toss something over to the WICG to chew on... but, tossing something to us that's not going to happen is patronizing to both the engineers involved and the WICG. It's why we end up with memes like:

Take it to the WICG

so I'm not sure why you'd say to do it there. Moving it out elsewhere seems warranted.

Again, that's totally different from two implementers saying, "we are never going to implement X" (e.g., parts of NetInfo) VS "yeah, that's seems super interesting, let's work together and see what we come up with!" (e.g., feature policy).

There has to be a point of acceptance that some things will die on the vine. WICG shouldn't be a place where we keep dead specs and/or outright rejected features on life support as a face saving measure. That is deceptive to the community and lessens the value and credibility of the WICG - we are better than that, I hope.

Nothing (as per previous comment) can prevent the "faux spec" problem, other than commitments to clearly label status of proposals, incubations, and support from browsers and engines. MDN, in my opinion, absolutely should be leading with the "spec status of this feature" as a banner - not the current "experimental", but something that delineates clearly the baked-ness of, say, most of ServiceWorker or WebXR vs. onbeforeinstallprompt.

How MDN does things is a separate concern. I've no doubt they will do an exceptional job in communicating the status of things, as they've always done. I ask that we put MDN aside and focus on the WICG and WICG specs.

What I'm saying is: If incubations didn't succeed, but a single vendor wants to continue with it despite it being rejected by other implementers, then they should be taken back to the said vendor's repo (and marked as a proprietary extension, given the browser vendor's logo, etc. so there is no confusion about it being a proprietary thing).

If at some later point, other vendors see the error of their ways and realize feature X was actually a brilliant idea, they can go asking to bring back a feature for incubation.

@hober
Copy link
Contributor Author

hober commented May 4, 2020

@cwilso wrote:

But if a WG covering that feature's scope has explicitly rejected a feature, it seems they've explicitly stated they DON'T want to participate in incubating it further,

@marcoscaceres replied (emphasis mine):

There is a difference between incubating and outright rejecting a feature... that's a hard pill to swallow sometimes, but that's basically what this really comes down to: not all ideas will make it into "The Platform", irrespective of how much we want them to succeed or how many years they sit in incubation - or even if it's shipped in a single engine and developers are relying on it at the expense of privacy and/or security.

There are good reasons to toss something over to the WICG to chew on... but, tossing something to us that's not going to happen is patronizing to both the engineers involved and the WICG.
[…]
That's totally different from two implementers saying, "we are never going to implement X" (e.g., parts of NetInfo) VS "yeah, that's seems super interesting, let's work together and see what we come up with!" (e.g., feature policy).

There has to be a point of acceptance that some things will die on the vine. WICG shouldn't be a place where we keep dead specs and/or outright rejected features on life support as a face saving measure. That is deceptive to the community and lessens the value and credibility of the WICG - we are better than that, I hope.

@cwilso wrote:

Nothing (as per previous comment) can prevent the "faux spec" problem, other than commitments to clearly label status of proposals, incubations, and support from browsers and engines.
[…]

@marcoscaceres replied (again, emphasis mine):

What I'm saying is: If incubations didn't succeed, but a single vendor wants to continue with it despite it being rejected by other implementers, then they should be taken back to the said vendor's repo (and marked as a proprietary extension, given the browser vendor's logo, etc. so there is no confusion about it being a proprietary thing).

If at some later point, other vendors see the error of their ways and realize feature X was actually a brilliant idea, they can go asking to bring back a feature for incubation.

I could not agree more with @marcoscaceres on these points.

@cwilso
Copy link
Member

cwilso commented May 4, 2020

There are multiple different threads here.

  1. I do want to be clear I support making it clear that WICG specifications are not an official consensus-driven Rec-track standard. That should be true of ALL CG-produced specifications.
    1a. There's one small challenge there when an incubation is a fork of an already-extant WG spec - I don't immediately have a solution, I'm sure one can be found, just highlighting it.

  2. Marcos, you said "My experience is that both Chairs and Team are pretty strict about not spinning up random work." That's the core of my point about incubations - it lets people explore unorthodox things. I don't want a world where the Chair of a WG and/or the W3C Team gets to prevent exploration of an area. At any rate, a WG having a feature in scope does not mean all incubation should have to happen in that WG.

  3. I agree that 'not all ideas will make it into "The Platform"'. I disagree that any single (or dual) entity gets to decide that. If I agreed with that, WebMIDI wouldn't be heavily used by the music industry today, because Mozilla and Apple would have shut it down.

  4. Marking incubation status as "Chrome shipped this, but no other engine supports it" is fine.
    Taking it out of the WICG is a bad idea, because then that CLA becomes irrelevant, and in fact other vendors CAN'T support it without asking permission from the contributors.

  5. "Proprietary" is a confusing word, because there is "proprietary" in the sense of WebMIDI - where Mozilla and Apple have chosen not to engage or support it, but Chrome worked in the open with the industry to design and ship a much-needed feature - and there's proprietary ON PURPOSE. We don't really do the latter. (Any of us, I mean.). I mention this because you imply the latter when you call features "proprietary", when really you mean "only one of the three engine implementers has worked on this."

  6. As an aside, I LOLed at "If at some later point, other vendors see the error of their ways and realize feature X was actually a brilliant idea, they can go asking to bring back a feature for incubation." I can't see that ever happening. Why would you troll amongst what you believe to be another vendor's proprietary features, and go ask them for permission? You'd just start a new feature, with a fresh bikeshed color.

  7. We are in agreement that WICG should not be a place we keep dead specs [aside from archived, of course]. We are in disagreement on what constitutes dead - because in my opinion, an incubation that was developed to the point of shipping (with all the maintenance and responsibility that entails) by a vendor isn't dead. This isn't about saving face - I'm fine if you want to put your vendor signals all over it - but rather about the hope that eventually other vendors WILL take the opportunity to engage with substance.

@yoavweiss
Copy link
Contributor

Replying to Marcos' comment, a few points in no particular order:

  • I think it’s important not to confuse specific proposal details and use-cases. If proposal details are deemed harmful (e.g. on privacy & security grounds), that sounds to me like a reason to engage, e.g. by opening issues on that front. What I hear you saying throughout your reply is “if the current proposed solution is not great, let’s throw the use-cases out with the bath water”.
    • NetInfo is a good example of some agreement on use-cases but disagreement on the current solution. Again, that should be grounds for further collaboration, not less. In the specific case of NetInfo, the renewed discussion we’ve seen recently was great, and may well lead to a better API. This wouldn’t have been possible if the spec would have been siloed away.
  • Looking at the WebApps charter, it seems to cover a few WICG specifications. Are they considered “in scope” for the WG? (I’m assuming work on them is allowed to continue under your proposal)
    • If someone were to propose a competing proposal for those, would that also be in scope for the WG, and therefore, forbidden?
    • If someone were to propose a competing proposal for one of the APIs that are in the WG (e.g. a better File System API, improved IndexedDB, etc ), would that be considered in-scope for the WG and therefore forbidden to work on outside of it?
    • What about WHATWG and HTML? Its scope is pretty broad. If someone were to propose e.g. a revamped History API, would they need to figure out the entire feature as a spec PR?
  • The term “rejected feature” smells a lot like gatekeeping. Surely you’re not suggesting some use-cases are ones the community is not allowed to work on just because “We Say So!”
  • I don't think anyone is suggesting to keep specs around in WICG to “save face”. The purpose of keeping them maintained in a collaborative space where everyone can contribute (from an IPR perspective) is to enable the community and other vendors to get involved if they so choose, and encourage an eventual interoperable solution to the use cases.

Overall, I’m concerned that siloing proposals into vendor-specific orgs would prevent other vendors from commenting on them and shape them. It seems like an extreme measure, that would lead to overall less collaboration. Going back to a question I asked earlier up-thread: what problem are you trying to solve with this proposal?

@marcoscaceres
Copy link
Contributor

marcoscaceres commented May 5, 2020

This is getting very long.... and starting to get circular. Let's tl;dr on @yoavweiss core question:

what problem are you trying to solve with this proposal?

  1. Specs masquerade as incubations because they've been implemented in a single engine, but have little chance of ever graduating to a W3C WG due to lack of implementer interest. The raison d'être of the WICG is to move things to the W3C - not have things "incubate" for more than, say, a few years.
  2. Follows from 1, developer confusion when they see a spec at the WICG. The confusion comes because incubations are seen as collaboration between the standards community. However, in reality it's often just engineers from a single company working on a proposal with limited participation from other members of the community. This might be better done in an explainers repo instead, such as Microsoft's and WebKit explainers instead.
  3. Specs/features rejected by a working group getting handed to the WICG as a face saving measure, which gives the presence that a rejected feature* still has the potential to become part of the web platform.
  4. Follows from 3: face saving measure for prematurely shipping something half-baked, because it has "a spec" but no buy in from a second engine.

*"rejected" by the W3C process - because it was marked "at risk".

More rambling responses below... but maybe we should switch to a higher bandwidth medium to discuss this as there are too many questions/points for me to address. I put <details> below, because I feel we are going to rathole and get grumpy at each other - which doesn't seem very productive.

Let's find some middle ground and propose some workable solutions. I made a proposal - it wasn't amazing, but maybe it's a start?

@cwilso wrote:

Marcos, you said "My experience is that both Chairs and Team are pretty strict about not spinning up random work." That's the core of my point about incubations -

Sorry, I was not very clear so my point didn't come across: Adding necessary things, like an IDL attribute, a method, or even spinning off a spec to meet a use case, is not uncommon in a WG: That's normal operating procedure in standards development for any working group, and well within a working groups charter. What I was objecting to was: spinning up a WICG incubation for adding an IDL method, attribute, or enum value to an existing spec because those extensions have shipped in a single engine before the working group had a chance to discuss them, or because they were rejected by the WG.

That's the core of my point about incubations - it lets people explore unorthodox things.

Yes, again, that's never been in question. For example, the Shape Detection API, Web Share, Feature Policy, Badging, and many other are all fine examples of good incubations.

At any rate, a WG having a feature in scope does not mean all incubation should have to happen in that WG.

That's not what I'm saying... I'm saying that if a feature got tried, tested, and no one wanted to implement it, then bringing it to the WICG is a lost cause (e.g., beforeinstallprompt, parts of NetInfo).

Take Web Share API "L2" as a more concrete example: it's proposing a couple of new IDL enums and a method, so it shouldn't need to go through the WICG - multiple implementers already said they are interested in exploring the use cases of "L2", though they don't necessarily agree with the approach, but are supportive of finding the right API shape.

However, because the Share "L2" shipped in Chrome before we could reach consensus on the shape of the API, we now have a bad situation where there is "faux spec" pretending that this is the way it is: the "faux spec" is just documenting Chrome's behavior. That's not great.

Solution: propose those things in a pull request instead.

It's exactly the same story with NetInfo: it contains a bunch of stuff no one wants, but a couple of use cases that compelling ("what's the effective download speed?" and "is the connection metered?") - but the API shape in the spec is just documenting stuff in Chrome - thus not reflective of any sort of consensus. It could just be gutted out and we could have the incubation discussions in either an explainer, in issues, or whatever... and eventually get to something that looks like a spec through collaboration.

So, to @yoavweiss point, about grounds for further collaboration:

Solution: gut the spec. Start again. Let's work through the use cases and propose a new API shape via a set of pull requests, as a community.

The WHATWG put a stop to the bad behavior I described above by not allowing anything into HTML without agreement from two vendors - something I'm also enforcing in Web Payments and Web Apps WG. The reality is that the rule is going to make Google's life difficult: because it means working really really hard to convince other engines to support those things... but that seems fair, given that it's a shared platform.

But for all things Google, please ship whatever you like... but please clearly delineate what's Google Proprietary stuff and where it's actual "web platform" things: where multiple browser engines are actually planning to ship.

And that brings us full circle to the WICG: When the community tries to incubate things, but it turns out that only one vendor is excited about a feature, then at some point it's time to concede that an incubation has failed (irrespective of it having shipped in Chrome - that's not Mozilla or Apple's problem... except when Google goes and sells incubations to developers like they are "web platform" things).

I agree that 'not all ideas will make it into "The Platform"'. I disagree that any single (or dual) entity gets to decide that. If I agreed with that, WebMIDI wouldn't be heavily used by the music industry today, because Mozilla and Apple would have shut it down.

It's not Apple and Mozilla that shut it down: It's the W3C Process that we all agreed to operate under. WebMIDI won't ever get to REC because WebMIDI is never going to get two interoperable implementations. That's the process we all agreed to operate under, and yes, it sucks that stuff fails sometimes. Remember, you are talking to someone who wasted a PhD and 7 years on W3C Widgets, so believe you me I know how much it sucks when people are using your stuff and yet it fails to become a thing.

But that's the standards game: win some, lose some, move onto the next one.

@yoavweiss asked:

Looking at the WebApps charter, it seems to cover a few WICG specifications. Are they considered “in scope” for the WG? (I’m assuming work on them is allowed to continue under your proposal)

Eventually we'd like to bring them over, so long as we get support from multiple implementers. Web Share was a good example... working hard to try get interest on the others.

If someone were to propose a competing proposal for those, would that also be in scope for the WG, and therefore, forbidden?

There is no "forbidden". It's a case by case basis... look at Badging API: at the last TPAC, a bunch of smart folks got together around a whiteboard and totally changed the API shape based on some really productive discussions. The point is that we have a pretty good idea how we want things to work, how we bring things into the WG in a fair way, and we know when things are "not quite right".

What about WHATWG and HTML? Its scope is pretty broad. If someone were to propose e.g. a revamped History API, would they need to figure out the entire feature as a spec PR?

We have plenty of examples of that in the WICG (e.g., the event options). So yes - they would. But they could incubate it outside, then bring it in. That's what happened already. Further, if it was a single vendor trying to do what you describe, you can bet that it would be PR.

There are not hard fast rules here - so asking "gotcha" questions is not going to help. It's more of a clear case of where some specs are clearly doing the wrong thing.

The term “rejected feature” smells a lot like gatekeeping.

It's not... the W3C Process clearly states that things that don't have multiple implementations will get marked "at risk", and booted from the spec if they don't get interoperable implementations. I don't make the rules, I just enforce them (as Chair).

@marcoscaceres
Copy link
Contributor

@yoavweiss and I spoke again to see if we could find a more palatable proposal... here is another go at this as a straw person:

  1. Proposal gets brought to the WICG.
  2. Where appropriate, WICG Chairs ask, "this looks like it would be nice in the . Have you run this by them?" - the purpose of this question is to try to rally some excitement and support from WG members for a new idea before incubating it, and to get ideas more visibility (and hopefully not just a single vendor backing it).
  3. If a working group wants to take the proposal straight away, then our job is done (🍻) - e.g., it's a new event, method, attribute being added to a spec or whatever.
  4. If a working group is like, "that sounds kinda interesting... you should work on that in the WICG! Here are some folks who can help you." Then, we create a repo. But there should be some kind of public record that others are interested. Silence should not be taken as acceptance.
  5. If a working group is like... "meh..." and there is no real public support for said feature beyond a single company, then we don't create a repo (until such time where there is support).

@yoavweiss
Copy link
Contributor

Thanks for writing it up!

  • Proposal gets brought to the WICG.
  • Where appropriate, WICG Chairs ask, "this looks like it would be nice in the . Have you run this by them?" - the purpose of this question is to try to rally some excitement and support from WG members for a new idea before incubating it, and to get ideas more visibility (and hopefully not just a single vendor backing it).

Those bits seem great. The only part where I may push back on is the "before" part. I don't think this should be a pre-requisite for incubation, but something that should happen either before or during the lifetime of the incubation.

3. If a working group wants to take the proposal straight away, then our job is done (🍻) - e.g., it's a new event, method, attribute being added to a spec or whatever.

That can work for smallish things that we're pretty certain are a good idea, but leaves less room to abandon the incubation idea and move on to a better solution to the problem. So I'm not opposed to the principle, but think that in practice, it'd probably be better to let most things incubate for a while.

  • If a working group is like, "that sounds kinda interesting... you should work on that in the WICG! Here are some folks who can help you." Then, we create a repo. But there should be some kind of public record that others are interested. Silence should not be taken as acceptance.
  • If a working group is like... "meh..." and there is no real public support for said feature beyond a single company, then we don't create a repo (until such time where there is support).

I think this is mixing up 2 separate notions: WG support and community/industry support.
I'm 100% on board that incubation should expand beyond a single company, and should have some support from either the industry or the community. This is currently gathered in Discourse, and IMO should continue as is.

At the same time, I'd object to requiring WG approval in order to incubate things. That seems like a step backwards.

Here's the flow that I had in mind when we discussed this:

  • We continue to follow current initial process:
    • Proposal brought to WICG
    • If it has industry/community support, it gets a repo and work starts
  • Where it makes sense (and where it doesn't happen already), the chairs can nudge the proposers to present their proposal to the relevant community
    • That can be in the form of a GH issue ("hey! we're working on this related thing"), presenting on a WG call, etc
  • While the proposal is not considered mature by its proposers, they should periodically post/present updates to the relevant WG, issue, mailing list, etc.
  • The WG/community members can provide feedback based on the ongoing presentations while the proposal is still in WICG.
  • At some point, when the proposal seems mature enough, the WG can adopt the work.

That way, the WGs act on an advisory role for the proposals that are likely to fall in their lap, which seems like something everyone would benefit from.

This is more or less the process we follow in the WebPerfWG regarding related incubations, and I think it was pretty successful.

WDYT?

@cwilso
Copy link
Member

cwilso commented May 19, 2020

I should have explicitly noted - Yoav and I are in agreement here. I like this recast.

I'm concerned by the statement "If a working group is like... "meh..." and there is no real public support for said feature beyond a single company, then we don't create a repo (until such time where there is support)."

Mostly, I want to ask - do you see this today? I've been quite cautious not to migrate repos into the WICG unless there is an expression of support from more than one entity.

Secondly, though, I want to underscore again- a lack of interest from a working group is just a lack of interest from them; anything someone could go create another CG to incubate, it seems like we should welcome in WICG.

@travisleithead
Copy link
Member

For incubations that have a clear "upstream" working group/workstream (and for which there isn't already a more focused CG for that proposal to be incubated in--e.g., an immersive web-related proposal, I like this proposal a lot. The "check in" regularity helps WG avoid surprises (e.g., "hey CSS WG, here's a fully-baked proposal that came out of WICG that you've had no feedback on and makes lots of assumptions that aren't going to work... please adopt it!) and the advisor (as noted) can assist to help it be successful (like a struggling grad student). I would even support documenting the advisor relationship in our report template.

I'll note that this change doesn't address the "single-engine WICG specs" concern cited earlier, except perhaps that it tries to foster increased collaboration with an actual upstream community that will help shape the feature into something more plausibly supportable by more than just a single-engine vendor. Then by the time the incubation is considered "mature" it will have had feedback on what is likely to get wide implementation and what needs to change.

I'm reasonably confident the chairs will be able to find the upstream advisor WG for most incubations--but there will likely be some unique proposals that won't have a clear home, or will be too underdeveloped to know yet where they should go. This is OK, but could leave the incubation without good support--which in turn might lead to it becoming stale, and then we will still need to grapple with what to do about it. Hopefully this will be a small minority of proposals.
What are folk's thoughts on how to handle cases where:

  • A "not considered mature" incubation is stuck in a rejection-loop with their upstream advisor? (and has perhaps been implemented/shipped?). Do we want more process? Or just keep offering encouragement until they give up?
  • A "not considered mature" incubation stalls out/stops progressing or goes rouge (no longer working with their upstream advisor)? Shall there be penalty or consequence for this? Is there specification detention? (I'm obviously liking these pedagogical analogies.)

@yoavweiss
Copy link
Contributor

I'll note that this change doesn't address the "single-engine WICG specs" concern cited earlier, except perhaps that it tries to foster increased collaboration with an actual upstream community that will help shape the feature into something more plausibly supportable by more than just a single-engine vendor.

There's that, but we also talked about having clear signals of support in the specs as a way to address those concerns.

I'm reasonably confident the chairs will be able to find the upstream advisor WG for most incubations--but there will likely be some unique proposals that won't have a clear home, or will be too underdeveloped to know yet where they should go. This is OK, but could leave the incubation without good support--which in turn might lead to it becoming stale, and then we will still need to grapple with what to do about it. Hopefully this will be a small minority of proposals.

I agree that this will be a minority. One option in such cases is to have "multiple advisors". Have the proponents present to multiple candidate WGs and see what folks say.

  • A "not considered mature" incubation is stuck in a rejection-loop with their upstream advisor? (and has perhaps been implemented/shipped?). Do we want more process? Or just keep offering encouragement until they give up?
  • A "not considered mature" incubation stalls out/stops progressing or goes rouge (no longer working with their upstream advisor)? Shall there be penalty or consequence for this? Is there specification detention? (I'm obviously liking these pedagogical analogies.)

The way that I pictured this is with the advisor relationship being voluntary. So if the proponents and the advising WG don't see eye to eye, that seems like something we should try and help fix, rather than penalize.

@marcoscaceres
Copy link
Contributor

@cwilso and I chatted about this on today's call. The @WICG/Chairs will endeavor to reach out to working groups early in the incubation process to try to get more engagement from browser vendors and the rest of the standards community in new proposals. We are also making an effort to identify which working groups could potentially adopt a WICG spec, in the hope to get those specs included in any charter renewals.

As to the OP proposal, we still don't feel that putting up a WHATWG-style modal banner would be appropriate. We've already made sure the headers of CG Drafts are watermarked as "Unofficial".

Closing this out. Thanks everyone for the great discussion!

@marcoscaceres
Copy link
Contributor

Which incubations could go into which groups can be seen in the WICG tracking spreadsheet.

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

8 participants