ソフトウェアの肥大化とは、コンピュータプログラムのバージョンアップが進むにつれて、前のバージョンよりも明らかに動作が遅くなったり、メモリ、ディスク容量、処理能力の使用量が増えたり、ハードウェア要件が高くなったりする一方で、ユーザーが認識できる改善点がほとんどなかったり、機能の肥大化が進んだりする現象を指します。この用語は一貫して適用されているわけではなく、エンドユーザーによって否定的な意味で使われることが多く、ハードウェア要件にほとんど影響がなかったとしても、望ましくないユーザーインターフェースの変更を指す場合にも使われます。長期間使用されるソフトウェアでは、多様なニーズを持つ大規模で多様な市場に対応するためにソフトウェアが肥大化することがあります。ほとんどのエンドユーザーは、利用可能な機能のごく一部しか必要としていないと感じ、たとえ異なるニーズを持つエンドユーザーがそれらの機能を必要としていたとしても、残りの機能を不要な肥大化とみなします。
実際の(測定可能な)肥大化は、アルゴリズムの効率性を軽視して開発者の生産性などの他の懸念事項を優先したり、開発者の制約が緩和された際に利便性を目的として仮想マシンやその他のスクリプトエンジンなどの新しい抽象化レイヤーを導入したりすることによって発生する可能性があります。仮想マシン環境での開発を行う場合、開発者の生産性が向上したという認識は、開発者が設計および開発中にリソースの制約と使用状況を考慮しなくなったことに起因します。これにより製品はより早く完成しますが、結果としてエンドユーザーのハードウェア要件が増加したり、パフォーマンスが低下したりします。
「ブロートウェア」という用語は、不要なプリインストールソフトウェアやバンドルプログラムを指す場合にも使用されます。[ 1 ]
コンピュータプログラミングにおいて、コードの肥大化とは、不必要に長かったり、処理速度が遅かったり、あるいはその他の点でリソースを浪費するプログラムコード(ソースコードまたはマシンコード)が存在することを指します。
機能拡張とは、製品、プロジェクト、システムが、時間の経過とともに機能を追加し続けることで、当初の範囲を徐々に超えて拡大していく傾向のことです。コンピュータプログラムにおいては、これはディスク容量の過剰な使用、パフォーマンスの低下、そしてほとんどのエンドユーザーにとってプログラムの使いやすさや理解しにくさといった結果を招く可能性があります。
ブロートウェアとは、コンピュータやデバイスにプリインストールされているソフトウェアやバンドルプログラムのことで、OEM(相手先ブランド製造業者)が工場出荷時にインストールします。OEMはこれらのプログラムはユーザーの利便性のために追加されていると主張しますが、多くの場合、OEMはブロートウェアのソフトウェア販売業者から製品のパッケージ化の報酬を受け取っているため、消費者がこれらのプログラムを必要としているか、使用しているかどうかは気にしていません。ブロートウェアプログラムは新しいデバイスのストレージ容量を占有し、パフォーマンスを低下させる可能性があり、アンインストールできない場合もあります。[ 2 ]
1970年代のソフトウェア業界に携わっていた開発者たちは、処理能力、ディスク容量、メモリに厳しい制約を受けていた。あらゆるバイトとクロックサイクルが考慮され、利用可能なリソースにプログラムを収めるために多くの労力が費やされた。この効率性を実現することは、コンピュータプログラマーにとって最も重要な価値観の一つであり、最高のプログラムはしばしば「エレガント」と呼ばれた。「エレガント」とは、数学者が簡潔で力強く、かつ整然とした証明を表現する際に用いる言葉である。
21世紀になると、状況は逆転した。リソースは安価であると認識され、コーディングの迅速性とマーケティングのための目玉機能が優先事項と見なされるようになった。[ 3 ]これは、技術の進歩により処理能力と記憶密度が桁違いに向上し、相対的なコストが同様に桁違いに低下したことが一因である(ムーアの法則とジェボンズのパラドックスを参照)。さらに、コンピュータがビジネスや家庭生活のあらゆるレベルに普及したことで、ソフトウェア産業は1970年代の何倍もの規模になった。現在、プログラムは通常、ソフトウェア開発スタジオ(ソフトウェアハウスまたはソフトウェアファクトリーとも呼ばれる)の委員会によって指揮されるチームによって大量生産され、各プログラマーは全体の一部、つまり1つ以上のサブルーチンのみを担当する。
最後に、ソフトウェア開発ツールや手法は、各機能に対応するためにプログラム全体にわたって変更を加えることが多く、その結果、ソフトウェアの主要な動作に影響を与える大規模なコードが組み込まれることになり、それ自体はめったに使用されない機能をサポートするために必要となる場合がある。特に、利用可能なリソースの進歩により、コード開発を容易にするツールが登場したが、その結果、最終的な効率性に対する優先順位は低下している。
プログラムの肥大化のもう一つの原因は、独立して競合する規格や製品の存在であり、これらが統合の必要性を生み出します。現在では、以前よりも多くのオペレーティングシステム、ブラウザ、プロトコル、ストレージ形式が存在し、相互運用性の問題からプログラムの肥大化を招いています。例えば、かつてはテキスト形式でしか保存できなかったプログラムが、現在ではHTML、XML、XLS、CSV、PDF、DOCなど、さまざまな形式での保存に対応しなければならなくなっています。
ニクラウス・ヴィルトはこの状況をヴィルトの法則で要約しており、それはソフトウェアの速度低下がハードウェアの速度向上よりも速いペースで進んでいるというものである。
ジョエル・スポルスキーは、 2001年のエッセイ「戦略レターIV:ブロートウェアと80/20の神話」 [ 4 ]の 中で、ユーザーの80%は機能の20%しか使用しない(パレートの法則の変形)一方で、それぞれが異なる機能を使用していると主張している。そのため、「軽量」ソフトウェア版は、「肥大化」バージョンにある1つか2つの特別な機能が欠けているため、ほとんどの人にとって役に立たないことが判明する。スポルスキーは、ジェイミー・ザウィンスキーがMozillaアプリケーションスイート(最終的には個別のアプリとして軽量化され、Firefoxウェブブラウザだけが重要な生き残りとなった)について述べた言葉を引用して、この記事を締めくくっている。
「もしそれが本当なら都合がいいのですが、Mozilla が大きいのは、役に立たないガラクタでいっぱいだからではありません。Mozilla が大きいのは、あなたのニーズが大きいからです。あなたのニーズが大きいのは、インターネットが大きいからです。ちなみに、世の中には小さくて軽量なウェブ ブラウザがたくさんありますが、それらはほとんど役に立ちません。[...] しかし、Mozilla を開発した当初、完璧な輝く宝石になることは目標ではありませんでした。」[ 5 ]
ソフトウェアの肥大化は、フレッド・ブルックスが著書『人月の神話』で述べた「第二システム効果」の症状である可能性もある。
「ブロートウェア」とは、上記のように非効率性や機能の蓄積によって肥大化したソフトウェアのことです。[ 4 ]この用語は、通常ハードウェアメーカーによってデバイスにバンドルされている、購入者にとってほとんど不要なプリインストールソフトウェアに対してもよく使用されます。
この用語は、部分的または不完全なアンインストール後に残る、不要で未使用のソフトウェア要素の蓄積にも適用される場合があります。これらの要素には、プログラム全体、ライブラリ、関連する構成情報、またはその他のデータが含まれる場合があります。このような残骸の結果として、パフォーマンスが全体的に低下する可能性があります。不要なソフトウェアまたはソフトウェアコンポーネントは、ハードディスクメモリと RAM の両方を占有し、処理時間を浪費し、ディスクI/Oを増加させ、システムの起動とシャットダウン時に遅延を引き起こす可能性があるためです。最悪の場合、残ったソフトウェアは、必要なソフトウェアの正しい動作を妨げる可能性があります。[ 6 ]
Androidデバイスでは、一部のブロートウェアはADBを使用してユーザー アカウントから無効にできますが、これはアプリケーションを削除するものではなく、ディスク スペースを消費しますが、実行されず、システムを遅くすることはありません。[ 7 ] [ 8 ]ブートローダーのロックを解除することで、ユーザーはブロートウェアのファイルを削除したり、カスタム ファームウェアをインストールしたり、アプリを完全にアンインストールできるルート権限を取得したりできます。[ 9 ]
AppleのiTunesは、単なるメディアプレーヤーから電子商取引や広告プラットフォームへと変貌させようとする試みによって肥大化していると非難されてきた[ 19 ] [ 20 ]。元PC World編集者のエド・ボットは、同様の慣行でWindowsを攻撃する同社の広告戦略は偽善的だと非難した[ 21 ] 。 2019年、AppleはiTunesの閉鎖が間近であることを発表した。ガーディアン紙のコメンテーターはこの動きを「ずっと前から必要だった」と評し、iTunesは「優雅で機能的なデザインを誇る企業としては異例なほど肥大化してしまった」と述べた[ 22 ] 。
Microsoft Windowsも肥大化していると批判されてきました。Windows Vistaに言及し、大幅にスリム化された新しいWindows 7のコア コンポーネントについて議論した際、Microsoft のエンジニアであるEric Traut氏は、「これがWindows 7のコアです。これは、私たちが取り除いたコンポーネントの集合です。多くの人は Windows を非常に大きく肥大化したオペレーティングシステムだと考えていますが、それは妥当な特徴付けかもしれません。確かに大きいです。多くのものが含まれています。しかし、そのコア、つまりオペレーティングシステムのまさにコアを構成するカーネルとコンポーネントは、実際にはかなり合理化されています。」とコメントしました。 [ 23 ] [ 24 ] Ed Bott 氏も懐疑的な見解を示し、Microsoft が販売したほぼすべてのオペレーティングシステムは、 MS-DOSのように現在では正反対と見なされているものでさえ、最初のリリース時に「肥大化している」と批判されてきたと指摘しました。[ 25 ]ポール・サロットの言葉を引用して、ボットは、肥大化の原因は、平均的な家庭ユーザーにはほとんど関係のない、オペレーティングシステムに含まれる多数の企業レベルの機能にあるという意見に同意した。
Nero Burning ROMなどのCDおよびDVD書き込みアプリケーションは、肥大化しているとして批判されている。[ 26 ]エンドユーザー向けに特別に調整されていない余分な機能が、簡易セットアップを通じてデフォルトでインストールされることがある。
多くのテクノロジーブログも、携帯電話のブロートウェア増加の問題を取り上げています。しかし、それらは別の問題、具体的には、ワイヤレスキャリアが携帯電話に、多くの場合簡単に削除できない、あるいは全く削除できないソフトウェアをプリインストールしているという問題を指しています。これはAndroidデバイスに関して最も頻繁に言及されていますが、この現象は他の多くのオペレーティングシステムを実行している携帯電話にも存在します。[ 27 ] [ 28 ]
現在最も人気のあるメッセージングアプリの中には、以前はインスタントメッセージングのみに特化していたものもあるが、機能の肥大化により機能過多になっていると批判されている。[ 29 ] [ 30 ] [ 31 ] [ 32 ] WeChatはスーパーアプリへの変貌の過程で、ゲーム、サブスクリプションサービス、WeChat Pay電子ウォレット[ 29 ]、ニュースアグリゲーター、電子商取引ハブ、電子政府[ 30 ]機能、映画館予約システム、レストラン検索、ライドシェアリング会社[ 32 ]などの機能を追加し、アプリのサイズは2011年の2MBから2025年には750MB以上に増加しました。[ 33 ] Facebookアプリから分離されたFacebook Messengerも同様に、ゲーム、ボット、 SnapchatからコピーしたMessenger Day(ストーリー)、顔フィルター、写真編集機能付きカメラ、落書き描画、絵文字やステッカーの追加などの機能を追加したことで批判されています。[ 34 ] [ 35 ] 2018 年 1 月、Facebook Messaging の責任者であるDavid A. Marcus氏は、アプリ自体が非常に肥大化していることを認め、不要な機能を削除して合理化するためにアプリ全体を再設計することを約束しました。[ 31 ]再設計され合理化されたFacebook Messenger アプリは 2018 年 10 月に発表され、その機能はメッセージ、ストーリー、発見タブ、カメラに絞り込まれています。[ 36 ]
GIMPなどの一部のアプリケーションや、プラグインによる追加機能を備えたソフトウェアは、メインアプリケーションとは別にダウンロードする拡張機能やアドオンを使用します。これらは、ソフトウェア開発者またはサードパーティの開発者によって作成されます。プラグイン、拡張機能、アドオンは、本来メインプログラムに組み込まれているはずの機能を追加するものです。
これらのプラグイン、拡張機能、および/またはアドオンを許可することで、個々のマシンで使用される容量を削減できます。アプリケーション、プラグインインターフェース、およびすべてのプラグインを合わせたサイズは、同じ機能を1つのモノリシックアプリケーションにコンパイルした場合よりも大きくなりますが、各ユーザーは必要なアドオン機能のみをインストールできるため、利用可能なすべての機能を含むはるかに大きなモノリシックアプリケーションを強制的にインストールする必要がなくなります。その結果、コンパクトなパッケージで提供される「簡素化された」または「すぐに使える」アプリケーションが実現し、ユーザーは不足している機能をすぐに追加できるようになります。
オープンソースソフトウェアでは、プリプロセッサディレクティブを使用してコンパイル時に機能を選択的に組み込むという同様の手法が用いられることがある。これはプラグインシステムよりも実装が容易でセキュリティも高いが、特定の機能セットを必要とするユーザーはソースコードからプログラムをコンパイルする必要があるという欠点がある。
ソフトウェアは「機能の漸進的増加」[ 37 ](ザウィンスキーのソフトウェア包絡の法則)によって肥大化することがある。このような肥大化を減らす方法の一つは、 Unixの哲学である「一つのことをうまく行うプログラムを書く」ことであり、単一の複雑なソフトウェアを、パイプ、シェルスクリプト、またはその他のアプリケーション間通信形式を使用して連結できる多数のより単純なコンポーネントに分割することである。
ソフトウェアの肥大化は、大量のコードと依存関係の管理の難しさが増し、結果として脆弱性を見つけて解決するためにコードを調べるのが難しくなるため、より多くの脆弱性を引き起こす可能性があります。 [ 38 ] [ 39 ]
ブロートウェアはマルウェアの一種ではなく、悪意のある目的で設計されたものではありませんが、ブロートウェアは意図せず脆弱性を引き起こし、ユーザーのコンピュータがコンピュータウイルスやランサムウェアに感染するリスクを高める可能性があります。[ 40 ] [ 41 ]
8 リリースプレビューは、Windows 7 と同じハードウェアで問題なく動作します。
ウェアは、ランサムウェアやスケアウェアなどのマルウェアに感染しやすくする脆弱性をコンピュータに導入することもあります。