私は Debian ベースのディストリビューション (Debian、Ubuntu、Linux Mint) のユーザーです。最新バージョンのソフトウェアがリポジトリに存在しないことが多いため、ソースから直接ダウンロードしてインストールすることがよくあります。
しかし、このソフトウェアは更新を知らせることはめったにないことに気づきました。また、実際に自動的に更新されてからインストールの許可を求めるだけのものも見たことがありません。
一般的に、Linux バージョンはパッケージ マネージャー経由で更新されるとコーダーの間で想定されているからでしょうか?
答え1
この種の機能を実装するのは、「ホームへの呼び出し」(更新があったかどうかを確認する)と「インプレース更新」の両方の側面において非常に困難です。
- ユーザーのシステムで実行されているソフトウェアは、新しいバージョンが利用可能かどうかを確認する方法を知っている必要があります (つまり、ネットワークを使用する他の理由がない可能性のあるアプリケーションにネットワーク コードを追加する必要があります)。
- ソフトウェアは、ネットワークの状態に関係なく動作する必要があります (完全にオフラインの場合はもちろん、部分的に接続されている場合にも奇妙なエラーが発生して失敗してはなりません)。
- 新しいバージョンが利用可能かどうかを判断する何らかの方法が必要です (ユーザーがソース リポジトリからビルドするときに、どのようにバージョンを比較しますか)。
- サーバー側の機能を備えたサーバーをどこかに設置する必要があり、そのサーバーも開発する必要があるかもしれません。
- サーバー上または中間者攻撃によって更新が侵害されないようにする必要があります (そのため、TLS や何らかの強力な署名を使用する必要があります)。
- アップデートはユーザーが使用できる形式で利用できるようにする必要があります。ユーザーは最初にソースからビルドしたかもしれませんが、ソフトウェアを実行しているシステムに、ソースから新しいバージョンを再構築するために必要なものがすべて揃っているという保証はありません。そのため、バイナリを提供する必要があります (すべての可能なターゲット プラットフォーム用でしょうか)。
(これは完全なリストではありません。)
これらはすべてディストリビューションによって処理されている問題なので、ディストリビューションに任せた方が簡単です。さらに、クサラナンダ説明したように、最新バージョンのソフトウェアを実行することに関心があるユーザーは、少なくともアナウンス メーリング リストをフォローするほど関心があるため、その方法で通知を受けることになります。
考慮すべきもう1つの点は、かなりの数の人が、使用しているソフトウェアが自宅に電話することをまったく望んでいないことです。一部のディストリビューションは、取り除く配布するソフトウェアからこれを行うコード、またはソフトウェアの使用状況を追跡するために使用できるソフトウェアの他の部分(例えばウェブから画像やフォント、CSSを読み込むドキュメント。Debian の Lintian例えば。
これらすべてが、更新情報を自ら提供するために必要なメカニズムを備えたソフトウェアが非常に少なく、自らアップグレードできるソフトウェアはさらに少ない理由を説明しています。
「問題」を解決する方法は他にもあります。CI システムを使用するソフトウェア開発者は通常、それを拡張して、何らかの消費可能な形式 (パッケージなど) で「ナイトリー」ビルドを提供できます。関心のあるユーザーは、独自のビルド システムを設定して、関心のあるソフトウェアの更新されたソースを定期的に取得できます (これはエンタープライズ環境ではかなり一般的です)。または、最新のソースから自身をビルドする AUR スタイルのパッケージを設定することもできます。
答え2
一部のブラウザや次のようなソフトウェア自体に「ホームに電話」してアップデートを確認する機能がなければ、同期どうやら、ソフトウェアの新しいバージョンが利用可能であることをユーザー/管理者に自動的に警告できるメカニズムは通常ありません。
パッケージ マネージャーを使用してインストールするパッケージは、人間、つまり、パッケージを最新の状態に保ち、自分が関心のあるオペレーティング システムで機能させることに関心を持つユーザーによって作成されます。
例えばパッケージングをする人アンシブル、 またはGNU コアユーティリティ、 またはヤシュシェル、 またはCMakeあるいは、特定の Unix システム向けの何千ものソフトウェア プロジェクトのいずれかを実行している開発者は、そのプロジェクトの関連メーリング リストに登録されている可能性が高く (ただし、必ずしもそうとは限りません)、ソース コード リポジトリまたはソース配布ファイルを定期的に監視するための特別なツールを持っている可能性があります。新しいリリースが通知されると、開発者は、使用している Unix のパッケージ化手順に応じて、適切な方法でソフトウェアをダウンロード、コンパイル、テスト、パッチ適用 (など)、パッケージ化します。これには、ビルド/パッケージ化プロセスで発生する非互換性やその他の問題について、上流 (ソフトウェアの開発者) と下流 (ソフトウェアのユーザー) の両方とのコミュニケーションが含まれる場合があります。
その後、使用している Unix やサードパーティのパッケージ配布の仕組みに応じて、何らかの方法でパッケージを登録、アップロード、またはコミットし、私や皆さんのようなユーザーがパッケージ マネージャーを使用してシステムを更新できるようにします。
例えば、私はGNUストウOpenBSD で利用可能です (私はこのソフトウェアの「ポート管理者」です)。私は時々 GNU Web サイトで Stow の現在の状態をチェックします (あまり頻繁に更新されません)。新しいバージョンを見つけたら、それをインストールして動作することを確認し、自分のマシンの OpenBSD ポートを更新します。次に、ポートのパッチを OpenBSD ポート リストに電子メールで送信します (ポートは OpenBSD で Makefile のセットとして配布されます)。コミット権限を持つ誰かが、私のパッチがきれいに適用され、ポートが正しく見えることを確認してから、OpenBSD ポート CVS ツリーにコミットします。
次回ユーザーが CVS ツリーを更新してポートを再構築するか、最終的に表示されるバイナリ ポートをダウンロードすると、GNU Stow のインストールが更新されます。しかし、GNU Stow 自体は、自分自身の新しいバージョンが利用可能かどうかを認識していません。これはGNU Stowが行うべきことではありません。これは、自己完結型のディレクトリ階層にサードパーティのソフトウェアをインストールするために使用するツールであり、本当に奇妙使用されるたびに「ホームに電話」しようとした場合 (ls
実行するために突然ネットワーク アクセスが必要になったかのように奇妙です)。
ソフトウェアを独自に更新することは、システムの多くのコンポーネントをまとめてテストする必要があるため、多くの場合望ましくありません。また、必要なインフラストラクチャのビットによって、小さなパッケージが大幅に肥大化し、何らかの高可用性更新サーバーを実行するためのノウハウやリソースを持たない個人が、自動的に最新の状態を維持するソフトウェアを開発することは不可能です。
答え3
昔は、コンピュータは専門家によって管理され、必要に応じて新しいソフトウェアがインストールされていました。
時間の経過とともに、さまざまなオペレーティング システムで、ソフトウェアを手動で最新の状態に保つ負担を軽減するための 2 つの異なる手法が生まれました。
- Linuxや他の最近のUnix系のOSには、パッケージマネージャーほとんどのソフトウェアはこのパッケージ マネージャーを通じてインストールされ、新しいバージョンが利用可能になるとパッケージ マネージャーによってソフトウェアが更新されます。
- Windows には最近までパッケージ マネージャーが付属していなかったため、Windows ソフトウェアのプロバイダーは更新プログラムをインストールするために独自のコードを用意する習慣ができました。
パッケージマネージャのアプローチは、オープンソースソフトウェアが独立して開発され、一緒に組み立てられた何千ものパッケージで構成されているため、オープンソースの世界に特に適しています。パッケージを組み立てる際には多くの問題が発生する可能性があるため、ほとんどのLinuxディストリビューションは、パッケージマネージャと呼ばれる一貫したセットを提供しています。リリース一部のディストリビューションには「ローリング リリース」があり、ソフトウェアがコンパイルされるかどうかだけが一貫性チェックの対象となります。他のディストリビューションでは、より多くのテストが行われ、新しいリリースは年に 1 回か 2 回、あるいは 2 年に 1 回しか提供されません。
Linux アプローチが Windows アプローチより優れている点は、ソフトウェア パッケージが互いに連携できることです。これは Windows アプローチでは困難です。ソフトウェア A とソフトウェア B が連携して何かを行う場合、相手がインストールされているかどうかを監視し、アップグレードに対応し、一方がアンインストールされたときに問題が残らないように注意する必要があるためです。特にこれが、Windows ソフトウェアが使用するすべてのライブラリをバンドルする必要がある理由です。つまり、ライブラリにバグが見つかった場合、そのライブラリを使用するすべてのソフトウェアを更新する必要があります。対照的に、Linux では、ライブラリを含むパッケージのみを更新すればよく、そのライブラリを使用するプログラムがいくつあってもかまいません。
オペレーティング システムはソフトウェア更新のメカニズムを提供するため、Linux ソフトウェアの作成者は車輪の再発明を行う必要がありません。
ディストリビューションが提供するものよりも新しいバージョンのソフトウェアをインストールする必要はほとんどありません。一般的に、新しいソフトウェアはバグが少ないわけではありません。ディストリビューションは、重大なバグ (特にセキュリティ バグ) が見つかった場合は更新を提供します。一部のソフトウェアの新しいバージョンが役立つのは、そのバージョンに新しい機能があり、それが役に立つ場合のみです。
必要がないときでも最新バージョンのソフトウェアを使いたい場合は、Debian 不安定版や Arch Linux などのローリング リリース ディストリビューションをインストールしてください。Ubuntu、Mint、Debian 安定版などの一貫したリリースのディストリビューションは、毎週システムを壊したくない人向けです。
答え4
他の回答も良かったのですが、どの回答でも特に触れられていなかったセキュリティの問題について付け加えたいと思います。
ソフトウェアをインストールするには (少なくともシステム全体にインストールするには)、通常、ルート アクセスが必要です。ディストリビューションのパッケージ マネージャーとソフトウェアをパッケージ化する人間がこの権限を適切に使用すると信頼できますが、インストールしたすべてのソフトウェアが正しく機能するとは必ずしも信頼できません。