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

Draft of Store Support #367

Closed
wants to merge 1 commit into from
Closed

Conversation

KevinLaMS
Copy link
Contributor

@KevinLaMS KevinLaMS commented May 29, 2020

Per issue 117, we need to add store support. This is a draft of the requirements to help drive the dev spec.

Microsoft Reviewers: Open in CodeFlow

@KevinLaMS KevinLaMS requested a review from a team as a code owner May 29, 2020 19:13
author: <kevin> <larkin> <kevinlams/<[email protected]>
created on: <2020-05-28>
last updated: <2020-05-28>
issue id: <github issue id>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing issue id



**Store Apps**
The Store has multiple app types. Those that are free for download and free, but with purchase options, as well as paid apps.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let me try the "free for download" apps and see how the API handles the case when user does not own the app yet

***Free Apps***
Apps that are free, will be downloaded directly when requested.

***Pay apps [NOT SUPPORTED]***
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Paid apps?

<b>InstallerType</b> A new format, the WindowsStore type will be provided
<b> InstallerType - Default </b> this needs to be defined, but essentially the author can specify if the user does not select anything... which URL to default to.
<b>Homepage</b> The Homepage will be the URL with the bigid https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1
<B>NEW: TransactionType</b> TransactionType will be used to indicate what type of
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need more explanation on TransactionType and related fields.
Also the styling around this block does not align well in rich view

<b>NEW: Terms of transaction</b>
<b>License terms</b>
<b>Architecture</b> The architecture will support the architectures supported by the store. neutral will most likely be the default.
<b>-prelease</b> In order to support flighing, the client will need to support only showing apps with out the prerelease flag AND enabling the user override on the command line.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so is this -prerelease a cli switch dedicated to Store app? We might consider leveraging the Channel concept we already have?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nits: Remove "in order", "flighting" is spelled incorrectly.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree this needs to be the same as the model we settle on for all packages.

#### MSA Credentials
In order to support flighting, the Windows Package Manager would need to pass credentials to the Windows Store. This is not in scope for this release, therefore only GA apps are enabled.

Developers wishing to flight store apps will need to create a different app and BigID in order to make it available for flighting. Developers will use the -preview flag in the version to restrict access to those that want prerelease builds.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: BigID should be StoreId to be consistent :)

### Store App installation experience
Installing the store app will provide the MSIX installation experience. The Windows Store App will stream install.

![](images\117-Download.png)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Somehow the image does not resolve in rich view

Developers will be able to submit their app by providing meta data that includes the store ID or URL to the store app.

### Duplicate app entries
With the addition of the store, we will have an increase in duplicate entries. If we have 2 manifests with the same application, we should try to eliminate the duplicate entries by default. Otherwise it will make it difficult to limit the selection to the one file.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should try to eliminate the duplicate entries by default
Seems like we need to prioritize the support for multiple installer in one manifest. And enforce it in manual review/ reject the manifest in index creation?

