WindowsやMacOSでのデスクトップ開発でも色々とありますが、Linuxにおけるデスクトップのハチャメチャ具合はそれらとは比較にもなりません。
Windowsでは、Windows95(Windows NT 3.1)の古来からあるWinAPIがあり、Windows8.0でWinRT(UWP)が登場し全画面アプリ化して迷走した挙句、速攻で無かったことになってWindows10でProject reunionとか言ってWinAPIとWinRTをマッシュアップしたWinUI3(WinAppSDK)が登場(Long story short)しました。そんなこんなで、Windowsでは現状さまざまなUIが混在してしまっているという状況です。
ただ、Windowsの良いところは、後方互換性に最大限の努力をしているという点で、Windows98時代に作ったアプリが普通に今でもWindows11でそのまま動きます。(自分が大昔に作ったWin32API/Delphi製のアプリの中では、IEの機能を利用したアプリだけ動かない・・もうIE無いから当然ですが)
MacOSは、記憶にある中では、CPUアーキテクチャ変えすぎで、PowerPC、Intel、ArmベースのApple Silicon と来て、以前のアプリも全く動かなくなる。しかも、今度は32ビットから64ビットへの移行で32ビットアプリは動かなくなった・・・みたいな。Windowsでは互換レーヤー(WOW64)が優れているので既存の32ビットアプリもそのまま普通に動いているのに・・。Appleは何かあるとそれ以前のアプリを徹底的に切り捨てます。あと、Carbon からCocoaみたいなのもあったな。MacOSではアプリの統一感があるのは良いけれど、Xcodeの利用を強制される・・みたいな欠点があります。あとMacでは諸々の「自由」が無いっていうのもありますね。
Linuxでは、昔からディストリビューションごとにGlibcとかバージョン違いで動かない、とか色々あってアプリはソースコードをtarボールで頒布し自らコンパイルが普通みたいな時代もあったけど、流石にそれはどうかというのが現代ではあります・・・が、
未だに、「Win32 Is The Only Stable ABI on Linux」とか有名な話しで、界隈で冗談交じりに本気で言われるのがLinuxであります。リーナス御大も自ら認めてる。
Linuxでは、それ以外にも、いわゆる「デスクトップ環境」が多様すぎ。代表的なので、Gnome、KDE、xfceとか。それぞれで、全然違います。GnomeではGTKというウィジェットを使うしKDEではQt。依存ライブラリさえインストールすればそれぞれ異なる環境でも動きますが機能だけでなくLook&Feelが全然違います。どれを選択するかってのはアプリ開発者にとっては究極の選択。(最近ではFlutterやAvaloniaUIみたいにガワだけ使って独自UIをSkiaで描画するって手もありますが、固有機能とLook&Feelが・・)
さらにインストーラーのパッケージ方法。Debian生まれの.deb形式、RedHat生まれの.rpm 、ArchのPacmanなどなど・・。
最近になって、WindowsのAPPXみたいなアプリを一種のサンドボックス内で動作するようにする新手のインストールパッケージが登場していますが、これもまた、UbuntuのSnap、Flatpak、AppImageとバラバラ。めんどくさすぎ。
さらに最近では、古くなったX11の代わりにWaylandにするという動きがあって、さらに混沌。
今まではGnomeであろうがKDEであろうが、アプリはX11向けに開発していればよかったのですが、WaylandではX11がやっていたことを放棄して、「プロトコルしかやりません」と言って「個別にコンポジターでやって」と丸投げした挙句、「デスクトップ環境固有の問題?、VRとかあるし~」とX11では当然出来ていたレベルの機能を導入することを回避し続けてユーザー寄りとは到底言えない状況。(デスクトップ上のポジションとか、ウィンドウへのアイコンの個別設定できない等々)
具体的にはこんな感じ。
Simon Ser
@emersion
Nov 26, 2021
Wayland will not blindly add protocol features just because X11 has them. X11 has many flaws, and allowing clients to pick their global position is one of the flaws.
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/72
これ、Simon Serって部外者でなくて今はFreeDesktop Board of Directorsの一員になってる中の人。Linuxのデスクトップ環境の多様性は大いに支持はするけれども、このWayland周りの人達の傲慢さにはイラっとしますな。
何しろ、Waylandは2008年に公開されて2024年に主要ディストリビューションがX11から切り替えてるというのに、17年以上やってて、いまだにデスクトップ上の特定の場所にウィンドウを配置することさえできないとかいう、笑えないぐらい酷い状況。
さすがに2025年にもなって「やっぱり必要だったわ」、みたいな話になっている(xdg_toplevel_tag_v1とかも出てきた)けども、おまいらアプリも開発したことのない象牙の塔かなんかに住んでるのか?ってぐらい頭でっかちで現実を全くわかってない人たちが今まで作っていた模様。
ちょっとググってみて適当に出てきた「Is Wayland Ever Going To Be "Ready"?」っていうYouTube動画のコメント欄から適当に上位コメントを抜き出してみたけれども、どれも「まさにソレ!」って感じでみんな同じように感じてるようですね。
The problem with Wayland is that it was being developed for many years within a bubble. Some group of users were making their toy protocol and nobody else cared. Now that the protocol is no longer treated as a toy, the base assumptions that were made by that developer bubble turned out to be wrong, and now it takes years to unwind those mistakes.
Waylandの問題点は、長年にわたりバブルの中(閉鎖的な環境)で開発されてきたこと。一部のユーザーグループが自分たちのおもちゃのプロトコルを作っていて、他の誰も気にしていなかった。がしかし、このプロトコルがおもちゃとして扱われなくなった今、その開発者達が基にしてきた基本的な前提が間違っていたことが判明し、その間違いを解きほぐすのに何年もかかっているって状況。
Yap!
Actually my problem with wayland is more like "second system effect" where instead of thinking "what would be good architecture" they more often think "what was bad in previous system so we avoid it at all costs" - and not paying attention to what they really do!
自分にとってのWaylandの問題は、むしろ「セカンドシステム効果」のようなもので、彼らは「何が良いアーキテクチャか」と考える代わりに、「前のシステムで何が悪かったか、だからそれを何としても避けよう」と考えることが多く、自分たちが実際のところ何をしているのか気にもかけてないっていう点。
Yap!
Honestly, Wayland also need to fix their main issue of the "I refuse to fix/implement because you dumb" mentality
正直に言って、Waylandは「お前が馬鹿だから、修正/実装してやらない」という、彼らの根本的な考え方も直す必要があるね。
Yap!
Looks like the main developers of Wayland suffer a lot from "Now we have another chance to do it right. And we must do it perfectly right. Your proposal doesn't seem perfectly right, so let's put it aside until we find the perfect solution maybe 5 years later (no matter how your users need it now)".
Waylandの主要な開発者たちは、「今度こそ正しくやるチャンスだ。完璧に正しくやらなければならない。あなたの提案は完璧には正しくないように見えるから、いったん保留にしよう、完璧な解決策が見つかるまで、おそらく5年後ぐらいかな(ユーザーが今どれだけ必要としていても関係なく)」という考えに、かなりやられてるね。
Yap!
実際、Ubuntuで今現在、ChromeにしろFireFoxにしろブラウザを起動すると、毎回、毎回変なところで起動して、手動で位置を調整しないといけない。Waylandアプリすべてそう。XWayland(Waylandが裏でX11動かしてる)で動かしてるアプリはちゃんと以前の位置を覚えて起動する。
コンポジターはといえば、KDEやGnomeとかそれぞれがそれぞれに作って(GnomeのMutterとか)はいるけれども、Waylandエクステンションの対応状況はバラバラという最悪の状況、というか本体プロトコルの実装状況さえもバラバラ。しかもWaylandが汎用向き過ぎて(というか意図的に最小限にしているので)、まともな機能は全部拡張の仕様を使うことになるわけだけれども拡張を実装するのはコンポジター次第・・みたいな。で、portalでやり取りするようにして、とか、全然シンプルじゃなくなってないか?みたいな。
あと、CSDとSSDでGnomeがSSD拒否ってる問題もあるし(Windowsみたいにアプリ開発者が上書き可にすればよいのに)。
実際、対応を謳っていても、「Chromiumは『text-input-v1』しかサポートしておらず、Mutterでは『text-input-v3』のみに対応で『text-input-v1』には非対応」みたいな状況も起きていて実際に問題になってたり。
なので、たとえアプリ開発者がX11向けからWayland対応に作り直しても、今度はGnomeのコンポジターとKDEのコンポジターで動くかどうかは話しは別、みたいなことになって、それぞれで動作テストと個別処理が必要になってくるとかいう悪夢・・・
溜息しかでませんわ。
まぁそれでも自分が毎日使うアプリは「ウェブアプリ」のなんちゃってアプリよりも、ちゃんとしたネイティブアプリを選びますけどね。作る場合は最悪です。AvaloniaUIが将来的にメジャーアップデートで、Wayland(の諸々)対応と各種パッケージ生成を自動でやってくれる、という話しなんで大いに期待しています。