微軟杰出工程師John Sheehan
微軟通用Windows平臺(簡稱UWP)基于WinRT。WinRT擁有數項既定目標:其一,通過用戶界面設計的觸控操作,而將Windows帶入平板電腦設備市場;其二為允許用戶更為輕松且徹底地安裝及移除應用程序——具體可通過Windows Store或者定制化業務門戶實現;其三,WinRT安全性更高,因為每款應用程序都擁有自己的沙箱環境,且獨立于操作系統及其它應用之外。并且只有一個Windows API的安全子集,負責以隔離化應用專屬區域的受限方式同文件系統交互,或者在用戶同意之下使用文件及圖片等位置明確的訪問對象。
其長遠規劃似乎是逐步推動用戶適應新的Store應用并擺脫原有桌面應用程序,直到大多數常用Windows應用皆過渡至新模式,屆時微軟將鎖定操作系統并將其推向更接近蘋果iOS的發展道路,即安全漏洞更少且能夠阻止第三方軟件對用戶體驗的負面影響。
遺憾的是,開發者們對于構建Store應用明顯缺乏興趣,而用戶們則繼續使用傳統桌面應用程序,因為這正是他們使用Windows系統的理由所在。由于使用者規模實在太過有限,Windows團隊在保障Windows 8 Store應用環境安全方面做出的努力基本付之東流。
Windows 10則承載了微軟發展戰略的一次重要轉變。Store應用環境仍然得到保留,但這次換成了新的實現方式,應用可以運行在桌面窗口當中。微軟方面還將PC、移動、Xbox、HoloLens以及Windows IoT Core等應用平臺加以統一,并將其統稱為UWP。
在本次Build大會上,微軟方面明顯指出UWP的安全工作優先級應當讓位于兼容性。Centennial項目,或者叫桌面應用轉換器,將隨Windows 10年度更新版一同亮相,以期讓開發者們能適應桌面應用程序,并輕松實現Store以及通知、Live Tiles乃至后臺任務等UWP API。這些應用程序亦不會采用沙箱機制。“我們認為,雖然可以對其進行限制及鎖定,但最終只會影響到應用程序的生命力。”Sheehan在會議上表示。
微軟還打算進一步增加UWP應用程序的可用Windows API。“大家可以期待Store應用SDK的不斷擴展及增長,除了新API之外,我們還將添加更多此前曾被清除的API選項。”Sheehan表示。
筆者曾在Build大會上同Centennial項目組的幾位成員進行過探討,他們給出的觀點非常簡單:由于用戶所下載并運行的Win32應用程序往往存在惡意代碼或者不良元素,因此由UWP進行安全交付能夠輕松解決這一問題。
微軟目前的方案是將UWP標準所使用的AppX安裝文件普及到各類Windows應用程序當中。其也可以看作是下一代Windows Installer。AppX在交付時會由受信數字化證書提供簽名,用戶則能夠通過Store獲取以及網站下載的方式進行獲取,并雙擊該文件實現安裝(Build大會與會者們以歡呼做出回應)。“大家再也不用手動編寫安裝器了,”Sheehan強調稱。
同樣的技術亦適用于Windows Server,在這一平臺上此方案被稱為Windows Server App(簡稱WSA)。其將首先出現在即將推出的Nano Server上,但同時亦將受到Server Core以及完整版Windows Server 2016的支持。“WSA能夠將Windows Server特定擴展添加至AppX當中,從而實現各類服務器應用的安裝流程,例如支持NT Service安裝。作為AppX安裝器的一套擴展集,WSA并不支持定制化操作,因此不會像MSI那樣帶來可靠性與卸載問題,”微軟公司服務器團隊指出。MSI屬于經典Windows Installer文件,Nano Server無法支持此類部署,因為其中存在關聯性機制。
開發者們編寫的新應用將無需使用Centennial項目的桌面應用轉換器即可利用MSI創建AppX,因為商用InstallShield以及開源WiX等安裝構建器都能夠直接生成AppX文件。
在此次大會上,微軟還披露了桌面應用轉換器的具體工作方式。其初始點為支持靜默安裝的MSI文件。大家可以利用命令行運行該轉換器,其會啟動一套Docker容器并在其中運行安裝器,同時捕捉面向文件系統與注冊表的各項變更。在部署其生成的AppX時,全部變更都將與應用程序文件夾相隔離,API則遵循限制條件以保證該應用程序只能夠讀取及寫入注冊表條目或者被安裝在Windows系統文件夾中的文件——換言之,這些元素為該應用程序所專有。
桌面應用轉換器將MSI轉化為AppX
根據Sheehan的說法,這套方案能夠顯著提升Windows的可靠性與性能水平。應用程序的添加與移除操作不再會導致注冊表膨脹,亦消除了DLL(即動態鏈接庫)版本問題所帶來的風險——因為每款應用都擁有自己安裝的庫副本。
當然,并非所有應用都能夠輕松實現轉換。轉換之后用戶需要進行測試,而且多數情況下開發者還需要對其安裝器或者應用代碼進行修改以保證成功。
與原生UWP應用程序不同,Centennial應用能夠以完全受信且無限制方式訪問Windows API。它們無法安裝驅動程序,但可以使用現有驅動程序以訪問硬件、SQL Server或其它數據庫以及網絡API。
使用Centennial項目,開發者能夠編寫出同時運行在Windows 7乃至更早版本以及Windows 10當中的Store應用。也就是說,Centennial項目生成的AppX要求配合Windows 10年度更新版,因此用戶必須及時進行升級;而該項目的另一項作用就是普及微軟提出的“Windows即服務”概念。
微軟公司仍然鼓勵開發者們將應用程序陸續遷移至UWP當中。大家可以在編寫應用程序時要求其同時運行兩個進程,其一在UWP內、其二則在桌面內。各進程能夠激活對方,而且兩個進程可以通過名為App Service的UWP功能實現通信。這意味著經過轉換的桌面應用將能夠接入UWP功能,例如在PC處于休眠狀態下仍在執行的后臺任務(即‘連接待命’)。Sheehan設想傳統應用將逐步把更多功能添加至UWP當中,直到最終徹底完成遷移并能夠運行在其它UWP平臺之上——例如Windows 10 Mobile或者Xbox。
盡管微軟的發展戰略在安全層面似乎無甚想法,至少與Windows 8時代相比是如此,但Centennial項目仍然能夠潛在提升Windows用戶的使用體驗。AppX技術意味著應用程序可以實現清潔安裝與卸載,而通過Windows Store進行桌面應用程序部署則能夠提供一定程度的安全保護——因為其在向Store進行提交時需要接受審核。