...
InstallerType: MSIX
```
When the user specifies install by default the client will choose to install the version of the app that is flagged as default in the manifest. If no default is specified, then the app will default to the store as the default app.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When the user specifies install by default the client will choose to install the version of the app that is flagged as default in the manifest. If no default is specified, then the app will default to the store as the default app.
When the user specifies install by default the client will choose to install the InstallerType of the app that is flagged as default in the manifest. If no default is specified, then the app will default to the store as the default app.

last updated: <2020-05-28>
issue id: <github issue id>
---
# ===== DRAFT ======
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can use a "DRAFT" PR rather than committing a document with draft in the title. If you merge this, you will have to come back and change it to remove this line.

<b>REQUIRED: NEW: StoreID</b> the Store ID will be used to identify the app. example: 9nblggh4nns1
<b>InstallerType</b> A new format, the WindowsStore type will be provided
<b> InstallerType - Default </b> this needs to be defined, but essentially the author can specify if the user does not select anything... which URL to default to.
<b>Homepage</b> The Homepage will be the URL with the bigid https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to explain about the Microsoft catalog ID

To support store apps, the manifest file will need to be updated to support the new format. Most fields remain the same, but additional changes are required to support the store.

### YAML Spec updates
<b>URL</b> the URL used for the store is not the same as the URL users and the developers expect. Therefore this field is unnecessary.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should retain the URL field and have it point to the store application https:// address

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you suggesting it would be required? I think the URL you are suggesting would typically be the HomePage.

<b>Homepage</b> The Homepage will be the URL with the bigid https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1
<B>NEW: TransactionType</b> TransactionType will be used to indicate what type of
<b>NEW: Privacy Policy</b>
<b>NEW: Terms of transaction</b>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is this different from a EULA? I'd like to try and get as much value in the manifest for each attribute. I'd also like to make sure optional attributes or those that only apply in certain situations to be located in a meaningful place.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A EULA requires acceptance, a privacy policy does not. You cannot combine the two.


[comment]: # Be sure to add links to references, resources, footnotes, etc.

## History
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git keeps a history of all revisions to a document, this probably isn't necessary

<b>NEW: Terms of transaction</b>
<b>License terms</b>
<b>Architecture</b> The architecture will support the architectures supported by the store. neutral will most likely be the default.
<b>-prelease</b> In order to support flighing, the client will need to support only showing apps with out the prerelease flag AND enabling the user override on the command line.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flighing -> flighting

<b>REQUIRED: NEW: StoreID</b> the Store ID will be used to identify the app. example: 9nblggh4nns1
<b>InstallerType</b> A new format, the WindowsStore type will be provided
<b> InstallerType - Default </b> this needs to be defined, but essentially the author can specify if the user does not select anything... which URL to default to.
<b>Homepage</b> The Homepage will be the URL with the bigid https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bigid casing is inconsistent throughout the document.

@JohnMcPMS
Copy link
Member

The issue for installing things comes in two parts:

  1. Processing a set of metadata (aka manifest) to result in an installed application
  2. Discovery of said metadata

This spec seems to cover installation, but mostly glosses over discovery with the assumption that it would be the same as non-Store (aka through winget-pkgs). I think that we do need an installation spec much like this one that covers the manifest side of things. But I believe that discovery should be handled as a separate source, which will allow for the entire catalog to be available (at least, to the limits that we impose).

@riverar
Copy link

riverar commented May 30, 2020

Great start.

Would like to see coverage/consideration of:

  • Applications with durables and/or optional packages
  • Applications with flight audience groups (can be handled via channel? what about auth?)
  • Applications that are labeled as having IAP but don't really (Store bug with durables/optional packages)
  • Dependencies (e.g. framework packages)
  • Discovery, especially around localized product display
  • Windows SKUs without Store support
    • Can we have two variants (but same version) of our app in winget to alleviate issues that arise due to SKU limitations?

...
InstallerType: MSIX
```
When the user specifies install by default the client will choose to install the version of the app that is flagged as default in the manifest. If no default is specified, then the app will default to the store as the default app.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

then the app will default to the store as the default app.

Good. This is the best way to handle concerns about flaky remote servers causing download failures.

@lordcheeto
Copy link

The issue for installing things comes in two parts:

  1. Processing a set of metadata (aka manifest) to result in an installed application
  2. Discovery of said metadata

This spec seems to cover installation, but mostly glosses over discovery with the assumption that it would be the same as non-Store (aka through winget-pkgs). I think that we do need an installation spec much like this one that covers the manifest side of things. But I believe that discovery should be handled as a separate source, which will allow for the entire catalog to be available (at least, to the limits that we impose).

That would result in more collisions when searching for a program that has been distributed through both a standalone installer and the store. I don't think the behavior for multiple sources has been defined, so I'm not sure what that would look like.

They wouldn't have the benefit of being linked by their shared presence in a single versioned manifest, and it would be impossible to determine with confidence that two hits are for the same bits, so any collision would have to prompt the user to make a decision. You can't rely on the Publisher.Name.Version fully qualified name to resolve collisions, because those fields in the store are not necessarily consistent with the manifests as defined in winget-pkgs. For example, Windows Terminal has the Publisher field set to Microsoft in winget-pkgs, but is Microsoft Corporation in the Windows Store.

Because we have manifests that are based on publisher and appname, there should not be a case where we have multiple manifests with different installers. If we do, there is something wrong with the metadata.

With a curated central repository, that's manageable.


General question: is support for the Microsoft Store for Business and Education
on the radar, and would this spec be compatible without breaking changes later on down the line?

@JohnMcPMS
Copy link
Member

That would result in more collisions when searching for a program that has been distributed through both a standalone installer and the store. I don't think the behavior for multiple sources has been defined, so I'm not sure what that would look like.

They wouldn't have the benefit of being linked by their shared presence in a single versioned manifest, and it would be impossible to determine with confidence that two hits are for the same bits, so any collision would have to prompt the user to make a decision. You can't rely on the Publisher.Name.Version fully qualified name to resolve collisions, because those fields in the store are not necessarily consistent with the manifests as defined in winget-pkgs. For example, Windows Terminal has the Publisher field set to Microsoft in winget-pkgs, but is Microsoft Corporation in the Windows Store.

Because we have manifests that are based on publisher and appname, there should not be a case where we have multiple manifests with different installers. If we do, there is something wrong with the metadata.

With a curated central repository, that's manageable.

General question: is support for the Microsoft Store for Business and Education on the radar, and would this spec be compatible without breaking changes later on down the line?

Indeed, we have already received feedback that we should value the curation over the full list of Store offerings. This would also enable direct linkage between things offered in multiple ways, as you state. I just want to ensure the user choice of Store vs external. It may end up being a setting to prefer one or the other.

