Linux向けパッケージングは地獄だ——開発者が全ディストリをカバーする苦闘
I hate packaging my software for Linux
開発者が自社製TUIツール「Fresh」をLinuxで配布する際の苦労を綴る。npmパッケージから始まり、AppImage、Flatpak、deb、rpm、AUR、Nixなどあらゆる形式を試すが、それぞれに問題がある。FlatpakはサンドボックスがTUIに不向き、AppImageは起動が遅くFUSEが必要、deb/rpmは公式リポジトリ入りが困難で自動更新もされない。結局、静的リンクしたmuslバイナリと自己更新機能に絞る決断を下す。
私はただ、自分のソフトウェアを無料で配りたいだけなんだ。
HNでの議論
150- kyrofa
ああ、それは確かに痛いですね。そこまでやっていることに感心します。ほとんどのメンテナーはそこまでしませんよ。彼らは通常、そのソフトウェアを使いたい人が自分のディストリ用にパッケージングしてくれるのを当てにしています。もちろん、ソフトウェアをユーザーに届けたいなら、鶏が先か卵が先かの問題はありますが。
Debianの状況について具体的に言うと:
> 単一パッケージの新しいバージョンを探すためのURLを指定するだけで、aptとdnfの両方がそれを覚えて更新してくれるような、素早いサーバーレスソリューションがあればいいのに。
自分のDebianリポジトリをホストすることを考えたことはありますか?それはまさにあなたが求めているものです。追加のインフラも必要ありません。aptlyやrepreproなどを使ってGitHub Pagesで直接ホストして、CIから新しいリリースをそこに置くことができますよ。
- branc116
アプリの.tarを提供するだけでいいと思います。他のことは、各ディストリのパッケージを担当する人たちの問題であるべきです。あなたは配布のその部分に関わるべきではありません。もし人々があなたのアプリを欲しがれば、誰かがパッケージを作るでしょう。あなたがすべてのパッケージマネージャーに自分のソフトウェアを追加するには、あまりにも多すぎます。静的なHTTPサーバーに.tarを置くだけで十分です!
- jorams
これが奇妙に難しいと感じる理由は、そもそもそうするべきではないからです。あなたはソースコードとビルド手順を提供すれば、仕事は完了です。ユーザーはその手順に従えます。必要なら、古いバージョンのlibcでバイナリをビルドして、自分でコンパイルしたくないユーザーのために配布することもできます。
ディストリ用のパッケージングは他の誰かの仕事であり、彼らがDebianの依存関係ポリシーなどの懸念を処理します。もちろん、彼らがそもそもパッケージ化したいと思えばの話ですが。
- _sinelaw_
こんにちは、この投稿(とFresh)の作者です。私はこれを全ディストリのLinuxユーザーにきれいに配布するために多くの時間を費やしてきましたが、それは困難な戦いです。他の個人メンテナーがこの問題にどう対処しているのか興味があります。自己更新型の静的バイナリは合理的な解決策でしょうか?
- xorcist
本当にやろうと思えば、物事をどれだけ複雑にできるかには限りがありません。
あなたがすべきことは、ユーザーが使いたくなるようなソフトウェアを作り、フリーライセンスでソースコードを公開することです。最初のDebian開発者があなたのソフトウェアを使って気に入れば、彼がパッケージ化し、好循環が始まります。「ユーザーエクスペリエンスを所有したい」という誘惑にかられるかもしれませんが(結局、誰もが顧客を所有したいものです)、その考えは手放さなければなりません。顧客を所有していない場合、アップデートが同じ日に配信されるとは期待できませんが、それは全体的に良いことです。
ディストリの人々に、彼らの仕事を楽にするために何ができるか尋ね、彼らの話を聞きなさい。しかし、彼らの仕事を代わりにやろうとしてはなりません。そのディストリに住んでいない限り、彼らがあなたのソフトウェアにどのような振る舞いを期待し、どのようにパッケージ化されるべきかのニュアンスを理解することはできないでしょう。
Linuxパッケージングの良い点の一つは、ソフトウェアを作る人とパッケージ化する人が同じではないことです。コードはレビューされ、悪いアイデアは見つけ出されます。この原則は時々破られますが、破られたからといって良いアイデアになるわけではありません。私たちは、評判やレビューのないインターネット上のランダムなソフトウェアを誰も実行すべきではない世界に生きています。ディストリビューションのパッケージングは、それを達成する一つの方法を示唆しています。結局、30年間生き残ってきた方法ですから、耳を傾ける価値があるかもしれません。
- rock_artist
著者に同意します。
私は素晴らしいクロスプラットフォームのプロ用メトロノームを作りました(タイマーを使うものもありますが、それは良くないので)
Apple、Microsoft、Google - どれも簡単ではありません。Playストア、証明書、コード署名、提出などが必要です... しかし、これらのプラットフォームでソフトウェアを入手しやすくするためのステップはいくつかあります。
私もLinuxで最善を尽くしましたが、著者が言うように、簡単な方法はありません(私のメトロノームのGitHubのissueで見られます https://github.com/talaviram/TICK/issues)
名前がまさに難しい部分です... Linuxには非常に多くのフレーバーがあります。
インストーラーなしでも、XサーバーとWayland、snap、AppImage、.debがあり、それぞれ異なります。さらに、オーディオプラグインフォーマット(CLAP、LV2、VST3)や、一部のフォーマットにはファイルを置くための特定のパスがないという事実も加わります。
シンプルなアプリ(CLIツールやパッケージマネージャー向けのものではない)には、単にアーカイブファイル(zipやtarballなど)を提供するのが最善だと思い始めています。
Linuxは成長しており、macOS以外では私の第一選択ですが、多くのリリースがあるにもかかわらず、他のプラットフォームよりもユーザーは技術的であると感じます。LLM時代が加わり、インストールを頼むこともできます。シンプルなソフトウェアには、バイナリを含むzipが最も簡単かもしれません。
- s_ting765
openSUSEのOpen Build Serviceがあります。これを使うと、いくつかのディストリ向けのパッケージとリポジトリを作成できます。 https://build.opensuse.org/
- snarfy
私はArchのみを使用し、パッケージングもArchのみです。私は悪いメンテナーです。Debianの誰かが欲しければ、自分のディストリ用にパッケージ化すればいいでしょう。しかし、それを私がやるべき理由はわかりません。