世界を動かす技術を、日本語で。

MAUIがLinuxに登場します

概要

  • Avalonia 12.NET 11 Preview に合わせ、 .NET MAUI向けAvaloniaバックエンドの初プレビュー を発表
  • LinuxやWebAssembly など新しいプラットフォームへの展開が可能
  • クロスプラットフォームUIの一貫性 と柔軟性を提供
  • 既存の.NET MAUIアプリの移植や新規開発で多数の改善を実施
  • コントロール互換性や新機能、今後の拡張も視野に入れた進化

Avalonia MAUIバックエンド 初プレビュー発表

  • Avalonia 12 および .NET 11 Preview と同時に、.NET MAUI向け Avaloniaバックエンド の初プレビューを公開
  • Avalonia を活用し、.NET MAUIアプリを LinuxやWebAssembly など新たなプラットフォームへ展開可能
  • 昨秋以降、 .NET MAUIへのAvalonia統合 に大きく前進
  • クロスプラットフォームUIの一貫性 を目指し、プラットフォームごとの差異を最小化
  • ネイティブUI描画UI を選択可能、用途やデザインに応じた柔軟な選択肢を提供

導入手順(4ステップ)

  • .NET MAUIアプリ を作成
  • Avalonia.Controls.Maui.Desktop NuGet パッケージを追加
  • net11.0ターゲットフレームワーク を追加
  • MauiBuilder にUseAvaloniaAppを追加
  • 以上でセットアップ完了、 net11.0で実行 するだけでアプリ起動
  • Avaloniaブートストラッパー不要、独自拡張やソースジェネレータの無効化も可能
  • 公式リポジトリに 各種サンプル を用意

Avalonia自体の改善

  • このプロジェクトを通じ、 Avalonia自体の機能強化 を実現
  • .NET MAUIとAvaloniaのコントロール差 を縮小し、MAUI特有のコントロール実装を回避
  • Avalonia 12 で新たな ナビゲーションAPIやコントロール を導入
  • .NET MAUIハンドラ はAvaloniaのプリミティブ上に構築、 Avalonia APIで完全カスタマイズ 可能
  • 全プラットフォームで一貫した見た目 を維持

テスト方法と移植事例

  • 新ライブラリの検証のため、 既存の.NET MAUIアプリの移植新規アプリ開発 を実施
    • MauiPlanets2048 などの移植で動作検証
  • .NET MAUI Control Gallery
    • MAUIリポジトリの公式ギャラリーで、 WASMなどでの動作比較 に活用
  • AlohaAI
    • Jakub Florkowski(.NET MAUIチーム)とGitHub Copilotの共同開発アプリ
    • LLMや機械学習の教育用、 テーマ切替・NativeAOT対応・カスタムタブバー などを追加
    • 構造はオリジナルをほぼ踏襲、 全MAUIプラットフォームで同様に動作
  • MyConference
    • .NET MAUI Live StreamでのAI活用デモアプリ
    • テーマ・トリミング問題修正、CORSプロキシ追加 でWebAssembly対応
    • Avalonia/MAUI Nativeの両方で動作確認

ネイティブUIと描画UIの選択

  • ネイティブUI はOSの標準コントロールを利用し、 ホストOSとの統一感 を重視
  • Avalonia.Controls.Maui全プラットフォームで一貫したUI を実現
  • 用途や要件に応じた選択肢 を提供、 柔軟なUI設計 が可能

既存MAUIサンプル・ライブラリとの連携

  • WeatherTwentyOne
    • .NET 6向けMAUIサンプルアプリ
    • FlexLayoutによるサイドバーやグリッド など独自UIをWebViewで移植、 Linux・WASMで良好に動作
  • GraphicsView
    • .NET MAUIの GraphicsViewやプリミティブコントロール 上で構築されたコントロールも高い互換性
    • Jonathan DickやAllan Ritchieの既存ライブラリも ほぼそのまま動作
    • Avalonia MAUIへの移行がスムーズ
  • SkiaSharp.Views.Maui
    • SkiaSharp依存ライブラリも Avalonia MAUIで動作可能
    • MapApp はデスクトップ・WASM・MAUI Nativeで同一実装を実現
    • Mapsui.Maui もハンドラー経由で 変更なしで利用可能

今後の展望

  • Maui.Essentialsの独自実装 を開始、 APIサポート拡張 を計画
  • WinUIとの相互運用、Avaloniaコントロールのホストを予定
  • コントロールライブラリアーサー向け に、 ネイティブ・描画拡張パターン を策定中
  • .NET 11正式リリース に向けさらなる進化
  • Avalonia MAUIの利用拡大・新規コントロールやライブラリの移植促進 を期待

Avalonia MAUI は、.NET MAUIユーザーに 新しい展開先とUI設計の自由度 をもたらし、今後も 機能拡張とエコシステムの成長 が見込まれます。

Hackerたちの意見