As to Store for Business, that will require more investigation. I don't think that the design will preclude it, but I don't know if additional namespacing information will be required or not. This could either be rolled into the existing value, or added as a new field. In either case, I expect that to come much later with enterprise support features, as nothing in winget-pkgs will be in SfB.

@lordcheeto
Copy link

Indeed, we have already received feedback that we should value the curation over the full list of Store offerings. This would also enable direct linkage between things offered in multiple ways, as you state. I just want to ensure the user choice of Store vs external. It may end up being a setting to prefer one or the other.

Agreed. Having it as a separate source, if linked in some way, would allow users to just remove the source. Robust InstallerType filtering (configurable with flags or user configurable settings) would allow for that, as well as filtering of other installer fields like language or scope.

@riverar
Copy link

riverar commented Jun 12, 2020

In addition to earlier comments, would like to also throw out there that downloading from the Store should not require initial configuration of credentials or require any authentication. I typically click through quite a few dialogs in the Store client to get our supported download-without-login experience. I'd expect winget to just work.

Copy link
Contributor

@Karl-WE Karl-WE left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consideration of Store background updating behaviour

Microsoft Store often enough does not fetch apps updates, unless the user starts the Microsoft Store app, clicks on the pending downloads icon, click get updates. Store would the actively search for new GA or flighting updated also install all previous queued ones.

I've reported this several times for months now to the store team and insider team but no one feels responsible. Affected 18xx or later builds.

The problem is that the store will still update apps but based on a non transparent schedule which misses for following scenarios :

  • users assigned guest role cannot use (store) apps at all, all builds
  • users with users role assigned likely get no apps updates
  • users with local admin roles assigned (default) will receive updates but only when the computer is on and online for an undocumented time, eventually depending on idle status like search.

Copy link
Contributor

@Karl-WE Karl-WE left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Considerations for Business Store / Intune / Autopilot

The draft imho does consider Microsoft Store, yet I am missing a major usecase for business users

  • Microsoft Store for Business
  • in junction with app deployment via Intune over Store for Business and Autopilot

Limitations of Store support for Winget

  • the team / author @KevinLaMS might want add conceptual remarks on the limitations with LTSC Client and and Servers and Server SAC which have no Store support.

In these cases users have to fall back to native winget features. Referencing planned backport of winget to LTSC versions, likely including SAC versions of Windows Server, for consistency.

@ghost ghost added the Needs-Author-Feedback Issue needs attention from issue or PR author label Jul 7, 2020
@ghost ghost added the No-Recent-Activity Issue has no recent activity label Jul 15, 2020
@ghost
Copy link

ghost commented Jul 15, 2020

This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 7 days. It will be closed if no further activity occurs within 7 days of this comment.

@Karl-WE
Copy link
Contributor

Karl-WE commented Jul 15, 2020

@KevinLaMS is this still a thing being worked on?

@ghost ghost removed the No-Recent-Activity Issue has no recent activity label Jul 15, 2020
@ghost ghost added the No-Recent-Activity Issue has no recent activity label Jul 22, 2020
@ghost
Copy link

ghost commented Jul 22, 2020

This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 7 days. It will be closed if no further activity occurs within 7 days of this comment.

@ghost ghost closed this Jul 29, 2020
@riverar
Copy link

riverar commented Jul 29, 2020

Uh guys. @KevinLaMS @JohnMcPMS @denelon

@ghost ghost removed the No-Recent-Activity Issue has no recent activity label Jul 29, 2020
@denelon denelon reopened this Jul 31, 2020
@denelon
Copy link
Contributor

denelon commented Jul 31, 2020

Sorry all. We've had quite a bit of internal discussion going on about store support. The latest release has some code behind a feature toggle with a POC that we've been working on. Unfortunately, we haven't gotten as far along as we had hoped.

There is other activity going on right now to look at how we can build a set of manifests for some store apps that are free, and rated e for everyone. We're thinking about building the manifests for those and putting them into a different source for the package manager.

The challenges associated with commerce and other requirements we have with store Apps have been a bit more involved than originally anticipated. We may have to split #117 into smaller pieces in order to get functionality out, and to make the right subset of store apps available as we can.

@Karl-WE
Copy link
Contributor

Karl-WE commented Aug 7, 2020

Good news @denelon my previous mentioned general issues that store app might not update automatically seemed to be fixed in Insider Dev but also outside. Needs more careful observation if is entirely fixed.

@ghost ghost added the No-Recent-Activity Issue has no recent activity label Aug 14, 2020
@ghost
Copy link

ghost commented Aug 14, 2020

This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 7 days. It will be closed if no further activity occurs within 7 days of this comment.

This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs-Author-Feedback Issue needs attention from issue or PR author No-Recent-Activity Issue has no recent activity
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants