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

Reword Web VM requirement in phase doc? #350

Open
binji opened this issue Dec 13, 2018 · 17 comments
Open

Reword Web VM requirement in phase doc? #350

binji opened this issue Dec 13, 2018 · 17 comments
Labels
process Issues concerning the documents in the process directory.

Comments

@binji
Copy link
Member

binji commented Dec 13, 2018

We discussed this in the December 11 meeting.

Should we change the entry requirement for phase 4 to allow for two non-web implementations? @rossberg suggested replacing "Web VMs" with "production VMs"

@binji
Copy link
Member Author

binji commented Jun 19, 2019

This topic came up again in the June CG meeting.

We didn't come to a conclusion about how/whether to change the VM requirement. I've summarized some of the arguments made for and against this change below:

  • Leaving it vague ("production VM") allows the group to make the decision on a proposal-by-proposal basis
  • There is not a similar requirement for toolchains (text just says "toolchain" without specifying it)
  • Having it vague means that the definition of which VMs are allowed could change over time for the same proposal
  • Requiring two Web VMs helps enforce a web-wide consensus
  • Weakening requirement may mean web wasm diverges from non-web wasm
  • This requirement is meant to enforce implementability of the proposal, not whether it can be deployed on the web
  • Wasm will have optional features; web wasm won't have all of them
  • Browsers can still stop a proposal from advancing in phase 5 (standardization by WG)

We should continue this discussion in another meeting, but for now we can continue discussion here.

@titzer
Copy link
Contributor

titzer commented Jun 22, 2019

I would propose the following:

Change the requirement to "must be implemented in 2 relevant production engines." The idea being that there may be proposals that are relevant to some engines and not others.

I would also propose the following for discussion:

Add "without objection from other production engines". The idea being, a kind of veto power that provides for the case where a production engine may be unable to ever implement a feature in a performant way with reasonable complexity. Although, to be fair, objections should probably have come up sooner in the process.

Thoughts?

@fgmccabe
Copy link
Collaborator

fgmccabe commented Jun 23, 2019 via email

@Horcrux7
Copy link

What are the relevant production engines today? V8, SM and JSC? Is Chakra still relevant?
Which market share makes a VM relevant? This term is just as vague.

Because new engines will not fall from the sky, one could list the intended engines also naming.

@fgmccabe
Copy link
Collaborator

fgmccabe commented Jun 23, 2019 via email

@rossberg
Copy link
Member

rossberg commented Jun 23, 2019

Actually the market share concept may be the right criterion: “enough
engines to cover 25% of the installed base of engines”

And how would we measure that, esp across different ecosystems?

Seriously, this discussion still misses the point. The 2-engines criterion in the process is a technical criterion to ensure feasibility of a feature in realistic implementations, not to ensure buy-in from vendors.There is no automatism to accept a proposal just because it provides all technical deliverables; the CG and WG still have to agree to advance it. That's what we have meetings, discussions, polls and voting for. If a vendor has concerns, it is supposed to raise them as part of the discussion, not by gaming technicalities. We should assume good intentions on all sides for resolving any disagreements; random technical quorums would be terrible measures for that.

And because it is a technical criterion, it also makes sense to keep it somewhat flexible, since the exact details of which implementations sufficiently demonstrate a proposal's feasibility might depend on its contents. In fact, some proposals will not be implemented in engines but in other tools (e.g., anything related to the text format or certain custom sections). It's up to the CG to decide on a case-by-case basis when exactly this criterion is considered satisfied -- as with other criteria (e.g., does the test suite for the new feature have enough coverage?). The wording cannot be more than a guideline, but should not overconstrain either.

@titzer
Copy link
Contributor

titzer commented Jun 23, 2019

The 2-engines criterion in the process is a technical criterion to ensure feasibility of a feature in realistic implementations, not to ensure buy-in from vendors.

I agree, and my suggestion of the additional word relevant was designed to introduce some nuance into the wording to help us decide which engines count for a given feature.

Now that I think it about it more, the second proposal about a kind of "veto" power should rather be considered a technical criteria, though I probably phrased it poorly. It shouldn't be considered "veto power". Indeed, if it is possible to demonstrate technical feasibility, then it should also be possible to demonstrate technical infeasibility--i.e. a negative signal.

@binji
Copy link
Member Author

binji commented Feb 21, 2020

