Win32の「帰還」

沿って : Ilikephone / On : 25/02/2023

パッケージ管理システムは、Linuxが普及する原動力の1つだった。もともと、Linuxは、多数のオープンソースアプリやシステムに必要なライブラリ、ツールなどを集めてディストリビューションを作るもの。依存関係を含めて管理できるパッケージ管理ツールが必須で、これが整備されることで、ユーザーは、バイナリプログラムを依存関係を考えることなく、簡単にインストールすることが可能になった。

Linuxのパッケージ管理システムは1990年台に開発され、1990年台末には、ほとんどのLinuxディストリビューションがなんらかのパッケージ管理システムを持ち、Linuxディストリビューションは、採用するパッケージ管理システムで系統を分類されるまでになった。

「近代」的なパッケージ管理システムは、(図01)のように「クライアントツール」、「パッケージ化ツール」、「リポジトリ」という3つの要素からなる。プラットフォームにより違いがあり、たとえばスマートフォンのアプリケーションストアのようにライセンス管理や課金機能を持つものや、言語実装系のライブラリ管理ツールのようにソースコードでの配布を想定したものものある。

遅れること20年、Windowsにもようやく、「近代的」なパッケージ管理ツールが登場した。これを「Windows Package Manager」(通称winget)という。Wingetはオープンソースで、GitHubでの最初の公開は、2020年5月。その後、今年5月にVer.1.0が安定版として配布開始され、9月末に最新版のVer1.1.12653(安定版)とVer.1.1.12701(プレビュー版)が登場している。

このWingetは、GitHubからバイナリを入手することもできるが、Microsoftストアで配布されている「App Installer」に含まれている。たとえば、Windows TerminalをMicrosoftストアから入手すると、このApp Installerを使ってインストールが行われるため、Windows Terminalなどのアプリケーションを導入している場合、すでにWingetがインストールされていることになる。

このwingetは、先行するDebian系LinuxのAPTを参考にしたのか、よく似たコマンドになっている(表01)。wingetがaptコマンドを「パク」ったというつもりはないが、もしaptコマンドによるパッケージ管理になれているなら、wingetを使うことはそれほど難しくない。

Windowsのパッケージ管理

Windowsにパッケージ管理システムらしきものが入ったのは、スマートフォン向けのWindows Mobileが先だ。2009年にWindows Marketplace for Mobileが開始され、ソフトウェアの流通と統一的なインストールが可能になった。その後、Windows Mobileは、Windows Phone(2010年)となり、Windows Phone Storeが開始される。

Win32の「帰還」

Windows自体にストアが入ったのは、Windows 8(2012年)から。ただし、従来のWin32とは互換性のないモダンアプリ専用のストアだった。ここからWindowsは、デスクトップアプリ、モダンアプリの2系統のアプリ、2つのデスクトップという形態になる。しかし2つのデスクトップを区切って使うというWindows 8は人気がなく、制限の多いモダンアプリも同様。結果的にWindowsストアは、Windowsのソフトウェア流通のメインストリームにはなれなかった。

Windows 8の後継であるWindows 10は、OSとしての評価は回復したものの、モダンアプリ後継のUWPの人気は上がらなかった。iOSやアンドロイドのアプリ開発との共通性などを訴えたが、やはりソフトウェア流通としてはマイナーな存在でしかなかった。

そこで、Microsoftは、Win32アプリへの回帰を始める。まずは、Win32アプリ(Classic Windows App。CWPと呼ばれた)をパッケージ化してMicrosoftストアでの配布を可能にした。さらに、Project Reunionを立ち上げる。これは、UWPとWin32アプリでGUI部品やランタイムライブラリを共通化するもの。モダンアプリ、UWPと分離され、主役の座を奪われ、クラッシックとまで呼ばれたWin32アプリが主役の座へ回帰するのである(図02)。

Windows 11では、ExeインストーラーやMSIインストーラーをMicrosoftストアで「そのまま」配布できるようにした。従来も特殊なパッケージとすることでWin32アプリのMicrosoftストアでの配布は可能だったが、制限が強く、対応できないWin32アプリも少なくなかった。

さらに、Microsoftは、分離していたUWP、CWPのインストールを統合する。そのために作られたのが、オープンソースのWindows Package Manaer(通称Winget)だ。Windows用の最初の「近代的」なパッケージマネージャーだ。ここに来て、ようやくLinuxなどと同程度の機能を持つパッケージ管理システムが登場し、単一のコマンドで、Win32アプリとMicrosoftストアアプリのインストール管理が可能になった。従来は、msiexec.exeでMSI形式のアプリのインストールを、PowerShellでMicrosoftストアアプリケーションの管理を行う必要があった。

Linuxに遅れること20年、ようやくWindowsにも単一のパッケージ管理ツールでソフトウェアをインストールできる日がやってきた。ただし、Wingetは、Windowsの標準搭載アプリケーションの管理はできるが、Windows自体を構成するプログラムやライブラリの管理はできない。このあたりがLinuxのパッケージ管理システムとは違う部分だ。

Windowsでは長らく、アプリケーションは、スタートメニューに自身を登録し、アプリケーションに関する情報はアプリケーション自身が提供するというスタイルだった。そのため、パッケージ管理システムの導入だけでは不十分な点もある。たとえば、パッケージをインストールしたあと、アプリがスタートメニューに何も登録しないと、ユーザーは、起動ファイルを探さねばならない。パッケージ名から容易に類推できる場合もあるが、実行ファイル名が想像できない場合もある。Linux/UNIX系では、このときmanやinfoなどの標準コマンドや、あるいはパッケージに含まれるファイルをすべて列挙するパッケージ管理ツールのコマンドを使うことができる。

現状、Wingetは、コマンドのレベルでは統合的にアプリケーションを扱えるが、実際には、MSIやExeインストーラー、そしてAPPX/MSIX形式などの複数のパッケージを扱っており、パッケージそのものを管理するのではなく、パッケージのメタ情報(マニフェストファイル)を介してアプリケーションのインストールなどを行っている。このため、Linuxのaptコマンドやdpkgコマンドのようにパッケージ自体から細かい情報を引き出すことができない。

Windows 11でようやく、Win32アプリが主役の座に戻ってきた。MicrosoftがUWPなどを優遇している間も、多くの主要ソフトウェアは、Win32アプリのままだった。Windowsはようやくこうした実体に対応し始めたところだ。