ogijunのあとで書く日記 : あなたがMacを使うべき10の理由
最近話題になっているエントリーで、確かにすごく興味深いし、実際「俺もMac使いてぇ~」と思わせてくれる文章ですが、どうしても一点だけ賛同できない「理由」がありました。「Macは安全(secure)である」というパラグラフです。ここでのogijunさんのロジックは、「1.MacはUnixである」「2.Unixは枯れている(歴史があり不具合が取り除かれている)のでsecureである」「3.よってMacはsecureである」という三段論法です。僕が気になるのは「2.Unixは枯れているのでsecureである」の部分です。
まず「Unixは枯れている」という表現は、事実と異なります。現在Unixという名称で呼ばれる*BSDやSolaris、AIX、HP-UXは、実際どれも完全な別物です。Linuxも含めてベースとなる思想(たとえばスーパーユーザー名はrootでそのUIDは0とか)は同一のものですが、その実装はそれぞれ全く異なるものです。「Unix」というのはあくまで「Unix系OS」の総称であり、「Unix」というOSが存在するわけではありません。「個々のOSはそれぞれ独自の実装がなされており、かつ日々新しい機能が追加されていっている状況をかんがみれば、「Unixは枯れている」という表現が少しナイーブに過ぎるように思えます。そもそも枯れているという点では、WindowsXPのベースとなっているNTカーネルは10年以上の歴史を持つ、非常に枯れたOSです。NTカーネルといわず「Windows」という枠で語るならば(「Unix」という枠で語るように)、その歴史はもっと長くなります。そんな議論って、意味が無いですよね。
そもそも「OSがセキュアである」というのはどういうことなのでしょう?僕はソフトウェアのセキュリティに関する問題は「仕様および実装のバグ」と「利便性とのトレードオフ」の2つからなるものだと考えます(単なる僕の思いつきなので、違ってたら指摘してください!)。
例えばCSS(クロスサイトスクリプティング)やSQLインジェクションは、「そこにHTMLタグやSQLが入力されるかもしれないということを想定していなかった」ことによる仕様のバグ、バッファーオーバーフローは領域の境界を考慮することなくメモリ操作をしてしまうことによる実装のバグだといえます。バグの多少とその対応スピードは、「セキュアであるか」の非常に大きなポイントです。このバグの多少は(主に)開発エンジニアのレベルに関する問題であり、対応スピードは(主に)その会社の意識に関する問題です。個人的な意見ですが、僕はAppleもMicrosoftも一流のエンジニアが製品を開発し、会社としても非常に高い意識でバグへの対応を行っており、どちらもこの点では合格点を与えてよいのではないかと思います。
バグというものは誰がどう考えても「無いほうがいい」ものですが、もうひとつのセキュリティ問題である「利便性とのトレードオフ」については事情は若干複雑です。たとえばWindows NT4ではWebサーバであるIISがデフォルトで起動していましたが、現在のWindows Server 2003では明示的に起動させる必要があります。同様に、以前は自動的にインストールされていたActiveXが、XPのSP2以降はそれがデフォルトでブロックされてしまったりします。これが「利便性とのトレードオフ」です。ActiveXは自動的にインストールされた方が明らかに便利ですが、悪意のあるソフトウェアが実行されるかもしれない。確かに以前のWindows(というかMicrosoft製品)は「利便性」に重きを置きすぎていたような気がします。こここそが、「Windowsは危険だ」と言われ続けていた理由だと思います。最近は利便性を犠牲にしてもセキュリティを高めるという方針が見て取れますが。なお、これはあくまでトレードオフの問題なので、どちらが良い・悪いということではなくあくまでバランスが重要であり、当然最適なバランスというのは人によって異なるわけです。
長くなってしまいましたが、まとめます。
「Unixは枯れている」という表現は、現在のUnix系OSの多様かつ継続的な進化を考えれば、正確ではない。またソフトウェアが「セキュアであるかどうか」は「バグ」の問題と「利便性とのトレードオフ」の問題の2つからなり、これまでWindowsにおいて問題とされていたのは「バグ」ではなく「利便性とのトレードオフ」の方である。「利便性とのトレードオフ」はあくまでトレードオフなのでどちらが良い・悪いとは単純に断じれないが、最近はMicrosoftも利便性を犠牲にしてでもセキュアであることに重きを置くようになっている。
という感じです。
で、結論として「Windowsと*nix(Unix/Linux)はどちらがセキュアなのか?」についての僕の答えは、「そんな議論は意味が無い」になるわけです。上記のような理由だけでなく、シェアや利用目的や利用ユーザー層なんかに違いがありすぎますからね。