Open10

「Linuxでは、UbuntuがデフォルトのGUIフレームワークとしてFlutterを採用した」って本当?

Atsushi EnoAtsushi Eno

表題の引用内容はこの要約記事から引っ張ってきているのだけど https://itome.team/blog/2021/03/flutter-v2/

「ウソ」というと意図的に虚偽を拡散しているという意味になる側面があるので「間違い」というのが一番近いけど、正確には「間違い」ということでもなくて(断片的には本当だから)、とにかくこの表現から「みんなが考えるような事態」には絶対にならない。

「みんなが考えるような事態」とは、「Linuxデスクトップを使っているみんなが毎日使っているアプリがFlutter製になる」ということだ。ちょっと考えればわかることだけど、こんなのはあり得ない。われわれはデフォルトで入っているFirefoxを日々使っているけど、C++やRustで作られているそれがFlutterアプリになることは絶対に無いし、Google ChromeがC++で作られているのが突然LinuxでだけFlutterになるわけがない。

Atsushi EnoAtsushi Eno

でもデスクトップは? 「Ubuntuデスクトップ」はCanonicalが作っているんじゃないの? そう思う人もいるかもしれない。でもそんなことにはならないだろう。とはいえ、これをきちんと理解するためには、CanonicalのUbuntuチームがLinuxデスクトップの何を作っているのか、きちんと理解しておく必要がある。

現状、UbuntuデスクトップはGNOME shellの上に作られている。デスクトップそのものをFlutterで作るとしたら、それはGTKとGNOMEの上に構築されているGNOME shellそのものをFlutterで作り直すということになる。ユーザーがさまざまな拡張(gnome shell extensions)を出しているものが全部Flutterで作られる必要がある?? そんなのはとても現実的じゃない。少なくとも今すでに動いているものが無ければ話にならない。

Atsushi EnoAtsushi Eno

もう少し掘り下げた考え方をする人だったら、「GIRでgnome-shellまでのAPIをDartから呼び出せるようにすればDartでもGNOME shell実装を置き換えられるんじゃないか」と思うかもしれない。でもそれはFlutterじゃない。Dart-FFIの応用でしかない。

だからCanonicalが言っている "Flutter is the default choice for future Ubuntu apps." というのは、「Ubuntuデスクトップで動作するアプリケーション全て」のことを指しているわけじゃない。文字通りに解釈するなら「Ubuntuの名義でリリースしているアプリケーション」がデフォルトでFlutterになる、というだけの話だ。あくまで今後のデフォルトであって、全てがFlutterになるとも言っていない。

Atsushi EnoAtsushi Eno

「Ubuntuの名義でリリースしているアプリケーション」って何だよ? ってみんな思うだろうけど、たとえばこれだ。

Ubuntu Software、debパッケージのインストーラーだ。これはCanonicalのUbuntuチームが作っている「Ubuntuアプリ」だ。Synapticを使うことも出来るけど、デフォルトでUbuntuユーザーが使うのはこっちだ(ということになっている)。

Canonicalは去年の夏にもGoogleと一緒にFlokk ContactsっていうFlutter製デスクトップアプリのproof of concept的な連絡先管理アプリを公開している。snapでお手軽にインストールできる。こういうのも「Ubuntuのアプリ」といえるやつだ。

Atsushi EnoAtsushi Eno

でもそれ以外は「Ubuntuアプリ」ではない。Linuxデスクトップで動作するLibre Officeも、FirefoxやThunderbirdも、Slackクライアントも、PDFビューアーのEvinceも、GNOME Terminalも、ほとんどのLinuxデスクトップアプリはKDEやQtやGNOMEやGtk、あるいは他のX11の上に乗っかったAPIを使って作られている。

Ubuntuが作っている「Linuxデスクトップアプリ」は、本当にごくわずかで、Linuxデスクトップ開発のエコシステムを根本的に変えるような存在では全く無い。

もちろん、だからといってFlutterを使ってLinuxデスクトップアプリが開発できることの価値が無いなんてことにはまったくならない。ネイティブのデスクトップアプリケーションのフレームワークに比べたらFlutterで出来ることはかなり限られているけど(Kotlin NativeだってそうだしXamarin.Forms/MAUIだってそうだしElectronだってそうだろう)、Flutterで作ったアプリが部分的にでもLinuxデスクトップで動かせるというのは夢のある話だ。

いずれにしても、事実からかけ離れたPRがまかり通るのは悪いことだし、技術は正しく理解されて使われるべきだ。

Atsushi EnoAtsushi Eno

ちなみに(KDEはおいといて)GNOMEデスクトップに限って言えば、あそこはGNOME 3.0以降はアプリ開発はJavascriptの世界になっているはずなので、モダンなクロスプラットフォーム開発フレームワークで一番近いとしたらReactなんじゃないかって思うし、実際node-gtk + react-gtkみたいなのがあるみたいだけど、主流にいる感じではなさそう。

Atsushi EnoAtsushi Eno

ちなみに何でこの話を書いておこうと思ったのかというと、自分たちが GNOME 4.0 will be based on .NET みたいに言われながら(言いながら?)育ってきたので、プラットフォームのデフォルト開発言語が簡単に差し替えられるなんてことはあり得ないんだ、Linuxデスクトップのプラットフォームっていうのは「みんな」が合意しないと出来ていかないものなんだ、っていう原則的なことを書いておきたかった。それで当時は反.NETが強くてえらい燃え上がってた…みたいな話をちょうど公開されたばかりのこのpodcastでちょっとだけ話してた。

Takeshi TsukamotoTakeshi Tsukamoto

元ブログを書いた @itometeamです。
詳しくまとめてくださってありがとうございます!
こちらの記事を引用して元のブログにも追記をしておきました。

Atsushi EnoAtsushi Eno

やや、ご連絡恐縮です。ちなみに自分でキャッチアップはサボっていたので、元まとめは大変ありがたかったです…!