Linuxを全力でサポートしてくれたらいいのに。多くのツールキットやGUIフレームワークは中途半端にしか対応してないし、主にWaylandが理解しづらいからだと思う。Waylandでは、ウィンドウを描画する方法がいくつかあって、XDGトップレベルウィンドウだけじゃないんだ。サーフェスを使って動作するんだけど、今のところ見つけたリストはこれだよ:

  • XDGトップレベルウィンドウ
  • 子ウィンドウ
  • ポップアップサーフェス
  • レイヤーサーフェス(タスクバーやシェルオーバーレイみたいな)
  • サブサーフェス(別のサーフェス内の領域)
  • IMEパネルサーフェス(テキストカーソルに追従するサーフェス) 他にも多分あると思うけど、これらを全部サポートしてる高レベルのツールキットを見つけるのは難しいね。

それに、どこにも明確なドキュメントがないのも困るよね。少し前にグラフィックスライブラリでWayland特有の問題をデバッグしようとしたんだけど、少ないドキュメントが間違ってて、何がnullableで何がそうじゃないかがわからなかったんだ。

X11では、シンプルに以下のことを提供してたんだよね。

  • コアプロトコルの描画(線、長方形、弧、いわゆるクラシックなやつ)
  • 合成とアルファ用のXRender
  • 共有メモリブリット用のXShm
  • 2D戦にGPUを持ち込みたいならGLX
  • オーバーレイビデオパス用のXVideo
  • ピクスマップとウィンドウ、だって微妙に違う描画可能なものを2つ持ってた方が面白いじゃん
  • もちろん、遅延をデザインの制約として楽しむなら、ネットワーク越しの間接描画もね

Waylandはめちゃくちゃだね。おそらく、https://github.com/X11Libre/xserver が古いエコシステムを復活させるかも。Wayland向けに書いてる人はほとんどいないよ。2年くらい前に切り替えようとしたけど、Waylandにどれだけのものが欠けてるか気づいて諦めた。そしたら、ほとんど誰もWayland向けのソフトウェアを書いてないことに気づいた。まるで企業の広告プロジェクトみたいな感じだね。今はGNOMEとKDEがWaylandを推してるけど。

AvaloniaのLinux / Wayland戦略に興味がある人は、こちらをチェックしてね: https://avaloniaui.net/blog/bringing-wayland-support-to-aval...

Waylandってなんでこんなに複雑なの?X11と決別した理由の半分は、もっとシンプルなウィンドウサーバーを作るためだと思ってたのに。競合するコンポジタがあって、誰にもメリットがないって気づいたときはびっくりしたよ。

ちょっと不明なのは、Avaloniaの価格設定がどうなってるかってこと。もしWindows、Android、MacOS、iOS(Microsoft MAUIの範囲)向けに商業アプリを作るなら、[1]によるとアプリごとに125,000ユーロ払わなきゃいけないみたい。でも、無料プランと有料プランの違いを引き起こす条件が何なのかは、全然明確じゃなかった。

Avaloniaは無料でオープンソースだよ。Avalonia MAUIも現在はMITライセンスみたいだね[0]。リンクしてくれた価格は、Avaloniaをラップしてレガシーアプリの簡単な移行のためのWPFスタイルのAPIを提供する有料オファリングの価格だよ。[0] https://github.com/AvaloniaUI/Avalonia.Controls.Maui/blob/ma...

兄弟が言ってたことを言い換えると、有料オファリングは、既存の伝統的なWindows専用のWPFアプリを持っていて、そのアプリをそのままクロスプラットフォームにしたい場合に必要になるよ。AvaloniaUIに移植する努力を放棄するならね。もし直接AvaloniaUIで作るなら、有料オファリングは必要ないよ。

Avalonia XPFは、Avaloniaの上にあるクロスプラットフォームのWPFランタイムで、有料だよ。Avalonia MAUIは、Avaloniaの上にあるクロスプラットフォームのMAUIランタイムで、今のところMITライセンス。Avaloniaには、AvaloniaUIっていう自分たちのUIもあって、これもクロスプラットフォームで無料だよ。

Xamarin.FormsからMAUIへの書き換えは、コミュニティの多くに悪い印象を与えたし、GNU/Linuxでそれを実現したAvaloniaには拍手を送りたいね。ちなみに、macOSではMAUIはCatalystをバックエンドとして使っていて、ネイティブのmacOS APIは使ってないんだ。あと、ミゲル・デ・イカザが最近は完全にSwiftエコシステムに移行して、GodotでiPad向けのゲーム開発を実現させたのも面白いよね。彼の古い.NETのアイデアをSwiftに移植することもしてるし。

ちなみに、macOSではMAUIはCatalystをバックエンドに使ってるんだ。ネイティブのmacOS APIじゃないよ。これってどういうこと?Mac Catalystはネイティブなんだ。iPhoneのUIKitとMacOSのAppKitの間の薄い橋渡しみたいなもので、実際にはAppleのSDK全体で唯一の二つの異なるフレームワークなんだよ。

