Re: iOSがAndroidより信頼性が高いと言われる本当の理由

ちょっと気になる bLog 記事(↓)を見かけちゃったので、今回はそのトラバということで(別に反論という訳ではないです)。

愛と苦悩の日記 - iOSがAndroidより信頼性が高いと言われる本当の理由

この記事はおそらく、オープンソースソフトウェア(以下、OSS)やその開発者へではなく、ソフトウェア工学の都合の良い部分だけを都合よく解釈して吹聴する一部の「不誠実で声の大きな人達」への批判だとは思うのだけど、文中では批判の対象が「マイクロソフトが大嫌いなITの専門家」なのか「自称ITジャーナリスト」なのか明確でなかったんですよね。私はコンピュータ・プログラマを生業としている者なので一応 IT という方面の専門家の端くれと見るべきだし、マイクロソフトも嫌いなので「あ、何か言わなきゃダメかな?」と思いw 自分なりの「伽藍とバザール」観をまとめてみました。

まず、揚げ足を取るようで申し訳ないですが、誤解を招きやすい文章が多いように思うのですわ。

その一つに、Linuxソースコード(プログラムそのもの)が公開されているので、Windows Serverよりもウィルスなどの不正なプログラムが混入されにくい。したがってWindows Serverよりもウィルスの攻撃に強い、というものがあった。

とか、

なので、たとえ誰かが悪意で不正な働きをするプログラムを忍び込ませても、あっという間に見つかってしまうし、誰かがLinuxの弱点を突くようなウィルスを開発しても、あっという間に誰かがその弱点を改善してしまう。

とか。これだとまるで、コンピュータ・ウィルスの実体が、プロダクトのソースコードに紛れ込まされた悪意あるコードであるかのように読めてしまうのではと。そういったケースは時々ありますが、それはそのまま「混入された悪意あるコード」等と表現され、コンピュータ・ウィルスとは呼ばれません。おそらく筆者の方は、プログラムの脆弱性の事を言いたかったんだと思いますが、そこは大事なポイントなので明確に書いて欲しかったです。

さて、エリック・レイモンド氏が「伽藍とバザール」の中で、ソースコードをオープンにした前提での共同作業によるソフトウェア開発方式(所謂バザール方式)において、「ウィルスの攻撃に強い」と言ったかどうかは知りませんが(すみません、原典を読み直している時間がなくて)、私としては主旨は「伽藍方式に比べて目玉の数(つまり関与するプログラマ数)が多い開発・保守体制を作り易く、そのぶん(脆弱性等も含めた)バグや不具合の原因となりうるコードが発見・手当されるチャンスが多い」ということだと解釈しています。これは例えば、OSS であっても少人数で開発されて誰のチェックも受けていないマイナーなプロダクトであれば、恩恵に預かれないということが分かります。つまり、バザール方式は「目玉の数」という一定の条件を満たした場合に長所を発揮する訳ですね。

「目玉の数」を左右する条件は、プロダクトの人気・不人気以外にも、ソフトウェア・プログラムとしての難易度等もあるんじゃないかと思います。高度な数学を用いて構築された理論の実装としてのソフトウェア(暗号や画像・音声処理等)は、プログラム言語が読めたからといって簡単に理解できるものではないので、それだけ関与できる「目玉の数」を制限することになるのではないでしょうか。こういった場合には潤沢な開発リソースを用意できる企業の方がむしろ「目玉の数」を増やせるのかもしれません。また自信はありませんが、暗号ソフトウェア等でアルゴリズム自体が堅牢性の要である場合には、ソースコード(=アルゴリズムの具体)をクローズドにした方が有利ということも考えられます。

また、ソフトウェアの品質はリリース時にすべて決定される訳ではなく、不具合が発見された後にどれだけ迅速な手当がなされるかというサポートの側面も大きいと思いますが、この点でバザール方式の方に安心感を覚える IT 関係者は多いのではないでしょうか。私自身、ずいぶん前の話ですが、マイクロソフト主催の開発者向けプログラム(有料)に参加した後で製品(開発用ミドルウェアの類)に不具合を発見、現象を報告したところ原因不明との解答をもらい、「んなこと言ったってこっちは納期があるんだよ!!」とブツブツいいながら調査を進めてどうやら特定箇所の日本語処理に原因がありそうなことまで推定できたので、対処療法的に問題を回避した、という経験があります。日本語処理の件は勿論マイクロソフトに報告しましたが、その後修正プログラムが出たという話は聞きませんでした。お金払ってバグレポートから原因調査までして、何やってんだか... これが OSS であれば、自分でソースコードを追いかけることが可能ですし、技術的に敷居が高い場合でもバグレポートを送ることで他者による手当が「期待」できる訳です。

というように、バザール方式は品質の高いプログラムを作る魔法の杖ではなく、ごく当たり前のスジ論に基づいたひとつの開発方式に過ぎない訳で、プロダクトの種別や開発期間・資金と様々なファクタを考慮に入れて開発方式の選択はなされるべき、という当たり前の結論に落ち着いちゃいました。

※あれ? iOS って Darwin を含んでるんでしたっけ? そうなら一部 OSS ってことだよなぁw