[WIP] .NET MAUI で Linux 向けにビルドしたい!

.NET MAUI とは
.NET MAUI は C# と XAML により GUI クロスプラットフォームアプリケーションを開発できるフレームワークです。
Linux 版
しかし、登場した当時は Linux 版はコミュニティーによる開発扱いで、現在はもはや Linux の存在は公式ドキュメントから削除されています。
現在のコミュニティーによる開発は、ほとんど停滞しており、その開発の情報はほとんど存在しません。
この資料の目的
この資料は .NET MAUI を Linux でなんとか利用できないか試み、情報をある程度まとめたものです。

参考になるページ
リポジトリ
-
dotnet/maui (本家)
-
jsuarezruiz/maui-linux (MAUI Linux のすべてが集まっているフォーク)
- Iytico/maui (MAUI Linux のメインの開発者のフォーク)
- nblockchain/Mali (MAUI のフォーク)
-
jsuarezruiz/maui-linux (MAUI Linux のすべてが集まっているフォーク)
下2つは、#66などで maui-linux にマージしています。このリポジトリの保持者である jsuarezruiz さんも今はあんまり MAUI Linux の開発に関与していないようです。
コミュニティー
本家の wiki でも強い要望があるにも関わらず、MS やコミュニティーによる開発はあまり進んでいません。(というか、興味がある人は多いけど、開発資料が少なすぎて途中参入が難しいんだとおもう)
(まじで情報がない)

ビルドとかの方針
これは指針であり、まだ成功はしていません。
A 案
Windows や macOS 上でのビルドと同様に行う (多分無理)
-> Linux 上では maui-android
以外使えないので、ビルドエラーが大量に出る
B 案
CI/CD を参考にする
-> gtk
のワークロードがインストールできない
C 案
CI/CD をそのまま動かす (一番希望がある)
-> GitHub Actions をローカルで動かせる act
でできるかも (現状若干エラーが出てるけど頑張れば行けるか?)
-> B 案と同じで、gtk
のワークロードのインストールができない
D 案
自作する (無理)
-> Qt (Qt.NET (古い)) で作るとか (ライセンス的 (GPL/LGPL) に微妙な気がする)
結論
とりあえず C 案で進めます。B 案でもほぼ同じな気がしますが… (資料作るときは B 案のほうが act
とか入れなくてもいいので、簡単になりそう)

雑に URL を貼る
- ビルドエラー
- maui-gtk の example (あんまり参考にならない)
- ビルド方法?
- 一番の情報源 (開発者情報)
- Development (A 案で試したやつ) + これ
- コンパイル方法 (CI/CD のまま。CI/CD は動いているっぽいけど、ローカルでやっても動かない謎 (B 案/C 案))
- Mali の CI/CD
- act
CI/CD はバージョンがかなり古いので、すべて v4 に上げるのを推奨するよ

ぶっちゃけ、あと gtk
のワークロードさえインストールできれば動きそうな雰囲気ある
あと、多分これ (GTK ランタイム) は必要かも
sudo apt install libgtk-3-dev
sudo apt install libgtk-3-0

一応 act
の使い方をちょっと書いておく
-
gh
(GitHub CLI) をインストール
# 参考: https://github.com/cli/cli/blob/trunk/docs/install_linux.md
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
-
act
をインストール
# 参考: https://nektosact.com/installation/gh.html
gh extension install https://github.com/nektos/gh-act
- Docker をインストール (よくわからないけど apt で全部入れた (?) 多分
docker.io
があればいいのかな?) - Docker 起動
sudo systemctl start docker
- ユーザーを
docker
グループに追加 (docker はスーパーユーザーが必要)
sudo usermod -aG docker $USER
newgrp docker # 変更を適応
- リポジトリをクローンして、その中に移動する
git clone <リポジトリの URL>
cd <クローンしたディレクトリ>
- 動かす
# 場所は、リポジトリのルートで実行 (ルートじゃなくても動くかも?)
gh act push
# または gh act pull_request かな?

ビルドできたら DLL 参照で動くと思う

# 参考: https://github.com/HavenDV/Gtk
curl -sSL https://raw.githubusercontent.com/HavenDV/Gtk/main/scripts/workload-install.sh | sudo bash
これやって、0.2.0はありません的なエラーが出たから、他の方法を試した。
(インストールできてないから dotnet workload list
には入らないけど、dotnet workload search
には入る)
# 参考: https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$uX3kcJ_AITkkFvqne3wkFJUL4_77o_FpfpGos6RphzI?via=matrix.org
git clone https://github.com/GtkSharp/GtkSharp.git
cd GtkSharp
sudo dotnet tool restore
sudo dotnet cake --BuildTarget=InstallWorkload
これやって、
# (これは元からインストールしてたっぽいから関係ない気がするけど)
sudo apt-get install libgtk-3-0
これやった後に、もう一度 sudo dotnet workload install gtk
したら、なぜかインストールできた
$ dotnet workload list
インストール済みワークロードの ID マニフェストのバージョン インストール ソース
-------------------------------------------------------
gtk 0.2.0/8.0.400 SDK 8.0.400
maui-android 8.0.82/8.0.100 SDK 8.0.400
wasi-experimental 8.0.8/8.0.100 SDK 8.0.400
`dotnet workload search` を使用して追加ワークロードを検出し、インストールします。

(なんか gtk
が入った後も、結構苦難している)

