アップデートとアップグレードの分離はなぜ存在するのでしょうか?

アップデートとアップグレードの分離はなぜ存在するのでしょうか?

aptでは、コマンドによってupdate利用可能なパッケージのリストが更新されますが、これらのパッケージから既にインストールされているソフトウェアはアップグレードされないと理解しています。

また、上記のようにupgrade更新したパッケージから既にインストールしたソフトウェアもアップグレードされることを理解しています。update

updateUbuntu/Debian 開発者がこのように分割し、upgrade代わりに 1 つのコマンドで両方のタスクを実行することにした理由は何でしょうか?

これはむしろ、Ubuntu 開発者のアーキテクチャ哲学に関する質問です。

答え1

updateとの違いの歴史はupgrade実はかなり興味深いものです。

はるか昔、つまり Ubuntu が存在する何年も前の 2000 年頃、帯域幅とディスク容量ははるかに限られていました... とはいえ、1990 年代半ばに比べれば拡張されていました。ブロードバンドは始まったばかりで、ダイヤルアップは依然としてオンライン接続の重要な手段でした。大容量ディスクは、まだ数百 MB しかありませんでした。apt は、dpkg をベースに構築された、新しくて斬新で革新的なものでした。

よく考えてみると、aptデータベースは驚異的です。それは、全てソフトウェアから全て既知のリポジトリです。aptが依存関係を計算し、利用可能なアップグレードを特定するのに十分な詳細さがありながら、当時のダイヤルアップモデムで送信し、当時の小さなドライブに保存できるほど小さいです。電話でデータベースを更新するには、良好な接続で。今ではかなり長い時間ですが、パッケージのアップデートを手動で調べるには(apt以前)時間

当時のディストリビューションは、継続的インテグレーションやスモークテスト(というか、ほとんどテストは行われていません!)などではなく、ビルドファームも始まったばかりでした。アップグレードは今よりも頻繁に元に戻す必要がありました。多くのユーザーは、ないさまざまな理由で特定のパッケージをアップグレードしたり、今日は特定のアップグレードのみを選択して (手動でテストするため)、他のアップグレードは明日にしたりすることができます。

その後15年ほどの間に、ツールあまり変わっていないので、私たちは依然として別々のアクションupdateupgradeアクションを持っています。ユーザーワークフローディストリビューションの信頼性が向上するにつれて進化し、以前は手動で行われていたソース/更新/アップグレードの管理の多くが、徐々に自動化の層の背後に隠されるようになりました ( software-updaterunattended-upgrades)。

ソフトウェア パッケージ ツールの近代化は、Snaps、AppImage、Flatpak が最近登場した理由の 1 つですが、それは次の章で説明します。

答え2

アップグレードが必要になるのはapt-get update、このときだけではありません。パッケージ リストを更新するだけなので、毎回アップグレードする必要はありません。

稼働中の井戸は、最近稼働したかどうかapt-get upgradeに依存する可能性がありますが、それはにも にも当てはまります。これらすべてが を意味するのでしょうか? もちろん違います。リソース効率と設計の簡潔さという単純な問題として、操作が他の複数の操作に共通している場合は、それを除外する必要があります。apt-get updateapt-get removeapt-get installapt-get update

逆に、apt-get removeと が正常に終了するには、最近 が実行されていることapt-get installも必要になる場合があるため、の各実行に対してを実行するのは理にかなっていますか? いいえ、ここでも、私が実行しようとしていることと が行うことが矛盾する可能性があるためです。apt-get updateapt-get upgradeapt-get updateapt-get upgrade

答え3

ソフトウェア ソースを変更するたびに、使用可能なソフトウェアのリストを更新するためにコマンドを実行する必要がありますsudo apt update。その後、追加した新しいソフトウェア ソースで使用可能なパッケージを検索したり、インストールしたりできます。

このコマンドは、sudo apt upgradeソフトウェア アップデータ アプリケーションを使用してインストール済みパッケージのリストをアップグレードするのと同等のターミナル コマンドです。これは、新しいソフトウェア ソースを追加し、新しいソフトウェア ソースのパッケージを含むように利用可能なソフトウェアのリストを更新し、追加した新しいソフトウェア ソースから新しいパッケージをインストールするという通常のワークフローとは異なるため、 と を別々のコマンドにする方が便利で混乱が少なくなりsudo apt updateますsudo apt upgrade

また、 と を区別するsudo apt updateと混乱が少なくなります。 を正常にsudo apt upgrade実行すれば、sudo apt updateインターネット接続があることが確認できるからです。sudo apt upgradeその後の実行時に問題が発生した場合、インターネット接続の問題というよりもパッケージ管理の問題である可能性が高く、 の結果はsudo apt upgrade問題の診断と解決の手がかりとなります。

答え4

なぜ公式の Ubuntu リポジトリからプログラムをダウンロードしてaptインストールするのかと疑問に思う人もいるかもしれません。ダウンロードとインストールを 1 回の操作で実行するのではなく、最初にダウンロードしてからインストールするとどのような違いがあるのでしょうか。

コメントを読んでさらに考えてみると、これはUnix哲学モジュラー基本的に「各プログラムは 1 つのことを実行する」という哲学: 最初にダウンロードし、次にインストールします。各アクションには専用のプログラムがあります。

関連情報