We discussed this at the Feb 2020 CG meeting. There seemed to be agreement that we should decide, somewhere relatively early in the proposal process, which Wasm VMs are relevant, and should be required to prove feasibility for phase 4.

I think making it an entry to phase 2 seems like a good place. The current requirements for that phase are:

  • Full proposed English spec text available in a forked repo around which a reasonably high level of consensus exists.
  • Updates to the formal notation, test suite, and reference interpreter are NOT yet required.

We could add something like (with proper-wordsmithing):

  • The kinds of WebAssembly VMs required for phase 4 advancement has been determined (e.g. web, non-web, etc.).

Then modify phase 4 wording:

  • Two or more Web VMs implement the feature.
  • Two relevant WebAssembly VMs (as determined in phase 2) implement the feature.

Thoughts?

@ajklein
Copy link
Contributor

ajklein commented Feb 21, 2020

This direction seems reasonable to me. One thing I wanted to put on the record, though I don't think it really needs to be in the document (since the CG should be able to make all kinds of changes to proposals before phase 4), is that the CG shouldn't feel bound by whatever was chosen at phase 2 if things change during the development of the proposal (it can be a long time between phase 2 and phase 4).

I want to avoid a process-based objection that says "well the CG said we only needed engines X and Y, so the fact that it's not in Z is immaterial" even if there are good technical arguments for why Z would in fact be useful.

@tschneidereit
Copy link
Member

I agree that this is a good direction. I also agree with @ajklein on making sure we don't treat the identified set of relevant VMs as immutable after stage 2 has been entered.

One corner case: what if there are three different kinds of VMs that are relevant? In that case, it seems we should have at least one of each. This does pose the question of what the ontology of VM types should be, of course :) As a first approximation, there might be web, IoT, cloud, general-purpose embeddable. On some level, this seems a bit much, but I could see how all of these are meaningfully different when it comes to implementability of at least some proposals.

@RossTate
Copy link
Contributor

To @tschneidereit's point, one thing that surprised me at the meeting was how often there is an implicitly assumed implementation strategy. For example, there's an expectation that all globals and even memory tables are accessed through an instance pointer, but that implementation strategy wouldn't make sense for engines expecting every module to have only one instance or to have just one module instance entirely (like embedded devices?), in which case you wouldn't need to have an instance pointer and would just directly access globals/tables in memory. So if y'all want WebAssembly to really be usable outside of browsers, I think y'all should find ways to encourage other types of engines to implement these designs as early as possible so that we might uncover where these assumptions are problematic still in time to fix them.

@lukewagner
Copy link
Member

Having had a bit of time to think about this since the CG meeting, it feels unfortunate to, at least at this early stage in wasm's development, allow less than 2 Web VM implementations for any feature that is intended to be implemented in a browser. The reason being that currently a valuable property of wasm is its portable implementation on the Web and the 2-Web-VM requirement helps ensure that going forward.

Thus, instead of generalizing the "2 Web VM" requirement, I'd be inclined to instead strengthen the requirement, saying that 2 Web VMs are required plus potential others, as appropriate for the feature. An exception would be features that were not intended to be implemented natively in browsers (like WASI).

@rossberg
Copy link
Member

@lukewagner, see my earlier comment, that would be abusing a technical criterion for non-technical purposes.

@lukewagner
Copy link
Member

Technical feasibility is only one subgoal to be achieved by this phase process; the more general goal is a successful standard and that requires more than just technical feasibility.

@rossberg
Copy link
Member

rossberg commented Feb 26, 2020

I don't think formal process rules and arbitrary quorums are the right tool to force adoption. Web engines will continue to wield plenty of practical power over the development of the standard; it would be a good signal for the wider ecosystem to slowly reduce at least some of their formal privileges.

@lukewagner
Copy link
Member

The phase process is not about forcing adoption, but describing what successfully standardizing a feature looks like, and, at least at this early point in time for wasm outside the browser, I think that success includes multiple Web VM implementations. That may change in the future, of course.

@rossberg
Copy link
Member

The socio-political aspect of "successful standardization" is a highly fuzzy and dynamic concept. I don't think that attempts to formalise it are helpful at all.

IMO, the process doc should stay focussed on concrete technical criteria and leave everything else to meetings, discussions, and votes, that can decide on a suitable case-by-case basis.

@sunfishcode sunfishcode added the process Issues concerning the documents in the process directory. label Mar 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
process Issues concerning the documents in the process directory.
Projects
None yet
Development

No branches or pull requests

10 participants