Mali は ZXing をビルドしてるっぽい (https://github.com/nblockchain/Mali/blob/master/.github/workflows/build-gtk.yml)
maui-linux は本体のビルド?
(https://github.com/jsuarezruiz/maui-linux/blob/main/.github/workflows/build-gtk.yml)

これ: https://github.com/lytico/maui/blob/6ef7f0c066808ea0d4142812ef4d956245e6a711/.github/workflows/build-gtk.yml#L22-L31
をやった後に Maui.Controls.Sample
(https://github.com/jsuarezruiz/maui-linux/pull/66 で利用されているサンプルプログラム) をビルドすると、Gtk あたりのエラーになる。
多分、これを解決すれば GUI が起動できる気がする。

色んな方法を試しすぎてて、再現性が低くなりそう (あとでちゃんとした資料を書くつもり (これが本来の目的だし))

そもそも VSCode で動作させたことがある人が過去に1人もいないかも
(メイン開発者たちは VS 使ってる (WSL かな?))

# 参考: https://github.com/jsuarezruiz/maui-linux/issues/92#issuecomment-2311842074
dotnet cake --target=dotnet-pack --workloads=global --gtk
dotnet new install ./artifacts/*.nupkg
を試して、
# (Nuget.config)
- <!-- <add key="local" value="artifacts" /> -->
+ <add key="local" value="artifacts" />
にした。
この後にビルドをすると、Gtk あたりのエラーは解消されたっぽい。
だけど、次のエラーが発生した。

System.Text.Json 8.0.0 が致命的な脆弱性があるというエラーが発生するので、バージョンを上げる。
# $(MicrosoftNETCoreAppRefPackageVersion) は8.0.0になってる
- <SystemTextJsonPackageVersion>$(MicrosoftNETCoreAppRefPackageVersion)</SystemTextJsonPackageVersion>
+ <SystemTextJsonPackageVersion>8.0.4</SystemTextJsonPackageVersion>
ついでに、ビルドターゲットの出力形式を変更する
- <!-- <OutputType Condition="$(TargetFramework.Contains('-'))">Exe</OutputType> -->
+ <OutputType>Exe</OutputType>

規定に関しても設定しなきゃいけないらしい
{
"profiles": {
"Windows Machine": {
"commandName": "MsixPackage",
"nativeDebugging": true
+ },
+ "Linux Machne": {
+ "commandName": "Project",
+ "nativeDebugging": true
}
}
}
あと、Main()
が必要らしい (Windows とかは /Platforms/Windows/App.xaml.cs
とかを参照にしてるっぽい)
public static void Main()
{
CreateMauiApp();
}

dotnet run --project src/Controls/samples/Controls.Sample/Maui.Controls.Sample.csproj --framework net8.0
まだエラーは続く…
Unhandled exception. Microsoft.Maui.ApplicationModel.NotImplementedInReferenceAssemblyException: This functionality is not implemented in the portable version of this assembly. You should reference the NuGet package from your main application project in order to reference the platform-specific implementation.
at Microsoft.Maui.ApplicationModel.AppInfoImplementation.get_PackagingModel() in /home/lemon73/Downloads/maui-linux/src/Essentials/src/AppInfo/AppInfo.netstandard.cs:line 19
at Microsoft.Maui.ApplicationModel.AppInfo.get_PackagingModel() in /home/lemon73/Downloads/maui-linux/src/Essentials/src/AppInfo/AppInfo.shared.cs:line 106
at Maui.Controls.Sample.MauiProgram.<>c.<CreateMauiApp>b__4_3(IEssentialsBuilder essentials) in /home/lemon73/Downloads/maui-linux/src/Controls/samples/Controls.Sample/MauiProgram.cs:line 191
at Microsoft.Maui.Hosting.EssentialsExtensions.EssentialsRegistration.RegisterEssentialsOptions(IEssentialsBuilder essentials) in /home/lemon73/Downloads/maui-linux/src/Core/src/Hosting/EssentialsMauiAppBuilderExtensions.cs:line 110
at Microsoft.Maui.Hosting.EssentialsExtensions.EssentialsInitializer.Initialize(IServiceProvider services) in /home/lemon73/Downloads/maui-linux/src/Core/src/Hosting/EssentialsMauiAppBuilderExtensions.cs:line 131
at Microsoft.Maui.MauiContextExtensions.InitializeAppServices(MauiApp mauiApp) in /home/lemon73/Downloads/maui-linux/src/Core/src/MauiContextExtensions.cs:line 84
at Microsoft.Maui.Hosting.MauiAppBuilder.Build() in /home/lemon73/Downloads/maui-linux/src/Core/src/Hosting/MauiAppBuilder.cs:line 159
at Maui.Controls.Sample.MauiProgram.CreateMauiApp() in /home/lemon73/Downloads/maui-linux/src/Controls/samples/Controls.Sample/MauiProgram.cs:line 304
at Maui.Controls.Sample.MauiProgram.Main() in /home/lemon73/Downloads/maui-linux/src/Controls/samples/Controls.Sample/MauiProgram.cs:line 48
Essentials
でエラーが発生してるっぽいけど…なにこれ…

よくわからないので、一旦 Microsoft.Maui-vscode.sln
のビルドを目指すことに。

iOS でエラーになるので、.sln
から削除する。

$ dotnet run --project Microsoft.Maui-vscode.sln
# (エラー文)
/usr/share/dotnet/sdk/8.0.401/NuGet.targets(174,5): error : 無効なフレームワーク識別子 ''。 [/home/lemon73/Downloads/maui-linux/Microsoft.Maui-vscode.sln]
ビルドに失敗しました。ビルド エラーを修正して、もう一度実行してください。

global.json
に
{
"sdk": {
"version": "8.0.401"
}
}
を追加するも、特に効果はなし。

調節したら、別のエラーになった…
結局よくわからない
困難を極める

ついに動きました。詳しくは後で書きます。
おそらく、src/Controls/samples/Controls.Sample.Gtk/Controls.Sample.Gtk.csproj
は動くので、
dotnet run --project src/Controls/samples/Controls.Sample.Gtk/Controls.Sample.Gtk.csproj --framework net8.0-gtk
にします。
(画像の調整の必要あり (後で書く予定))
でも、UI が崩壊しているね… (おそらく仕様)

UI が崩壊しているのは、自分の Linux (KDE neon) 内で規定している GTK のテーマカラーが影響しているんじゃないかと思い、テーマカラーを上書きする設定にしたら、予想通り直った。
GTK_THEME=Adwaita:light dotnet run --project src/Controls/samples/Controls.Sample.Gtk/Controls.Sample.Gtk.csproj --framework net8.0-gtk
(GTK_THEME=Adwaita:light
を追加)
これで、一通り開発できるわね。既存のアプリケーションへの適応はできなさそうだけど、あとで試してみるかも。(Essential
あたりがほぼ実装されてない気がする)

実装状況はこれ: https://github.com/nblockchain/Mali/blob/master/Status.md
(更新が3年前だから、もっと実装されているかも)

xaml
での記述は無理かも?だけど、C# ではなんとか記述できるかも
とりあえず、コードの簡略化を進めますよん

現状 Mali で作業しているけど、maui-linux のほうが新しいデータが入ってていいかも

なんか、maui-linux でビルドしようとすると Graphics とか Essential でエラーが出るねぇ
あと、ios のワークロードが必要的な (Visual Studio なら動かせる?)
やっぱり Mali で動かすことにしよう。(ちょっと古いけど)

ターゲット指定できる?(試してない)

とりあえず Nuget (追記: 一時的なアップロードだし、GitHub Packages のほうがいいか) にあげてみようかな。ライセンス (MIT License) 的には大丈夫だし。

というか GitHub で現在の状況を公開したほうがいいか…?
面倒だからやってないけど

とりあえず Nuget (追記: 一時的なアップロードだし、GitHub Packages のほうがいいか) にあげてみようかな。ライセンス (MIT License) 的には大丈夫だし。
ということで、とりあえず Core
, Controls.Core
, Compatibility
の3つを以下のように編集しました。
<PropertyGroup>
...
- <IsPackable>false</IsPackable>
+ <!-- <IsPackable>false</IsPackable> -->
...
+ <PackageId>Lemon73.Microsoft.Maui.Controls</PackageId>
+ <Version>0.0.1</Version>
+ <Authors>Lemon73 and others</Authors>
+ <Company>Lemon's Resting Area and others</Company>
</PropertyGroup>
で Nuget 形式にパックする
dotnet pack src/Compatibility/Core/src/Compatibility.csproj
dotnet pack src/Core/src/Core.csproj
dotnet pack src/Controls/src/Core/Controls.Core.csproj
それを GitHub Packages で頒布
dotnet nuget push "artifacts/*.nupkg" --api-key (API キー) --source "github" --skip-duplicate
で頒布したのが以下のもの (あとで消すと思います。なので将来的にリンク切れするかも)
https://github.com/users/Lemon73-Computing/packages/nuget/package/Lemon73.Microsoft.Maui.Controlshttps://github.com/users/Lemon73-Computing/packages/nuget/package/Lemon73.Microsoft.Maui.Controls.Compatibilityhttps://github.com/users/Lemon73-Computing/packages/nuget/package/Lemon73.Microsoft.Maui
(なぜかバージョン指定がうまく行っていない気がする)
参考

あとで、実際に利用できるか試してみます。
(なぜかバージョン指定がうまく行っていない気がする)
あと、なぜか .net6 になってるので、.net8 でビルドしたい

あとで、実際に利用できるか試してみます。
依存関係的にこの3つだけでは動かないっぽい (もしかしたら全部ビルドする必要あるかも)
あと、なぜか .net6 になってるので、.net8 でビルドしたい
これは eng/Version.props
を変えれば良さそう (-dev
がついているのはよくわからない)

やっぱり、Mali は基本的に .net6 ベースだから、.net8 ベースの maui-linux を動かしたいな

とりあえず Nuget (追記: 一時的なアップロードだし、GitHub Packages のほうがいいか) にあげてみようかな。
やっぱり、Mali は基本的に .net6 ベースだから、.net8 ベースの maui-linux を動かしたいな
Related: https://github.com/jsuarezruiz/maui-linux/issues/94
この Issue の完了に目標を変更しよう

とりあえず Nuget (追記: 一時的なアップロードだし、GitHub Packages のほうがいいか) にあげてみようかな。
やっぱり、Mali は基本的に .net6 ベースだから、.net8 ベースの maui-linux を動かしたいな
Related: https://github.com/jsuarezruiz/maui-linux/issues/94
この Issue の完了に目標を変更しよう
https://github.com/jsuarezruiz/maui-linux/blob/main-linux/eng/pipelines/common/pack.yml これ (Azure Devops 向け) を GitHub Actions 用に調節すれば Pack 部分ができる。あとは、我らが Alice Console (謎の自作構文) の https://github.com/AliceNovel/AliceConsole/blob/main/.github/workflows/nuget.yml を参考にして、Nuget.org にコミットごと+タグごとにリリースさせればいい。

現状 Mali で作業しているけど、maui-linux のほうが新しいデータが入ってていいかも
というか GitHub で現在の状況を公開したほうがいいか…?
面倒だからやってないけど
とりあえず Nuget (追記: 一時的なアップロードだし、GitHub Packages のほうがいいか) にあげてみようかな。
やっぱり、Mali は基本的に .net6 ベースだから、.net8 ベースの maui-linux を動かしたいな
Related: https://github.com/jsuarezruiz/maui-linux/issues/94
この Issue の完了に目標を変更しよう
https://github.com/jsuarezruiz/maui-linux/blob/main-linux/eng/pipelines/common/pack.yml これ (Azure Devops 向け) を GitHub Actions 用に調節すれば Pack 部分ができる。あとは、我らが Alice Console (謎の自作構文) の https://github.com/AliceNovel/AliceConsole/blob/main/.github/workflows/nuget.yml を参考にして、Nuget.org にコミットごと+タグごとにリリースさせればいい。
ってことで、maui-linux (Lemon73 Fork) ですわ。

やっぱこれか?
# install dotnet 6
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-6.0
# add keys
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# install gtksharp with dotnet 6 support
git clone https://github.com/trungnt2910/GtkSharp.git
cd GtkSharp
sudo dotnet tool restore
sudo dotnet cake --BuildTarget=InstallWorkload
# temporary hack for making the templates visible in dotnet new
sudo cp /usr/share/dotnet/template-packs/* /usr/share/dotnet/templates/6.0.5
# install gtk
sudo apt-get install libgtk-3-0
# test gtk template
cd ..
mkdir gtksharptest
cd gtksharptest
dotnet new gtk
dotnet run

これを GitHub Actions 上で試してみるか。
git clone https://github.com/trungnt2910/GtkSharp.git
dotnet cake --BuildTarget=InstallWorkload
PowerShell 上で動いているっぽいので。

これを GitHub Actions 上で試してみるか。
git clone https://github.com/trungnt2910/GtkSharp.git dotnet cake --BuildTarget=InstallWorkload
PowerShell 上で動いているっぽいので。
だめだー

GtkSharp 内で利用されている CI を参考にする?

面倒だけどこの方法を試してみるか

https://github.com/GtkSharp/GtkSharp/wiki/Installing-Gtk-on-Windows
面倒だけどこの方法を試してみるか
msys2 の挙動がよくわからないから一旦諦める。元の方法で試す

ていうか、実機で試してみるか?

実機で動かしてみた感じ
- https://github.com/jsuarezruiz/maui-linux/blob/main/.github/workflows/build-gtk.yml (Linux 向けを Windows 向けに調整して動かす) -> だめ
- https://github.com/GtkSharp/GtkSharp/blob/develop/.github/workflows/main.yml (ビルドして動かす) -> だめ
- https://www.nuget.org/packages/Gtk.Sdk (スクリプト) -> だめ
- https://github.com/GtkSharp/GtkSharp/wiki/Installing-Gtk-on-Windows (msys2 使う) -> 未検証
- (https://www.nuget.org/packages/Gtk4DotNet -> Linux 専用?)
つまり、今までやっていたことは、CI/CD だからエラーになっているというわけではなく、実機でもだめっぽい。
可能なら、GitHub Actions の Windows 上で WSL を動かしたい。それなら Linux のコマンドが使えるから、1の方法ができるはず。(とはいえ、インストールに時間がかかって、CI/CD がかなり遅くなりそうだから非推奨かな…)

可能なら、GitHub Actions の Windows 上で WSL を動かしたい。それなら Linux のコマンドが使えるから、1の方法ができるはず。(とはいえ、インストールに時間がかかって、CI/CD がかなり遅くなりそうだから非推奨かな…)
あるじゃん!!
明日試してみる。WSL でも無理そうなら素直に MSYS2 頑張るか

WSL 厳しそう。msys2 を実機でやって、ci にするか

Reddit でも聞いてみたけど、やはり WSL か Linux 系なら動かせる?そう

どうせ無理だと思うけど、gtk なしで一旦ビルドできるか試してみる?
最終目的はビルドして .nupkg
を nuget.org に上げることなので、その過程については特にこだわりはないし

何故かパスが通せない。から、逆に dotnet をコピーするか...?
でも、さすがに速度が遅くなりそう

何故かパスが通せない。
これだね

ちなみに、MAUI の開発で必須な Microsoft.Maui.Controls
と Microsoft.Maui.Controls.Compatibility
の依存関係は以下

現在の問題は、artifacts
の中に一つも *.nupkg
がないことですわね。
(ls
コマンドを使って見てみても、logs
しかない)

情報がなさすぎるわね

どうやら Windows でもすべてのターゲット向けのコンパイルは厳しいらしい
(.NET MAUI、クロスコンパイルが弱すぎる)
=> Linux でのビルドに切り替えてみる?
あと、dotnet build ./Microsoft.Maui.BuildTasks.slnf
が必要かもしれない。

あとで、実際に利用できるか試してみます。
依存関係的にこの3つだけでは動かないっぽい (もしかしたら全部ビルドする必要あるかも)
あと、なぜか .net6 になってるので、.net8 でビルドしたい
これは eng/Version.props を変えれば良さそう (-dev がついているのはよくわからない)
-dev
は Directory.Build.props
内の <PackageVersion>
で規定されているからっぽい。
(今の作業とは特に関係ないけど)

現在のエラー:
/usr/share/dotnet/sdk/8.0.200/Sdks/NuGet.Build.Tasks.Pack/buildCrossTargeting/NuGet.Build.Tasks.Pack.targets(110,5):
error MSB4018:
System.ArgumentException:
PackageVersion string specified '8.0.40-ci.net8.+sha.59194fc-azdo.' is invalid.
[/home/runner/work/maui-linux/maui-linux/src/Compatibility/Core/src/Compatibility.csproj]
8.0.40-ci.net8
に関しては GitInfo.txt
に記載がある。が、これがどこで利用されているのかがよくわからない。

現在のエラー:
/usr/share/dotnet/sdk/8.0.200/Sdks/NuGet.Build.Tasks.Pack/buildCrossTargeting/NuGet.Build.Tasks.Pack.targets(110,5): error MSB4018: System.ArgumentException: PackageVersion string specified '8.0.40-ci.net8.+sha.59194fc-azdo.' is invalid. [/home/runner/work/maui-linux/maui-linux/src/Compatibility/Core/src/Compatibility.csproj]
見つけた
$(BUILD_BUILDID)
が指定されていないため文字が挿入されず、バージョンの末尾が azdo.
のように .
で終わってエラーになっている。

これでほぼできた
リリース向けも追加
nuget.org へのデプロイは名前がかぶってるから多分できていない (API キーをいれて動かしてみたけど、403エラーなので)

あとは、maui-linux チームと連絡して調整ってかんじかな。
そういえば nuget package がちゃんと動くかわからないので、後で検証するか (github actions の artifacts にでも入れようかな?)

だめかも
わからなくなってきた

kztao 氏の CI が洗練されているので、それを upstream に merge してもらうといいかも

kztao 氏の CI が洗練されているので、それを upstream に merge してもらうといいかも
kztao さんの内容を cherry pick して、自分の変更と合流させた。(これのせいで若干 commit が分かりづらい気がする…)
とりあえず PR: https://github.com/kztao/maui-linux/pull/1
文章とかがめちゃくちゃだけど、ご愛嬌…
返答をお待ちいたしますわ。多分 kztao さんも CI/CD が正常に動いていなくて困っていると思うから、情報共有したいのです。

o, it's not ready for merge.
(https://github.com/kztao/maui-linux/pull/1#issuecomment-2457544682)

最近 .NET MAUI を Linux (WSL2) で動かす動画が公開されたようです: https://www.youtube.com/watch?v=s-clGkUbk84

@lemon73 (私) による PR (バージョンアップ)
Review を待ちます
リポジトリの保持者に Review (Approve) されたのに Merge されない謎

@kztao さんからの PR (Nuget.org に、ベータ版の Packages をアップロードする CI/CD の追加)
何故か Close する @kztao 氏

@kztao さんからの PR (Nuget.org に、ベータ版の Packages をアップロードする CI/CD の追加)
何故か Close する @kztao 氏
再 Open してくれた。
@knocte 氏が担当していると思って Close したっぽい
(なお、Review と Merge してくれない @jsuarezruiz 氏 (maui-linux のリポジトリ管理者))

まあ、Microsoft 社内では Linux への対応が現実的には考えられていないのかな… (少なくとも当時は)
現在はデスクトップにおける Linux のシェア率が 5% に迫ってきているように、再考の価値はありそうですが

実のところを言うと、ここ数日、maui-linux の開発が再燃しているっぽい (本流 (maui-linux) へのコミットや PR は殆どないが、Mali などの Fork にて)
GitHub 上
- @Lemon73 (私) が #94 (プレリリース・リリースを GitHub Actions を使って Nuget.org にリリースする) を対応しようとする
- なんか @kztao 氏がいい感じに途中までできているのを見つけ、上流 (maui-linux) に PR を作成してもらう
- (同時に @Lemon73 も Dependencies のバージョンアップの PR を作成する)
- @webwarrior-ws 氏による Mali への怒涛の PR が始まる (#28, #29, #31, #32)
(ちなみに、ここは結構ややこしいのですが、@webwarrior-ws 氏のリポジトリ は @Iytico 氏の maui の Fork です。が、@knocte 氏の所持する @nblockchain (organization) の Mali に PR を作成しています。つまり下の図のような感じです)
Element (ウェブチャット) 上
- @Lemon73 が maui-linux を WSL2 上で動かす動画を発見し、共有する
- @thomiel 氏の要請により @Iytico 氏が mauil-linux の可能性についての Disscussion を開設する: https://github.com/lytico/maui/discussions/291
- @thomiel 氏が Docker を利用し、開発環境を簡単に整えられる作業を行う (GtkSharp, maui)
という感じ。(GitHub の4と Element の2-3はほぼ同時期 (今から1週間前くらい) です)
どう変わるか…?

どう変わるか…?
何も変わりませんでした。
@jsuarezruiz 氏が Merge してくれません...

@lemon73 (私) による PR (バージョンアップ)
Review を待ちます
リポジトリの保持者に Review (Approve) されたのに Merge されない謎
ということで、私の Fork は Merge されました。
CI/CD に関しては、@jsuarezruiz 氏が Nuget の Key をリポジトリに設定するの待ちって感じですね。
(@jsuarezruiz 氏の対応がやや遅めで、全体的に時間がかかってる気がする。メンテナーが1人しかいないから仕方ないけど、結構困るね)

@lemon73 (私) による PR (バージョンアップ)
Review を待ちます
リポジトリの保持者に Review (Approve) されたのに Merge されない謎
ということで、私の Fork は Merge されました。
CI/CD に関しては、@jsuarezruiz 氏が Nuget の Key をリポジトリに設定するの待ちって感じですね。
(@jsuarezruiz 氏の対応がやや遅めで、全体的に時間がかかってる気がする。メンテナーが1人しかいないから仕方ないけど、結構困るね)
現状は、何待ち?状態。多分 Review 待ちだけど、うーん…
誰もコメントしていないし、年末で忙しいから取り組めていないだけかな?

とりあえず、機能実装に関して検討を行います。
現状簡単そう (私の未熟な技術でもギリギリ開発できそう) なのは Clipboad の実装。
あとは、ListView とか TableView、RadioButton などは必要そう。
Map とかは優先度は低めかな

とりあえず、MAUI のテンプレート (dotnet new maui
) が動かせるのを優先にする?
そうだと、必要そうなのは以下
- ContentPage
- ScrollView (#75: Implement ListView)
- VerticalStackLayout (#68: refactor layout system measuring)
- Image (#69: fix image sizing)
- Label (#73: fix Label sizing)
- Button
ContentPage 以外は基本的に実装が終わってそう? (サイズ調整などは必要そうだけど)

ContentPage 以外は基本的に実装が終わってそう? (サイズ調整などは必要そうだけど)
ContentPage なくね?

これ?

そもそも Page 系は実装が難しそう

とりあえず、現状ビルドすると "net7.0-android
は EOS (End of Support) です"的な内容が表示されるので、プロジェクト全体を .NET 8 の Latest にアップグレードする

error NU1903: Warning As Error: Package 'System.Net.Http' 4.3.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-7jgj-8wvc-jh57
System.Net.Http
に脆弱性が見つかっており、バージョンアップする必要があるけど、どこでバージョン指定しているのかわからない…
System.Net.Http
SystemNetHttp
4.3.0
で全文検索したけど、それらしいのはなさそう

ちなみに、この Merge がうまく行くと、ベース (本流 .NET MAUI) バージョンが .NET MAUI (for Linux) 界隈で一番最新になる (どうでもいい)
Mali とかは未だに .NET6.0 ベースなので…

System.Net.Http に脆弱性が見つかっており、バージョンアップする必要があるけど、どこでバージョン指定しているのかわからない…
System.Net.Http SystemNetHttp 4.3.0 で全文検索したけど、それらしいのはなさそう
っていうか、これは本流では変更されていないのか

一旦、便利なページをまとめる
Useful Resources
Repositories
- .NET MAUI (本家): https://github.com/dotnet/maui
- maui-linux: https://github.com/jsuarezruiz/maui-linux
- (maui-linux/lemon73): https://github.com/Lemon73-Computing/maui-linux
- Mali: https://github.com/nblockchain/Mali
- 実装/GtkSharp: https://github.com/GtkSharp/GtkSharp/tree/develop/Source/Libs
- 参考/Eto: https://github.com/picoe/Eto
Docs
- MSLearn (公式): https://learn.microsoft.com/dotnet/maui/what-is-maui
- GTK API Docs (公式): https://www.gtk.org/docs/apis/
Docker
- maui-linux 向け: https://github.com/Thomas-Mielke-Software/maui-docker
- GtkSharp 向け: https://github.com/Thomas-Mielke-Software/GtkSharp-Docker
Others

@lemon73 (私) による PR (バージョンアップ)
Review を待ちます
リポジトリの保持者に Review (Approve) されたのに Merge されない謎
ということで、私の Fork は Merge されました。
CI/CD に関しては、@jsuarezruiz 氏が Nuget の Key をリポジトリに設定するの待ちって感じですね。
(@jsuarezruiz 氏の対応がやや遅めで、全体的に時間がかかってる気がする。メンテナーが1人しかいないから仕方ないけど、結構困るね)
現状は、何待ち?状態。多分 Review 待ちだけど、うーん…
誰もコメントしていないし、年末で忙しいから取り組めていないだけかな?
された 🎉

Thomas 氏が作成した Docker で作業を進めてみた。
けど、Gtk の表示エラーになるっぽい…
これが解決できれば開発できそう

Thomas 氏が作成した Docker で作業を進めてみた。
けど、Gtk の表示エラーになるっぽい…
これが解決できれば開発できそう
いろいろ試して、1度成功したけど、再現できなかった…
どうしたら動くんだろうか

WSLg のお陰で Windows11 + WSL2 では問題なく動くということはわかっているけど、Docker を使うと動かなくなってしまう。(Docker 外で動かそうとしたけど、それはやや面倒そうな)

Nix とかで自作環境作るほうがいいかな?

開発環境を整えること自体が難関すぎる

Nix とかで自作環境作るほうがいいかな?
とりあえず、maui-linux の CI/CD と Docker を参考に、Nix flake が作れないか試している。
経過段階 (workload の 'gtk' がダウンロードできていない):
{
description = "MAUI Linux with GtkSharp and .NET 8 SDK";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; };
in {
devShells.${system}.default = pkgs.mkShell {
name = "maui-linux-dotnet-sdk";
buildInputs = [
pkgs.git
pkgs.dotnet-sdk_8
];
shellHook = ''
# Set environment variables for .NET SDK
export GtkSharpVersion=3.24.24.117-develop
export DotnetVersion=8.0.200
# export DOTNET_ROOT=/usr/share/dotnet
export DOTNET_ROOT=$(which dotnet)
export DOTNET_DIR=/nix/store/iggzq5cbp9dxzihm2sg6jsg46044v8pr-dotnet-sdk-wrapped-8.0.407/share/dotnet
# export WORKLOAD_MANIFEST_DIR=$DOTNET_ROOT/sdk-manifests/$DotnetVersion/gtksharp.net.sdk.gtk
export WORKLOAD_MANIFEST_DIR=$DOTNET_DIR/sdk-manifests/8.0.100/gtksharp.net.sdk.gtk
# Clone MAUI Linux repository
echo "## Clone maui-linux repo ##"
if [ ! -d "$HOME/maui-linux" ]; then
git clone https://github.com/jsuarezruiz/maui-linux.git $HOME/maui-linux
fi
cd $HOME/maui-linux
sed -i 's/_IncludeAndroid>true/_IncludeAndroid>/g' Directory.Build.Override.props
echo "## Install Gtk Workload ##"
dotnet nuget add source --name nuget.org "https://api.nuget.org/v3/index.json"
wget https://www.nuget.org/api/v2/package/gtksharp.net.sdk.gtk.manifest-$DotnetVersion/$GtkSharpVersion -O gtksharp.net.sdk.gtk.manifest-$DotnetVersion.nupkg
sudo mkdir -p $WORKLOAD_MANIFEST_DIR
sudo apt install unzip
sudo unzip -j gtksharp.net.sdk.gtk.manifest-$DotnetVersion.nupkg "data/*" -d $WORKLOAD_MANIFEST_DIR/
sudo rm gtksharp.net.sdk.gtk.manifest-$DotnetVersion.nupkg
sudo chmod 764 $WORKLOAD_MANIFEST_DIR/*
dotnet workload search
sudo dotnet workload install gtk --skip-manifest-update
# dotnet build Microsoft.Maui.BuildTasks.slnf
# dotnet build Microsoft.Maui.Gtk.slnf
'';
};
};
}

Nix とかで自作環境作るほうがいいかな?
とりあえず、maui-linux の CI/CD と Docker を参考に、Nix flake が作れないか試している。
とりあえず、進捗だけ
GtkSharp.Workload と https://youtu.be/s-clGkUbk84 を参考に、Nix を作成。
しかし、そこに待ち受けていたのは、昔見た数々のエラーだった!!
{
description = "MAUI Linux with GtkSharp and .NET 8 SDK";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; };
in {
devShells.${system}.default = pkgs.mkShell {
name = "maui-linux-dotnet-sdk";
buildInputs = [
pkgs.git
pkgs.dotnet-sdk_8
pkgs.gtk3
];
shellHook = ''
# Set environment variables for .NET SDK
# export DOTNET_ROOT=/usr/share/dotnet
# export DOTNET_ROOT=$(which dotnet)
# export DOTNET_DIR=/nix/store/iggzq5cbp9dxzihm2sg6jsg46044v8pr-dotnet-sdk-wrapped-8.0.407/share/dotnet
export DOTNET_DIR=$(dirname $(dirname $(which dotnet)))/share/dotnet
echo "## Install Gtk Workload ##"
curl -sSL https://raw.githubusercontent.com/HavenDV/Gtk/main/scripts/workload-install.sh | sudo bash /dev/stdin -d $DOTNET_DIR
dotnet workload list
# echo "## Install GtkSharp ##"
# if [ ! -d "$HOME/GtkSharp" ]; then
# git clone https://github.com/GtkSharp/GtkSharp.git $HOME/GtkSharp
# fi
# cd $HOME/GtkSharp
# sed -i 's/"8.0.100", "8.0.200"}/"8.0.100", "8.0.200", "8.0.300", "8.0.400"}/g' build.cake # add missing version bands
# dotnet tool restore
# dotnet cake --verbosity=diagnostic --BuildTarget=InstallWorkload
# apt update
apt install -y libgtk-3-dev libgtksourceview-4-0
# dotnet new install GtkSharp.Template.CSharp
echo "## Clone maui-linux repo ##"
if [ ! -d "$HOME/maui-linux" ]; then
git clone https://github.com/jsuarezruiz/maui-linux.git $HOME/maui-linux
fi
cd $HOME/maui-linux
sed -i 's/_IncludeAndroid>true/_IncludeAndroid>/g' Directory.Build.Override.props
# optimize for Gtk
sed -i 's/IncludeGtkTargetFrameworks Condition="'$(DotNetGtkWorkloadIsInstalled)' == 'true'">/IncludeGtkTargetFrameworks">/g' Directory.Build.props
sed -i 's/TreatWarningsAsErrors>true/TreatWarningsAsErrors>false/g' Directory.Build.props
sed -i '/<\/ItemGroup>/N; /<\/ItemGroup>\n <ItemGroup Condition=.*TargetFramework.Contains(.*>/d' src/Graphics/src/Graphics.Gtk/Graphics.Gtk.csproj
# build maui-linux
dotnet build Microsoft.Maui.BuildTasks.slnf
dotnet build Microsoft.Maui.Gtk.slnf
# cd src/Controls/samples/Controls.Sample
# dotnet run --framework net8.0-gtk
'';
};
};
}
# 実行
nix develop
# エラー (抜粋)
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Microsoft.Common.CurrentVersion.targets(2176,5): warning : The referenced project '../../../Controls/src/Core/Controls.SourceGen.csproj' does not exist. [/home/lemon73/maui-linux/src/Controls/samples/Controls.Sample/Maui.Controls.Sample.csproj::TargetFramework=net8.0]
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(215,5): error NETSDK1135: SupportedOSPlatformVersion 3.24 cannot be higher than TargetPlatformVersion 1.0. [/home/lemon73/maui-linux/src/BlazorWebView/src/Gtk/Microsoft.AspNetCore.Components.WebView.Gtk.csproj::TargetFramework=net8.0-gtk]
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(215,5): error NETSDK1135: SupportedOSPlatformVersion 3.24 cannot be higher than TargetPlatformVersion 1.0. [/home/lemon73/maui-linux/src/BlazorWebView/samples/BlazorGtkApp/BlazorGtkApp.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Clipboard/Clipboard.Gtk.cs(11,19): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(42,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(58,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(71,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(73,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(75,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(79,29): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(103,40): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(110,41): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(289,83): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(298,84): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
1 Warning(s)
13 Error(s)
Time Elapsed 00:00:13.70

あと、この状態でビルドすると、以下のようになる
cd src/Controls/samples/Controls.Sample
dotnet run --framework net8.0-gtk
# エラー
The launch profile "(Default)" could not be applied.
A usable launch profile could not be located.
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(42,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(58,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(71,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(73,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(75,17): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/DeviceDisplay/DeviceDisplay.Gtk.cs(79,29): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(103,40): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Clipboard/Clipboard.Gtk.cs(11,19): error CS0246: The type or namespace name 'Gdk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(110,41): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(289,83): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Essentials/src/Screenshot/Screenshot.shared.cs(298,84): error CS0246: The type or namespace name 'Gtk' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Essentials/src/Essentials.csproj::TargetFramework=net8.0-gtk]
The build failed. Fix the build errors and run again.

問題がありそうな Essensial
を置換しても変化はない、か。
sed -i 's/Include="..\..\..\Essentials\src\Essentials.csproj"/Include="GtkSharp.Maui.Essentials" Version="8.0.40--date20250228-1034.git-cd7b73d"/g' src/Controls/samples/Controls.Sample/Maui.Controls.Sample.csproj

# add GtkSharp package
cd $HOME/maui-linux/src/Essentials/src
dotnet add package GtkSharp
cd $HOME/maui-linux/src/Core/src # こっちは特に関係ないかも
dotnet add package GtkSharp # こっちは特に関係ないかも
を追加することによって、エラーを減らすことに成功した。(まだ動かないが)
# エラー (抜粋)
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Microsoft.Common.CurrentVersion.targets(2176,5): warning : The referenced project '../../../Controls/src/Core/Controls.SourceGen.csproj' does not exist. [/home/lemon73/maui-linux/src/Controls/samples/Controls.Sample/Maui.Controls.Sample.csproj::TargetFramework=net8.0]
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(215,5): error NETSDK1135: SupportedOSPlatformVersion 3.24 cannot be higher than TargetPlatformVersion 1.0. [/home/lemon73/maui-linux/src/BlazorWebView/samples/BlazorGtkApp/BlazorGtkApp.csproj::TargetFramework=net8.0-gtk]
/nix/store/6gp2czd71cb3n3d2bp7j6j9acifh4hx2-dotnet-sdk-8.0.407/share/dotnet/sdk/8.0.407/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(215,5): error NETSDK1135: SupportedOSPlatformVersion 3.24 cannot be higher than TargetPlatformVersion 1.0. [/home/lemon73/maui-linux/src/BlazorWebView/src/Gtk/Microsoft.AspNetCore.Components.WebView.Gtk.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Core/src/Platform/Gtk/WebviewExtensions.cs(2,7): error CS0246: The type or namespace name 'WebKit' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Core/src/Core.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Core/src/Platform/Gtk/MauiWebView.cs(5,28): error CS0246: The type or namespace name 'WebKit' could not be found (are you missing a using directive or an assembly reference?) [/home/lemon73/maui-linux/src/Core/src/Core.csproj::TargetFramework=net8.0-gtk]
/home/lemon73/maui-linux/src/Core/src/Handlers/WebView/WebViewHandler.cs(23,23): error CS0311: The type 'Microsoft.Maui.Platform.MauiWebView' cannot be used as type parameter 'TPlatformView' in the generic type or method 'ViewHandler<TVirtualView, TPlatformView>'. There is no implicit reference conversion from 'Microsoft.Maui.Platform.MauiWebView' to 'Gtk.Widget'. [/home/lemon73/maui-linux/src/Core/src/Core.csproj::TargetFramework=net8.0-gtk]
1 Warning(s)
5 Error(s)
Time Elapsed 00:00:10.30
なお、エラーの上3つはどうでも良い (目的である src/Controls/samples/Controls.Sample.Gtk/Controls.Sample.Gtk.csproj
のビルド時に影響がない) ため、とりあえず無視する。
6番目のは、4、5番目のエラーによって、連鎖的に起こっている。つまり、4、5番のエラー解決を行う必要がある。

というか using WebKit;
って、Apple の webkit のことだよね…?
どういうこと?
(100コメント目 🎉)

Nix のほうは、なんか違う方向に向かっていっている気がするので、一旦 Docker に戻るか
(Nix のほうは、置換をしまくっているけど、本来は置換せずに動くはずなので、間違えていると思う)

なお、Docker も GUI を動かすことができないという

行けそうかも!!

WSLg の機能で画面を表示することができないから、昔ながらの X Server (X11) を使ってみることにした。(一応、一昨日か昨日から試しているが、再度試してみることに)
- VcXsrc を Windows 側で起動
- Wi-Fi の IP アドレスを取得 (
設定
のネットワークとインターネット
>Wi-Fi
><自分がつなげている Wi-Fi>
のIpv4 アドレス
(例:192.168.11.7
)) - Docker 内で
export DISPLAY=<IP アドレス>:0.0 にする (例:
192.168.11.7:0.0)
(今回は sudo docker run -it -e DISPLAY=192.168.11.7:0.0 --rm maui-env bash
を使った)
現状、GUI が表示できたというわけではないが、エラーが変わっているので、ほぼ成功だと思う。
# エラー
warn: Microsoft.Maui.FileImageSourceService[0]
Unable to load image file 'header_background.png'.
System.InvalidOperationException: Unable to load image file.
at Microsoft.Maui.FileImageSourceService.GetImageAsync(IFileImageSource imageSource, Single scale, CancellationToken cancellationToken) in /mauienv/maui-linux/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Gtk.cs:line 63
OnCreated

VcXsrc の起動設定は -wsl -nc
を追加しているけど、必要かはわからない

いや、だめだ。
# エラー warn: Microsoft.Maui.FileImageSourceService[0] Unable to load image file 'header_background.png'. System.InvalidOperationException: Unable to load image file. at Microsoft.Maui.FileImageSourceService.GetImageAsync(IFileImageSource imageSource, Single scale, CancellationToken cancellationToken) in /mauienv/maui-linux/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Gtk.cs:line 63 OnCreated
このエラー自体は、SimpleSampleApp/ExamplePage.cs
内の .png
の部分3つをコメントアウトすることで解決できた。
だが、肝心のアプリケーション表示に関しては、VcXsrc のウィンドウが消えただけで、アプリケーションの表示はできていない…
エラーが出ていないが、もはや振り出しだな。

難しすぎるので、一旦中断。またやる気が出たらやります。(というか、確か Linux 実機では成功していなかったっけ? Windows11 + WSL2 + Docker の、特に Docker のせいな気がするけど…)

うわまじか!!

Docker のバージョンを上げたら (入れ直したら) すぐに動くようになったんですけどwww

参考: https://www.linux.digibeatrix.com/archives/1922
- 既存の Docker (docker.io) を削除
sudo apt remove docker docker-engine docker.io containerd runc
- Docker の公式リポジトリ (GPG キー) を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 新しく Docker をインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
- (バージョンの確認)
docker --version
- 起動と常時有効化
sudo systemctl start docker
sudo systemctl enable docker
- (非 root ユーザーで Docker を使用可能にする)
sudo usermod -aG docker $USER
- maui-docker のリポジトリを Git でクローン
(略) - Docker でビルド
sudo docker build -t maui-env .
- Docker 環境に入る
sudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
- Docker 内で maui-linux をビルド
cd /mauienv/maui-linux/src/Controls/samples/Controls.Sample
dotnet run --framework net8.0-gtk
- 表示される
(アプリケーション画面の一部しか表示されていないので、アプリケーション画面のサイズを大きくする)

ちなみに、やり直したら、できなくなりました (???)

エラー内容
今までのエラーと同じです。
dotnet run --framework net8.0-gtk
The launch profile "(Default)" could not be applied.
A usable launch profile could not be located.
/usr/share/dotnet/sdk/8.0.407/Microsoft.Common.CurrentVersion.targets(2176,5): warning : The referenced project '../../../Controls/src/Core/Controls.SourceGen.csproj' does not exist. [/mauienv/maui-linux/src/Controls/samples/Controls.Sample/Maui.Controls.Sample.csproj::TargetFramework=net8.0-gtk]
(Maui.Controls.Sample:753): Gtk-WARNING **: 06:08:01.745: cannot open display: :0
上の内容は警告なので、一番重要なのは一番下の cannot open display
です。
問題解決の糸口
昨日は、成功しているはずなので、昨日の再現をすればよいはずです。
昨日やっていたことを .bash_history
から読み取ったところ、以下の内容でした。
ll /tmp/.X11-unix/
x11docker x11docker/fvwm xterm &
ls
x11docker -h
sudo apt install nxagent xpra xephyr
sudo apt install nxagent
clear
x11docker x11docker/xfce xeyes &
sudo x11docker x11docker/fvwm xterm &
docker pull x11docker/fvwm
sudo docker pull x11docker/fvwm
sudo x11docker x11docker/fvwm xterm &
sudo apt install xdpyinfo
clear
x11docker --desktop --size 320x240 x11docker/lxde
sudo x11docker --desktop --size 320x240 x11docker/lxde
sudo apt install xinit
sudo x11docker --desktop --size 320x240 x11docker/lxde
sudo x11docker pull x11docker/lxde
sudo docker pull x11docker/lxde
sudo x11docker --desktop --size 320x240 x11docker/lxde
sudo x11docker 320x240 x11docker/lxde xedit &
sudo x11docker 320x240 x11docker/lxde xedit &
sudo x11docker 320x240 x11docker/lxde xedit
sudo x11docker --desktop --size 320x240 x11docker/lxde
clear
sudo x11docker x11docker/fvwm xterm
sudo x11docker x11docker/lxde xterm
sudo x11docker x11docker/xserver xterm
sudo x11docker x11docker/lxde -d xterm
sudo x11docker x11docker/lxde -d xterm &
sudo x11docker --desktop x11docker/lxde
ls
clear
apt list | grep "docker"
sudo apt remove docker.io docker-compose
apt list | grep "docker"
sudo apt autoremove
apt list | grep "docker"
clear
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt full-upgrade
sudo apt install docker-ce ocker-ce-cli containerd.io
sudo apt install docker-ce docker-ce-cli containerd.io
docker --version
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
cd /mnt/d/Repo/maui-docker/
ls
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
sudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
exit
jobs
sudo kill 1
昨日は、x11docker
を利用して Docker の GUI ができないか試していましたが、無理そうで Docker の入れ直しをして、そちらで成功したという感じです。
コンソールを exit
できず、そのさい jobs
を確認したところ、x11docker
のタスクが起動したままだったのを記憶しています。ここから推察するに、昨日成功していたのは、x11docker
で X Window を Docker 向けに起動できていたから、ということになりますね。
ということで、再度起動を試してみます。

ここから推察するに、昨日成功していたのは、
x11docker
で X Window を Docker 向けに起動できていたから、ということになりますね。
これっぽいな

関係ないところを切り取ると、こんな感じかな:
ll /tmp/.X11-unix/
sudo apt install nxagent
sudo docker pull x11docker/fvwm
sudo x11docker x11docker/fvwm xterm &
sudo apt install xinit
sudo docker pull x11docker/lxde
sudo x11docker --desktop --size 320x240 x11docker/lxde
sudo x11docker x11docker/fvwm xterm
sudo x11docker x11docker/lxde xterm
sudo x11docker x11docker/lxde -d xterm
sudo x11docker x11docker/lxde -d xterm &
sudo x11docker --desktop x11docker/lxde

できない…
挙動が不安定すぎるねぇ

Docker 使わずに普通の環境でやるか (WSL)

無理なんですけど (というか、実機でだめだったから Docker を使っていたことを忘れていた)

WSL では Docker on Ubuntu 24.04 (WSL2) on Windows11 とかいう複雑な構成になる (おそらく、これが原因でディスプレイが利用できていない) から、実機 Linux 使おうかな。
(実機 Linux だと問題が起こらないといいけど…)
(まあ、なぜ最初から実機を使わなかったかというと、引っ越しで KDE neon のパソコンが床に有り、ノートパソコンの Windows しか使えなかったという (つまり面倒だっただけ))

実機では、docker run
の前に xhost +
を実行すると成功しました。

結論
参考: https://www.linux.digibeatrix.com/archives/1922
(実機を利用する)
- 既存の Docker (docker.io) を削除
sudo apt remove docker docker-engine docker.io containerd runc
- Docker の公式リポジトリ (GPG キー) を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 新しく Docker をインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
- (バージョンの確認)
docker --version
- 起動と常時有効化
sudo systemctl start docker
sudo systemctl enable docker
- (非 root ユーザーで Docker を使用可能にする)
sudo usermod -aG docker $USER
- maui-docker のリポジトリを Git でクローン
(略) - Docker でビルド
sudo docker build -t maui-env .
- xhost に権限を付与する
xhost +
- Docker 環境に入る
sudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
- Docker 内で maui-linux をビルド
cd /mauienv/maui-linux/src/Controls/samples/Controls.Sample
dotnet run --framework net8.0-gtk
- 表示される
(アプリケーション画面の一部しか表示されていないので、アプリケーション画面のサイズを大きくする)

(↑ちなみに、WSL で xhost +
を実行しましたが、使えませんでした)

なんか、実機 Linux 内の Docker の調子が悪いので、対処方を表示します:
エラー調査
sudo docker run (略)
# エラー
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run 'docker run --help' for more information
詳細
sudo dockerd
# エラー
INFO[2025-04-11T18:05:14.026075204+09:00] Starting up
failed to start daemon, ensure docker is not running or delete /var/run/docker.pid: process with PID 119907 is still running
対処法
sudo rm /var/run/docker.pid /var/run/docker.sock
systemctl restart docker

?????
(Maui.Controls.Sample:388): Gtk-WARNING **: 09:12:19.548: cannot open display: :1
実機でも使えなくなったんですけど???

だめですわね

RedHat 大好き♡

Docker の代わりに podman 使ったらできた!!

Root 権限が不要なことや、デーモンが必要ないことが関係してそう (詳しくはよくわからないけど)

最終形:
# Podman をインストール
sudo apt install podman
# 任意
# sudo apt install podman-compose podman-docker
# ビルド
sudo podman build -t maui-env .
# 必要ないかも
# xhost +
# 実行
sudo podman run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
# Podman 内
cd /mauienv/maui-linux/src/Controls/samples/Controls.Sample
dotnet run --framework net8.0-gtk

開発の意義について
再確認ですが、最終的な目標としては"既存の MAUI のコードから Linux 向けにビルドできるようにする"ことです。
(望み薄ですが、可能であれば maui-linux を dotnet/maui に Merge してほしいです)
ベースについて
現在の maui-linux は GtkSharp (Gtk3) ベースです。可能であれば最新版である Gtk4 (Gir.core など) を利用すべきですが、換装に相当の時間がかかると思うので、そのまま開発を進めたほうが良いと思います。(そもそも Gir.core ベースにするには、Gir.core の workload を作成しなければならない (dotnet workload の作成方法についての公式ドキュメントはほぼない))
全く違うものをベースにするという案も挙げておきます。Skia とか Slik.NET とかでしょうか。または Qt とかでしょうか。それぞれを評価すると、Skia は現在の dotnet/maui でも Graphics で利用されています。また、Qt はほぼ C# バインディングがない (Qt.Net とかはメンテナンスがされていない) ので、厳しそうです。Slik.NET は描画がほとんどで、コントロールがないので、Gtk の代替とはならないでしょう。(どちらかというと、Skia の代替?)
とか考えると、妥協で GtkSharp で開発し続けるのが最短でしょうね。将来性を考えるなら Gir.core ですが、maui-linux の登場からあまりに時間が経っているので、そろそろ使えるようにしたいと思っていまして。

Docker の代わりに podman 使ったらできた!!
最終形:
# Podman をインストール sudo apt install podman # 任意 # sudo apt install podman-compose podman-docker
# ビルド sudo podman build -t maui-env . # 必要ないかも # xhost + # 実行 sudo podman run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it maui-env bash
# Podman 内 cd /mauienv/maui-linux/src/Controls/samples/Controls.Sample dotnet run --framework net8.0-gtk
ってことで、今までの成果を作成: maui-podman (maui-docker の fork)

VSCode で開発するとき:
# Podman は Docker とは違い、標準では Socket が起動しないので、手動起動させる
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock
podman run -dit --name maui-env maui-env
podman exec -it maui-env bash
# (なんか DISPLAY とかの設定しなくても動いた)
VSCode
-
F1
でコマンドパレットを開く Dev Containers: Attach to Running Container...
-
maui-env
を選択
(Dev Container を使ったら、Podman ではなく、純正 Docker でも行けるかも)

現在の maui-linux は GtkSharp (Gtk3) ベースです。可能であれば最新版である Gtk4 (Gir.core など) を利用すべきですが、換装に相当の時間がかかると思うので、そのまま開発を進めたほうが良いと思います。(そもそも Gir.core ベースにするには、Gir.core の workload を作成しなければならない (dotnet workload の作成方法についての公式ドキュメントはほぼない))
(中略)
とか考えると、妥協で GtkSharp で開発し続けるのが最短でしょうね。将来性を考えるなら Gir.core ですが、maui-linux の登場からあまりに時間が経っているので、そろそろ使えるようにしたいと思っていまして。
- maui-linux の実装をしようとする
- gtk3 の実装を見てみる
- GtkSharp では実装が足りていない
- GtkSharp の最近の PR は小規模なものでも Merge されていない (つまり、開発が活発でないどころか、不可能)
- 無理
なので、gir.core でワークロードから作り直しですね。(マジか...)
(ちなみに、gir.core は半機械的に開発されているらしいので、実装がほとんどできているらしい)

gir.core でワークロード無しで開発ってできるか…?
Refs:

唯一の救いが、Eto.Forms の GtkSharp 実装が参考になりそうなことか...

Maui のテンプレートに Gtk を導入することは可能なのか試してみる。
基本は dotnet new maui
のテンプレートと同じ。.csproj
と Platforms/Gtk/Main.cs
(の代わりとして Program.cs
) のみ以下のように変更・追加。
<!-- MauiTemplate.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-gtk</TargetFrameworks>
<!--
<TargetFrameworks>net9.0-android;net9.0-ios;net9.0-maccatalyst</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net9.0-windows10.0.19041.0</TargetFrameworks>
-->
<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
<!-- <TargetFrameworks>$(TargetFrameworks);net9.0-tizen</TargetFrameworks> -->
<!-- Note for MacCatalyst:
The default runtime is maccatalyst-x64, except in Release config, in which case the default is maccatalyst-x64;maccatalyst-arm64.
When specifying both architectures, use the plural <RuntimeIdentifiers> instead of the singular <RuntimeIdentifier>.
The Mac App Store will NOT accept apps with ONLY maccatalyst-arm64 indicated;
either BOTH runtimes must be indicated or ONLY macatalyst-x64. -->
<!-- For example: <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> -->
<OutputType>Exe</OutputType>
<RootNamespace>MauiTemplate</RootNamespace>
<UseMaui>true</UseMaui>
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- Display name -->
<ApplicationTitle>MauiTemplate</ApplicationTitle>
<!-- App Identifier -->
<ApplicationId>com.companyname.mauitemplate</ApplicationId>
<!-- Versions -->
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
<WindowsPackageType>None</WindowsPackageType>
<!--
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
-->
</PropertyGroup>
<ItemGroup>
<!-- App Icon -->
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />
<!-- Splash Screen -->
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />
<!-- Images -->
<MauiImage Include="Resources\Images\*" />
<MauiImage Update="Resources\Images\dotnet_bot.png" Resize="True" BaseSize="300,185" />
<!-- Custom Fonts -->
<MauiFont Include="Resources\Fonts\*" />
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="GtkSharp" Version="3.24.24.117-develop" />
<PackageReference Include="GtkSharp.Maui.Resizetizer" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Core" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Graphics" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Essentials" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Controls.Compatibility" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Controls.Xaml" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Controls.Core" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Graphics.Skia" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Graphics.Gtk" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Graphics.Text.Markdig" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.Controls.Build.Tasks" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.AspNetCore.Components.WebView" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<PackageReference Include="GtkSharp.Maui.AspNetCore.Components.WebView.Gtk" Version="8.0.40--date20250228-1034.git-cd7b73d" />
<!--
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
-->
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.0" />
</ItemGroup>
</Project>
// Platforms/Gtk/Main.cs の代わりの Program.cs
// 参考: https://github.com/jsuarezruiz/maui-linux/blob/cd7b73d839fcf59619ecd1ddc543d658534427ae/src/Controls/samples/Controls.Sample/Platforms/Gtk/Main.cs
using System;
using Microsoft.Maui;
using Microsoft.Maui.Hosting;
namespace MauiTemplate;
class Program : MauiGtkApplication
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
static void Main(string[] args)
{
var app = new Program();
app.Run(args);
}
}
ビルド:
dotnet run -f=net8.0-gtk
エラー:
/home/lemon73/Repo/maui-linux/MauiTemplate/Program.cs(8,17): error CS0246: 型または名前空間の名前 'MauiGtkApplication' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください) [/home/lemon73/Repo/maui-linux/MauiTemplate/MauiTemplate.csproj::TargetFramework=net8.0-gtk]
ビルドに失敗しました。ビルド エラーを修正して、もう一度実行してください。
エラーになっている、MauiGtkApplication
は、Microsoft.Maui
の Core (https://github.com/jsuarezruiz/maui-linux/blob/cd7b73d839fcf59619ecd1ddc543d658534427ae/src/Core/src/Platform/Gtk/MauiGtkApplication.cs#L10) に含まれている。が、これは <PackageReference Include="GtkSharp.Maui.Core" Version="8.0.40--date20250228-1034.git-cd7b73d" />
の宣言で、含まれているはずなので、エラーになるのは謎。

(Platforms/Gtk/Main.cs
にすると動かないが、Program.cs
にしたら動くので、とりあえずこの際は無視する)

ちなみに、<ProjectReference Include="../maui-linux/src/Core/src/Core.csproj" />
(maui-linux 本体のパッケージを利用) にしても、同じエラーですわね。
これは Issue に報告しましょうか。(最近動きがないので、影響があるかはわからないけど)

これは Issue に報告しましょうか。(最近動きがないので、影響があるかはわからないけど)

これは Issue に報告しましょうか。(最近動きがないので、影響があるかはわからないけど)
https://github.com/jsuarezruiz/maui-linux/issues/102
今までは Issue にコメントや反応がついていたものの、ついにそれらもつかなくなりましたね…
もう、もはやこのプロジェクトは凍結したか…
とりあえず、何かしらの PR を作成し、Matrix の方でもコメントしてみましょうかね。

とりあえず、何かしらの PR を作成し、Matrix の方でもコメントしてみましょうかね。
もし、本当に反応がなかったら…
Iytico 氏が長年注視し続けてきたこの計画も、もうもはやここまで、でしょうか…
(私が開発を続けられても、レビューやマージしれくれる人がいなかったら全く意味がないので)

とりあえず、内部 PR する。が、https://github.com/Lemon73-Computing/maui-linux/pull/8#issuecomment-2882676866 で言っている通り、グループが稼働していないし、オンオフの状態が取れないから、まだ未完成。
終わったら Squash Merge する。(Commit が適当すぎるので)

Thomiel 氏は、割と本気なんだよね。
(.NET MAUI for Linux の開発のための資金受領に関して考えているっぽい)
状況をしばらく観察し続け、可能なら私も協力したいところです。

なんだかんだ、色々あって、RadioButton ができました。(???)
なかなかに時間かかりましたが、ここに私の技術力の全てが…

なかなかに時間かかりましたが、ここに私の技術力の全てが…
これで、PR 全くされなかったら草

とりあえず、何かしらの PR を作成し、Matrix の方でもコメントしてみましょうかね。
もし、本当に反応がなかったら…
Iytico 氏が長年注視し続けてきたこの計画も、もうもはやここまで、でしょうか…
なかなかに時間かかりましたが、ここに私の技術力の全てが…
これで、PR 全くされなかったら草
Review される気配がなくて草

MauiGtkApplication 謎に動かない

とりあえず、何かしらの PR を作成し、Matrix の方でもコメントしてみましょうかね。
もし、本当に反応がなかったら…
Iytico 氏が長年注視し続けてきたこの計画も、もうもはやここまで、でしょうか…
なかなかに時間かかりましたが、ここに私の技術力の全てが…
これで、PR 全くされなかったら草
Review される気配がなくて草
してくれました 🎉
ありがとう!!
修正しますわ。

MauiGtkApplication 謎に動かない
よくわからないので、名前を MauiApplication.cs にでもしてみようかしら

lytico 氏もコメントくれた: https://github.com/jsuarezruiz/maui-linux/pull/106#discussion_r2156909998
やったー

今日はあんまり時間がないから、明日進める予定です

今日はあんまり時間がないから、明日進める予定です
すいません、今日思ったよりも忙しかったので、進められませんでした。
今、若干忙しいので、次の作業日がいつになるかは未定です…。

今日はあんまり時間がないから、明日進める予定です
すいません、今日思ったよりも忙しかったので、進められませんでした。
今、若干忙しいので、次の作業日がいつになるかは未定です…。
更新したけど、ちゃんと動いているのかよくわからん (サンプル内に UpdateBackground 使ってる実装なくね?)
テストコードってある?

Iytico 氏がめっちゃヒント (答え) くれた 👍

以前から気になっていた脆弱性問題を修正した。(けど、謎の要因により CI/CD が直らない)

後で、https://github.com/dotnet/maui/pull/28042/files を Cherry Pick するつもりです。(コードのフォーマットを修正する CI もエラーになっているので)

https://github.com/jsuarezruiz/maui-linux/pull/107
以前から気になっていた脆弱性問題を修正した。(けど、謎の要因により CI/CD が直らない)
ちなみに、これは本家 .NET MAUI でも修正されていなさそうなので、手がかりがない… (CI/CD を直さないと、Nuget が更新できないので困っているけど)

後で、https://github.com/dotnet/maui/pull/28042/files を Cherry Pick するつもりです。(コードのフォーマットを修正する CI もエラーになっているので)
した
けど、こちらも謎エラーだね

後で、https://github.com/dotnet/maui/pull/28042/files を Cherry Pick するつもりです。(コードのフォーマットを修正する CI もエラーになっているので)
した
https://github.com/jsuarezruiz/maui-linux/pull/108
けど、こちらも謎エラーだね
Ubuntu のところを、Windows に変えたらエラーが無くなった 🎉

今後の予定 (仮)
- .NET 10 リリース (2025年11月) に合わせて Gtk3 版をリリースしたい
- .NET 11/12 リリース (2026/27年11月) に合わせて Gtk4 (Gtk5) 版をリリースしたい
Qt を使う案
かなり前に調べたがダメそう。(再度調べ直したが、特に状況は変わっていなかった)
- QML.NET - 死んでる (5年前から更新がない)
-
Qt.Sharp - 死んでる (同上)
- Fork から Qt6 版を作る案 - 進捗が謎 (リポジトリは見つからなかった)
- Qt6.NET - 微妙そう (5ヶ月前から動きがない)
- qtdotnet - Qt 公式の試験的プロジェクトだが、おそらく C# 向けのバインディングではない
Gtk 実装
何故か Gtk4 以降の C# 用公式バインディングがない。(Gir.Core[1] に期待)
-
https://github.com/uriegel/Gtk4DotNet/issues/1 これ見て、かなり熱心だと思った ↩︎

Marcel Tiede
Btw if you have questions in regard to GirCore im available 😅
ありがてぇ… ✨
maui-linux チーム、結構団結してるな。
(なお、Jsuarezruiz 氏の Review が遅い気がするが…)

https://github.com/jsuarezruiz/maui-linux/pull/107
以前から気になっていた脆弱性問題を修正した。(けど、謎の要因により CI/CD が直らない)
これは全体的な修正によって直した
MauiGtkApplication 謎に動かない
よくわからないので、名前を MauiApplication.cs にでもしてみようかしら
これは、試してみたけど意味なさそう
他の方法を模索する必要がある (が、目星はついていない)
(関係ないが、おそらく Platform/Gtk/*
を動かせないのは Resouces
が実装されていないから。Workload の変更によって変わるかな…?)

(なお、Jsuarezruiz 氏の Review が遅い気がするが…)
リアルが忙しいかもしれないが、CI/CD の方だけでも Merge してほしい…

(なお、Jsuarezruiz 氏の Review が遅い気がするが…)
リアルが忙しいかもしれないが、CI/CD の方だけでも Merge してほしい…
とりあえず、Review/Merge 待ちかな。
MauiGtkApplication と maui-gtk workload については研究を続けよう

そして、
すべてのポータルとして GitHub Organization を作りましたと。(設立: Lemon73、メンバー: Thomiel、trungnt2910 (現状)
可能なら、maui-linux 関連の Repository をすべてここに移管したい

メンバー
- 🇯🇵 Lemon73 (@Lemon73-Computing)
- 🇩🇪 Thomas Mielke (@thomiel)
- 🇻🇳 Trung Nguyen (@trungnt2910)
招待中
- 🇩🇪 Marcel Tiede (@badcel)
- 🇪🇸 Javier Suárez (@jsuarezruiz)
- (?) lytico (@lytico)

(なお、Jsuarezruiz 氏の Review が遅い気がするが…)
リアルが忙しいかもしれないが、CI/CD の方だけでも Merge してほしい…
とりあえず、Review/Merge 待ちかな。
こんなに時間がかかると、Microsoft の非公開情報で、公式に対応する (完全別プロジェクトとして) ではと考えてしまう。(パッチが無意味になるので嬉しくない)

メンバー
- 🇯🇵 Lemon73 (@Lemon73-Computing)
- 🇩🇪 Thomas Mielke (@thomiel)
- 🇻🇳 Trung Nguyen (@trungnt2910)
招待中
- 🇩🇪 Marcel Tiede (@badcel)
- 🇪🇸 Javier Suárez (@jsuarezruiz)
- (?) lytico (@lytico)
Javier 氏もさっき加入したっぽい

メンバー
- 🇯🇵 Lemon73 (@Lemon73-Computing)
- 🇩🇪 Thomas Mielke (@thomiel)
- 🇻🇳 Trung Nguyen (@trungnt2910)
招待中
- 🇩🇪 Marcel Tiede (@badcel)
- 🇪🇸 Javier Suárez (@jsuarezruiz)
- (?) lytico (@lytico)
Javier 氏もさっき加入したっぽい
Marcel Tiede 氏も加盟してくれました。
lytico 氏は、そもそも GitHub の更新が少なく、あんまり使っていなさそうなので、招待されていること自体に気づいていなさそう。

メモ
One of the benefit is that we can use the environment without git clone
. This is good for people who want to try sample application (gtk version).
# Uses Docker Images (podman) - This patch
$ time podman pull ghcr.io/lemon73-computing/maui-podman:lemon73-github-packages
real 5m18.713s
user 2m2.183s
sys 1m18.869s
$ time sudo podman run -it --rm -e
DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix
-t ghcr.io/lemon73-computing/maui-podman:lemon73-
github-packages dotnet run --framework net8.0-gtk
real 0m34.368s
user 0m0.007s
sys 0m0.001s
# Build from source (podman)
$ time podman build --no-cache -t maui-env .
real 7m1.856s
user 4m53.546s
sys 1m50.149s
$ time sudo podman run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -t maui-env dotnet run --framework net8.0-gtk
real 0m39.274s
user 0m0.010s
sys 0m0.000s
<!--
Actually, I was thinking the way (Docker Packages) is faster than build from source, however my prediction was wrong. It is not fast.
これのメリットとしては、このリポジトリをクローンせずに利用できるということにある。クローンや docker での build の手順を減らせるので、サンプルアプリケーションだけを試しに動かしてみたい人には向いていると思って作成した。
Packages にすることでビルドにかかる時間を減らせると思っていたが、実際に試してみたらかなり時間がかかることがわかった。(多少 pull のほうが早いが、計測方法の微妙な違いによるものかもしれない。また、2回目以降はキャッシュされるため、全体にそれほど影響はないだろう)
なので、前半に説明した、クローンなしのメリットを取るなら Merge してほしいし、メンテナンスが大変だと思うなら Close して欲しい。
速度向上を期待していたが、残念ながら速度に関しては圧倒的な差は見られなかった。
-->

Thomas 氏に依頼して、maui-docker を Thomas Mielke Software から MauiGtk に移動してもらいました 🎉

はやく Review してほしい (3週間放置されている)

このスレが作られてから、10ヶ月にもなるのか…
この10ヶ月という期間で、かなりコミュニティーが進歩したのではないかと感じています。

現状確認/今後の指針 (Lemon73 視点)
2025年6月-現在
日付 | 人物 | 出来事 |
---|---|---|
2025/6/6 | Thomas 氏 | maui-docker が実用段階に[1] (2024/11/22 に一応動いている[2]) |
2025/6/15 | Lemon73 | RadioButton の実装 (#106)[3] |
2025/6/29 | Lemon73/Thomas 氏/Marcel 氏 | 長期開発計画提案[4] |
2025/7/3 | Marcel 氏 | Gir.Core メンテナー登場[5] |
2025/7/8 | Thomas 氏/Lemon73 | CVE-2025-26646 問題/パッチ (#107)[6] |
2025/7/11 | Lemon73/Thomas 氏 | GitHub Organization (MauiGtk) 設立提案/設立[7] |
2025/7/16 | Thomas 氏 | maui-docker を MauiGtk へ移行[8] |
2025/7/24 | Lemon73 | MauiGtk 独自の maui リポジトリ設置を提案[9] |
今後の方針
- GtkSharp (GTK 3) + .NET 8 - 初の安定版
- GtkSharp (GTK 3) + .NET 10 - 新しい LTS に対応した安定版
- Gir.Core (GTK 4 or 5) + .NET 10 (or later) - GTK 3 のサポート終了を見越して + 新しいコントロールの利用
参照: https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$CrWKwd2oA92ZLk1KaBAIC4xSVdJw0NmiRYcbR9ttndE
リポジトリ
歴史/経緯
- 元々プロジェクトの分散を避けるため、Javier 氏の maui-linux リポジトリに新機能などを集中させるつもりだった。(元々は Thomas 氏で、私もその考えに同意していた)
- #106、#107、#108 などの PR を提出するもレビューが遅く、Merge を待っていたら開発が進まないと感じる。(あとは、CI/CD による Nuget のアップロード関係なども独自で行いたいと考えるようになった)
- Thomas 氏と相談し、MauiGtk コミュニティーに maui リポジトリを新設することに決定。(本家 maui をベースとし、新設しようと考えていた。が、Thomas 氏は私の maui-linux を MauiGtk に移管するのが良さそうと言っており、私はどちらでも良かったので、Thomas 氏の考えに賛同する)
- lytico 氏の maui を取り込むべきかなどを相談中。(Thomas 氏によると、lytico 氏の Fork は多少先行しているらしい)
結果
MauiGtk コミュニティーに設置 (Lemon73-Computing から移管) する maui-linux で開発をすることと決定した。
(maui-linux だと、Javier 氏のリポジトリとややこしいので、maui-gtk にしてもいいかも)
開発環境
主に Thomas 氏が担当。
dotnet cake
[10] で動くようにしている?らしい。
Docker 作ってくれた Thomas 氏に感謝 🎉
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$HQTMKbT5QgZO1Vdc_6faBofJus6MN6248g5nqd2_ahU ↩︎
-
ウィンドウ関係が難しく、私は podman を使うことで2025年5月頃に初めて動かせた記憶。https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$j62vPEUdCbHaZ8HGx7S5yBN5aY_Nxu-QOXHDyDZt5HU ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$KViOj68RhdATpHxvZgV0z6kEB8sUCAW7rr04jTwahEw ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$1G3Q0AtmpQxrFCTmYhCIchBmAFEJxhnKseA4mJMQ53M ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$MUijbRAYNYv58cc9afuRSo98jG5gOOlAbjuZGiq0Ldw ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$ARL0xmQua8DLch-eSmpuuRdlLpvAkGszgSVonOayp8I ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$185qycm_tgwd5-S6Du0Ly6utWwBdPZKBibaDNa8gVu0 ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$PvJKO3Avr1wwALjy4QgqgvBnnTiGXAPEGXgAwDHnyBw ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$30A2gqtBbxzXmhl0f3wqIaUCb1hHHwGYjRu29ww-9HU ↩︎
-
https://matrix.to/#/!secXICyMCTWkttVBVC:matrix.org/$UkkKKKdnM8ac7ovU0McWcB7X-I8dQq0P25cKcie1bwI ↩︎

Javier 氏に対し、maui-linux を MauiGtk Community に移管してほしいと要望を出す予定です。(おそらく返答はないでしょうが、maui-linux リポジトリの Issue で)
[Draft] 内容
Title: (提案) Repository を MauiGtk Community に移管する
私達 MauiGtk Community は、maui-linux の完成を求めており、開発やコミュニティーの形成に力を注いでいます。主要なリポジトリは、主にこの maui-linux と、lytico 氏の maui です。しかし、両方ともアクティブな状態ではなく、私が作成した PR の Review や Merge は止まっています。
もともと、MauiGtk Community 独自に maui-gtk のリポジトリを作成することも考えていましたが、以下の理由から、移管してほしいと考えています。
- リポジトリを新規に作成した場合、分散するから (maui-linux 関連のリポジトリが複数あると、開発者やユーザーが混乱する可能性が高く、それを避けたいため)
- リポジトリの場所を統一したい (MauiGtk Community の GitHub Organization に統一することで、開発しやすくなる)
- 活発化のため (先述の通り、このリポジトリでの開発が停滞しているため)
- Nuget の統合 (仮のアイデア。Nuget の場所を統一できたらよさそう)
- 知名度が高い (Star 数が多いので)
- Issues がある
以上の目的とし、移管の検討を行ってほしいです。
もちろんあなたのリポジトリなので、移管しないのでも構いませんが、その場合はより活発な開発やレビューをお願いしたいです。

(まあ、本来はこのような要求 (個人のリポジトリをコミュニティーに譲る) をすべきでないでしょうが、もともと Microsoft の実質 (事実上) 公認 (唯一) の"コミュニティー"のはずなので、活発な方に移動してもらったほうがいいと考えています)

いや、流石にまずいか?

Lemon73:
あまり活発でないリポジトリの保持者に、移管を呼びかけることは問題あるでしょうか
ChatGPT:
ご質問ありがとうございます。
結論から申し上げますと、「礼儀と配慮を持って行えば、問題はありません」。ただし、いくつかの点に注意する必要があります。
🔹 目的と背景を明確にする
移管をお願いする理由を丁寧に説明しましょう。たとえば:
プロジェクトに関心があり、今後もメンテナンスを続けていきたい
IssueやPRが放置されており、利用者の不便が増している
コミュニティの関心が続いているにもかかわらず、更新が止まっている
このように、リポジトリの将来を前向きに考えているという姿勢を示すと、受け入れられやすくなります。
🔹 表現の仕方に注意する
強く迫るような言い方や、非難と受け取られるような言い回しは避けましょう。以下のような言い方が無難です:
「素晴らしいリポジトリを公開してくださり、ありがとうございます。最近更新が止まっているようでしたので、もしご都合がつかないようであれば、今後のメンテナンスを引き継がせていただけないかと思い、ご連絡差し上げました。」
🔹 相手の権利を尊重する
GitHubのリポジトリは基本的に作成者の所有物ですので、断られた場合はそれに従う必要があります。また、フォークして独自にメンテナンスするという選択肢もあります。これによりオリジナルを尊重しつつ、利用者のニーズに応えることが可能です。
🔹 GitHubのルールとの整合性
GitHubの利用規約には、アクティブでないプロジェクトの乗っ取り(takeover)を防ぐためのガイドラインがあります。ただし、正当なコミュニケーションを通じて同意を得る形で移管を依頼するのはルール違反ではありません。

FYI
移管してほしい主要な理由
- レビューに時間がかかっている (移管してくれたら、私自身や Thomiel 氏の判断で Merge できる)
- リポジトリや情報の分散を避け、集中させられる (現在は MauiGtk Community で保持しているのは maui-docker のみで、本体の保持ができていない)
移管を断られた場合の妥協案
- 本家 maui を fork (maui-gtk とする)
- .NET8 のタグを checkout し、新しい branch を作成 (
net8-gtk3
とする) -
net8-gtk3
に対し、maui-linux の最新版を PR、Merge する - (必要なら)
net8-gtk3
に対し、lytico/maui の最新版を PR、Merge する - 私が作成した CI/CD 修正や RadioButton 追加を PR、Merge する

時差…!!
(ドイツ勢 (Thomiel 氏/Marcel 氏) と時差があるので、やり取りに時間がかかってしまう。どうしようもないけど…!)
世界標準時 | 日本 | ドイツ |
---|---|---|
+0:00 (UTC) | +9:00 (JST) | +1:00 (CET) |

再考します。
[Draft] GitHub Issue
Title
[Request] Repository を MauiGtk Community に移管する
Description
私達 MauiGtk Community は、.NET MAUI に GTK のコントロールを追加することで Linux などの OS 対応を増やすことを目的とし、開発やコミュニティーの形成に力を注いでいます。
現在このリポジトリ、maui-linux では Issue に対する PR が少なく、また PR の Review や Merge が遅れているように見受けられます。CI/CD はエラーとなっており、Nuget の更新も行われていません。私たち MauiGtk Community は開発継続を行いたいにもかかわらず、更新が止まっている状況です。
また、現在はリポジトリの場所が分散しています。本体である maui-linux はここに、環境構築を行える maui-docker は MauiGtk Community に場所が異なっています。
以上、
- maui-linux の更新が止まっている
- maui-linux 関係のリポジトリの場所がバラバラ
であることから、よろしければ、この maui-linux を MauiGtk Community に移管し、メンテナンスを引き継がせていただけないかと考えています。
(MauiGtk Community がこのリポジトリや本家 maui を fork することも考えましたが、リポジトリが分散し、開発者たちが混乱すること、すでに知名度が高いこと (Star 数) や Issue があることから、移管が最善だと考えました)
ご検討のほど、よろしくおねがいします。

よろしくお願いします。
無反応か、断られるかもしれませんね。(私だったら、そうするかもしれません)
彼は元々 (2022年ごろは) GTK 対応には前向きだったため、少しですが、期待をしています。(Microsoft の内部でも GTK サポートの話をしていたらしいですが、その後良いニュースがないので、反発を受けたのではないかと思っています)
今までメンテナンスを続けてきてくれた彼に敬意を。

Javier 氏に対し、maui-linux を MauiGtk Community に移管してほしいと要望を出す予定です。
よくよく考えると、大胆すぎる

さあ、どうなるでしょうか。
今週はちょっとリアルのほうが忙しく、こちらの作業を進められないと思います。3日-1週間ほど経っても反応がなさそうだったら、諦めて Fork を作りましょうか。

Javier 氏に対し、maui-linux を MauiGtk Community に移管してほしいと要望を出す予定です。
さあ、どうなるでしょうか。
今週はちょっとリアルのほうが忙しく、こちらの作業を進められないと思います。3日-1週間ほど経っても反応がなさそうだったら、諦めて Fork を作りましょうか。
1週間たち、2人 (mikelor 氏と、bronteq 氏 (知らない人)) から 👍 を頂きましたが、相変わらず本人からは反応はありませんでした。
1週間待っても反応がないので、流石に MauiGtk Community 独自でリポジトリを保持することに決めました。[1]
Thomiel 氏の要望通り、私が保持していた Lemon73-Computing/maui-linux のブランチを整理し、MauiGtk Community に移管することで、MauiGtk/maui-linux となりました。
残念ですが。
-
Javier 氏は現在 maui 本体の開発を活発に行なっており、また MauiGtk のメンバーとしても参加しているため、通知を見れていないというわけでもなさそうです…。リポジトリの移管については彼の自由であり、移管しなかったとしても彼を批判するつもりはありませんが、反応くらいして欲しかったです。 ↩︎

Thomiel 氏が (秘匿) を進めてくれているようなので、彼の活動を支援します。

時差…!!
(ドイツ勢 (Thomiel 氏/Marcel 氏) と時差があるので、やり取りに時間がかかってしまう。どうしようもないけど…!)
世界標準時 日本 ドイツ +0:00 (UTC) +9:00 (JST) +1:00 (CET)
Summer Time だと…!?

英語が喋れないのが足かせになりそう (日本だと機会がないので仕方ない気もするが、世界的にはやばいかも)

英語が喋れないのが足かせになりそう (日本だと機会がないので仕方ない気もするが、世界的にはやばいかも)
Lemon73、英語マスターしろ (?)

内部情報なので詳細は隠しますが、Javier 氏、意外に前向きだな…!
(実は設立してすぐから MauiGtk に入ってくれているし、これは嘘ではなさそう)

英語が喋れないのが足かせになりそう (日本だと機会がないので仕方ない気もするが、世界的にはやばいかも)
Lemon73、英語マスターしろ (?)
Thomiel 氏が「MauiGtk の開発者、全員英語ネイティブじゃないし、翻訳システムみたいの使おう!」と言ってくれているのでありがたい。
実際→
メンバー
- 🇯🇵 Lemon73 (@Lemon73-Computing)
- 🇩🇪 Thomas Mielke (@thomiel)
- 🇻🇳 Trung Nguyen (@trungnt2910)
- 🇩🇪 Marcel Tiede (@badcel)
- 🇪🇸 Javier Suárez (@jsuarezruiz)
- (?) lytico (@lytico)
なお、時差が7-9時間程度ある模様 (ミーティングの際に若干厄介な問題)

内部情報なので詳細は隠しますが、Javier 氏、意外に前向きだな…!
個人的には、やっぱり maui-linux のリポジトリを MauiGtk に移管してほしい