"Implement something like Chrome's installer and updater"

MSIX does implement the same UX and comes with every Windows 10+ install, the runtime can be installed to older Windows too. So they did do this in the end. Conveyor produces them and it now also implements a web-like update UX (for macOS too) where the app checks for an update on every launch and will update/relaunch itself synchronously with no user intervention. Delta updates make it fast - on a decent internet connection like those we have here in Switzerland it's practically as fast to update to a new version and start a desktop app as loading a web app! I gotta say it feels great, quite different to the old desktop app feel. Especially neat is the way Windows can share files and even file blocks between unrelated apps, which means if you install an e.g. Electron or JVM app and then another one, Windows won't download the files twice, it'll hard-link them into place. So they can even share the underlying memory when the two apps are running, reducing memory usage! And if they're slightly different it'll only download the changed blocks.

Why didn't MS do it 20 years ago? When Google's updater engine was new it was very controversial. We've all forgotten about it now, but the idea that apps would upgrade themselves silently, in the background, if you weren't even running the app at all, and you'd not even be notified, well this made a lot of programmer control-at-any-cost types extremely angry. Google did it anyway because Larry Page had an unusually extreme focus on simplicity and wanted a web-like experience, so pushed it through despite opposition. Now it's accepted as the right way to do things. Page doesn't get enough credit IMO for his product management insight and sheer force of will.

The web would probably still have risen, but maybe a lot slower. Even a hypothetical much improved Win32 wasn't ever going to be a good way to represent documents, and on the web a lot of "apps" are closer to interactive documents than apps, or evolve out of documents. Microsoft didn't and still doesn't have anything in the platform that recognizes this.

The goal of Conveyor is to make it as easy to distribute desktop apps as it is for web apps (or much easier if you need things like hardware access or offline support, of course). The long term idea is that if it's easy to do stuff outside the browser, it'll become possible to explore alternative architectures that are maybe more appropriate than HTML.

One idea I keep coming back to is file associations. The web doesn't have any such concept because it doesn't recognize that apps can exist independently from documents. Imagine there's a simple way to form a little graph, such that a piece of data can point to another node using edge labels like "view", "edit", "transform-to:text/json" or whatever. These are like the verbs that file explorers allow apps to associate with files. And then the target node can itself be a file like a script with an association like "execute". By following the links you build up the entire software stack needed to work with the target file, you can sandbox that stack and execute it, and users can override the associations for any kind of node to replace the default functionality with something else. This would make the original XML vision of separating data and presentation actually happen because you can define a custom Markdown+JSON format that holds the content for your blog, associate it with a separate program that renders that to <whatever>, associate that in turn with something that renders your <whatever> format to pixels and so on.

I think that sort of addition would have been a possible way that Microsoft/Apple/Linux could have combatted the competitive threat of the web. But nobody was thinking about it.