ぱっと見た感じ、理由が見当たらないな。なぜ?MSですらMAUIを完全には信じてないみたいで、WPFを再評価してるようだし。AvaloniaがMSの仕事をするのは変な感じだね。彼ら自身の無料のWPF風のAvalonia UIツールキットは、すでにクロスデスクトップ開発の標準になってるし。「Microsoftがスポンサーしてくれた」っていうラインを探してたけど、仮にそうだとしても、なぜ彼らが失敗するプロジェクトに労力をかけるのか理解できない。Avaloniaは小さな会社だから、WaylandにAvalonia UIをポートするのは大変な仕事だと思うけど、MSの半ば放棄されたプロジェクトをポートするのがさらに混乱を招くよね。でも、彼らがバカじゃないことはわかってるから、何か見落としてるんだろうな。

でも、これらの人たちはバカじゃないから、何か見落としてると思う。マイクロソフトの政治。知ってる人、確認してほしいけど、たぶん…いろんな組織が権力を争ってて、間違った組織やイニシアティブが異なる製品に影響を与えてるのが見える。私には、既存のチームが relevancy を保とうと必死になってるのか、新しいチームや製品が不適切なところで影響を及ぼしてるのかは分からない。でも、WindowsチームはLinuxが traction を得るのを見たくないから、OSのシムやOfficeのネイティブファースト機能を妨げるために頑張るだろうね。Officeの組織はWindowsを超えて拡張したいけど、政治的な理由から、プラットフォームにロックインされない唯一のアドイン技術はJSだから、Azure/Cloudチームと提携してサードパーティがアドインを作れるようにしてる。このパートナーシップのせいで、スムーズなアドインストアを作る代わりに、出版社はEntraやパートナーセンターの複雑さを全部学ばなきゃいけない。UXや.NETの組織も似たような政治的戦いに巻き込まれてると思うけど、直接の収入や影響を与える製品がない。私の推測だけど、彼らはかつてWindowsチームにいたんじゃないかな。プラットフォームに依存しないイニシアティブ(良いこと)があるおかげで、デスクトップ開発者にとっては過去20年以上、ひどい状況だった(悪いこと)。

そもそもMSですらMauiを完全には信じてないよ。出典: 私が作った嘘。

MAUIとAvaloniaの間では、技術的な品質やコミュニティの反応に関してはAvaloniaが優れてるよ。AvaloniaにはMAUIが持ってる企業向けコンポーネントライブラリがないけど、その分、AvaloniaはこれらのライブラリやMAUIのチームを取り込もうとしてる。つまり、AvaloniaはMAUIのテリトリーに迫ってるってことだね。

.NET MAUIとAvaloniaのアクセシビリティブリッジは現在限られてるみたい。生産準備にはほど遠いってことだね。

アクセシビリティが必要な人なんてほとんどいないよね。現実的に考えよう、明らかに優先事項じゃない。優先すべきは、これを早く出すこと(MVPスタイル)だよ。

これは最初のプレビューリリースだよ。今は.NET 11のプレビューをターゲットにしてて、これが本番で使うことを意図してないってことを理解するのに役立つはず。これがプレビューから卒業するのは11月まで期待してないよ。アクセシビリティを整える時間はたっぷりあるからね。

いいね、MAUIが大好きだけど、Linuxのサポートがないのは残念だな。選択肢はAvaloniaとPhotinoだけ。私は.NETが好きだけど、GUIを作りたいときは他の言語に手を伸ばしちゃう。Microsoftは数年ごとに.NETのGUIスタックを再構築してるけど、Linuxサポートは全然追加しないんだよね。個人的には、できるだけ彼らの組み込みのものを使いたいんだけど。

個人的には、できるだけ彼らの組み込みのものを使いたいんだけど。なんで?AvaloniaはWPFの精神的な後継だけど、FOSSでクロスプラットフォームなんだよね。

MAUIはずっとLinuxにあったんだよ :-P https://mauikit.org/

これはdotnetのGUIフレームワークに詳しくない人にはちょっと分かりにくい記事だね。私の理解が正しければ、OSSプロジェクトのAvaloniaが、MicrosoftのMAUIライブラリにAvaloniaUIのバックエンドを上流に提供しているってことだよね?つまり、MAUIを使っている人は、以前はMAUIで利用できなかったプラットフォーム、主にLinuxをターゲットにするために統合されたAvaloniaUIバックエンドを使えるようになったってこと?もし何か間違ってたら教えてほしいな。

うん、正解だよ。Linuxターゲットの他に、AvaloniaはWASMターゲットも開放してるんだ。

タイトルを見て、「MAUIプロジェクトがLinuxに来る」ってのが変だなと思ったんだ。KDEプロジェクトのことを考えてたから、https://mauikit.org/。記事で発表されているのは別の何かみたいだね。

MAUIの大ファンなんだけど、もっと機能を追加するんじゃなくて、既存の問題を直してほしいな。オープンな問題が3,900件以上もあって、まだ増えてる。私も2023年からのバグが5件あって、全部確認済みなんだ :(