On Friday, July 26, 2013 at 6:36 PM, Matt Basta wrote:

> The use case for a "supportsManifestVersion" API would be to allow 
> marketplaces to determine whether they should show an app to a particular 
> device. Imagine this scenario:
>  
> Acme App is for sale and uses manifest version X
> User's device implements up to manifest version X - 1
>  
> If a marketplace doesn't know and can't detect that the user can't physically 
> install the app (because their platform is too old or too new), then the user 
> could be sent through a payment flow (navigator.pay), purchase the app, and 
> then find out later that the app isn't able to be installed on their device.
We would only really need this if we add things to the manifest that break 
backwards compatibility in an unrecoverable way (I don't think we have done 
this yet?). The consequence is that users might be unnecessarily locked out of 
content. For example, if a developer copy/pastes someone else's manifest and 
doesn't actually understand the implications of using manifest_version="2". Or, 
the developer decides to use some feature Z, but also makes the content 
available through graceful degradation (this makes using graceful degradation 
pointless - as by opting into version N you automatically shut-out - or at 
least annoy with a prompt - users).   

As the user's runtime can't predict the future (if it can support version x or 
not), it can unwittingly lock the user out of content - in a particularly 
discriminatory way. The fundamental flaw here is really with the business model 
that is guiding technical decisions (purchasing a unit - rather than paying to 
access a service). On the Web, there is no reason to not  allow "try before you 
buy" to overcome the "but will it work?" problem.  

One way around this would be to have the freedom to keep adding members to 
version 1 of the manifest format (if those properties don't affect 
compatibility), but then have a "restricted" version. I'm again not in favor of 
this, as it's user hostile and doesn't scale well (e.g., as a user, I own 
multiple devices, each supporting different device capabilities, browsers, 
etc.). Also, as I have mentioned elsewhere, manifest metadata should remain 
orthogonal to device capabilities.  
> Having an API would allow the Marketplace to hide or blocks installs for the 
> app. Similar APIs exist for the <video> and <audio> elements to detect codec 
> support.

The above API is an unfortunate byproduct of the Codec Wars™ - certainly not 
something to be emulated or that can be compared to, IMO.   
> Having such an API would be critical for forwards and backwards compatibility.
>  

I think you might be correct but only for packaged apps - which sadly follow a 
traditional software development model (no "try-before-you-buy" support). 
However, a fundamental shift in thinking about what differentiates hosted apps 
from traditional [packaged] apps is needed here (i.e., Google's Play and 
Apple's iOS business models are incompatible with the 
decentralized/un-versioned nature of the Web).  

Thus, the proposed API should never be needed for hosted apps because it would 
be inexcusable to get into the "but will it work on my device?" situation. The 
role of the payment API in this context is to enable access to 
functionality/service/products (some examples are purchasing private repo 
access on GitHub, buying games on Steam, purchasing a physical good on Etsy, 
and so on).  

--  
Marcos Caceres



_______________________________________________
dev-webapps mailing list
dev-webapps@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-webapps

Reply via email to