看了Microsoft 365 Developer的How Windows 10X runs UWP and Win32 apps视频,写下一点感受。

之前一直以为Windows 10X是给双屏的Windows使用的操作系统,只是适配一下,没有其他值得关注的点。但是 看了Peter Torr在该视频中的介绍,感觉MS还是想对Win32搞点事情的。

Win32是非常经典的API,功能强大也非常稳定,无数的应用程式都在使用,造就了MS的辉煌,但同时也带来了巨大的枷锁,让MS力推的UWP/WinRT响应者寥寥。道理也很简单,Win32可以很随意访问的操作系统提供的各种资源,只有基于账户的权限管理;而WinRT则是非常受限的编程接口,很多时候对资源的访问需要经过用户的授权,就像是如今手机、平板上的各种移动设备上的App的遭遇一样。

由奢入俭难,横行霸道惯了的App,怎么可能愿意自缚手脚呢?因为有流氓强盗,就要请看家护院的。你PC中的各种安全软件,其实跟恶意软件是一体的两面而已。App迟迟不愿动,MS当然就推不动改革,无法甩开Win32这种在Windows XP就达到了巅峰,在64位计算的时代名字看起来有点复古的编程接口。

MS当然不愿意看着Win32一直活下去。基于Win32的App天天调用着Win32提供的接口来获取操作系统的服务,MS却无法从中收到一分钱,而只能依靠操作系统的不断版本升级来获取利润,这条路基本上越走越难。因为不管操作系统如何升级,大部分用户使用的只是一小部分操作系统的功能,说服用户付费是很困难的事情。以至于MS只能栖身于企业市场,因为企业用户目标大,有独特的需求,容易说服。

所以MS就要向AG(苹果和谷歌)学习,让App开发者去说服用户付费,然后作为操作系统只要收取中间费即可。苹果在这方面做得就很好,所以有底气把macOS以免费的方式发行。所以MS还是要想办法抬举UWP,打压Win32。可惜没办法像汉高祖那样杀伐果决,只能学习宋太祖的杯酒释兵权。

看看Window 10X是如何对Win32杯酒释兵权的。首先采用容器技术,开发出两种容器:

  • UWP容器
  • Win32容器(包括MSIX容器)

UWP容器是一等公民,原生运行,可以获得最大效率。而Win32容器则是运行在一个虚拟层之上的,然后通过RDP(远程桌面协议)在原生侧通过RDP代理访问其图形界面。打个比方,这有点像通过WSL运行Linux,并在里面开一个X Server,然后使用Windows桌面客户端提供X Server的图形交互。这是从整体上削弱Win32应用程序的能力。好处是大部分Win32应用不需要做什么更改就可以运行,但影响毕竟是存在的,比如:

  • 应用程序不能开机自动运行
  • 没有系统托盘,以及其他一些依赖于Shell的功能
  • 如果没有窗口就会有可能被挂起(包括NT Services)
  • 鼠标、键盘、窗口的钩子都不能用了

总得来说,对于小白用户,这是好事吧。因为不需要安装各种安全软件,系统运行更快。对于开发者可能也是好事,用户安全感高了,对App的购买欲也会强一点吧。

(完)