新・闘わないプログラマ No.44

ソース


海の向こうでは、Microsoftはすごいことを言っていますね。裁判所からの、証拠としてDOSやWindowsのソースを提出せよ、という命令に対して、「ソースが見つからない」だそうで。
あの、もしかしてMicrosoftのソース管理にはMicrosoft Visual SoruceSafeかなんか使っていて、そのバグで、ソースが全部パーになっちゃったとか :-p ←ありそうで恐い

プログラムを作ったことの無い人には、ソースと言ってもピンのこないかも知れませんので、簡単に説明しておきます。
「プログラムを作る」とか「プログラミングする」とか言った場合、そのほとんどの作業は、プログラマが「ソース」を作成することにあります。ソース、あるいはソースファイルまたはソースプログラムとも言ったりしますが、は単なるテキストファイルで、そこに文字としてプログラムを書いていくわけですね。
このソースは、そのままではプログラムとして動かすことが出来ません(例外あり)。「コンパイラ」というプログラムなどを通して、実際にプログラムとして実行できる形式に変換する必要があります。こうやって出来上がったファイル(実行形式ファイル、Windowsのプログラムでしたら「なんとか.EXE」となっているやつがそうです)を実行させるわけです。
一般的には、たとえばパッケージソフトを買っても、ソースファイルは付いてきません。ソースはそのまま実行できるものではありませんし、あっても大部分のユーザーにとっては何の役にも立たないですから、当然と言えば当然の話です。ソースが付いてこないのには、別の理由もあって、それは、ソースは、そのプログラムを作った会社なりのノウハウの塊なわけです。そんなものを安易に公開したら、そこの技術が盗まれてしまうことにもなりかねません。
ソースから実行形式ファイルを作るのは出来ますが、逆は原則として出来ません(全く出来ないというわけでも無いのですが・・・リバースエンジニアリングという言葉がありますが、その具体例の一つとして、実行形式ファイルから技術の盗む、という手法もあります。でも、その場合でも、元の完全なソースを復元することは不可能です)。

そんなわけで、普通の売り物のプログラムはソースを公開したりすることは希なのですが、フリーソフトが活躍しているUNIXの世界では事情が異なります。もともと、さまざまなCPUで動作させる必要があるため、実行形式で配布することが難しい(実行形式はCPUの種類によって異なりますから)ですから、ソースの形で配布して、そのプログラムを動かしたいコンピュータ上でコンパイルするわけですね。
ソースの公開という意味で一頃話題になったのに、Netscape Communicatorがありますよね。プログラムをフリーにした上で、新バージョンのソースを公開するという大胆な手に出ました。あれを聞いて、MicrosoftもDOSやWindowsをフリーにしてソースを公開すればいいのに、なんて話があちこちで囁かれましたが、まぁ無理でしょうね(^^;)

ソースって、ソフトウェア会社にとっては、きわめて大切なものです。人件費の大部分を費やして作成されるのがソースですから。つまり、ソフトウェア会社の財産そのものなわけです。
これだけ大切なものなんだから、きわめて厳重に保管・管理がされていると思われるかも知れませんが、実際はそうでもありません。なんたって、あの世界最大のソフトウェア会社Microsoftですら、「ソースが見つからない」なんて言っているくらいですから :-p
ちゃんとしたソース管理のセクションやらシステムがあるような会社ならいいのですが、そうでないところも多く、個人のパソコンのハードディスクの中にしかソースが無い、なんてこともあったりします。
いま、実際に運用されているシステムの一部を修正しよう、とか思ったときに、そのソースを探すが、見つからない。担当者はすでに退職して・・・なんてこともときどきあったりするのです。または、似たようなソースがたくさんあって、実際に運用されているプログラムのソースはいったいどれ?、なんてこともよくあります。
ソースって、システムを運用する上では、直接必要にはなりませんから、意外と管理がおろそかになってしまったりします。よほど注意しておかないと、すぐ紛失してしまったり、どれが本物なのかわからなくなってしまいます。
そのため、コンピュータ上でソースを管理するシステムというのがいくつかあります。このコラムの最初で取り上げたMicrosoft Visual SourceSafeなんてのもその一つですが、これ、実際に使っているところってあるんでしょうか?? 私が調べた範囲ではすごく使いづらそうだったですし、そもそもとんでもないバグがあったりしそうで恐くて使えません。UNIXの世界ではSCCSとかRCSとか、あと何がありましたっけ?、ど忘れしてしまいましたが、いろいろ定評のあるやつがあります。

まぁ、どんなソース管理をしようと、あたりまえのことですが、ソースはコンピュータのディスク上にファイルとして保管します。ご承知のとおり、ディスクってのは、壊れるものなんですね、それもいきなり。ディスクが壊れると中のデータは原則として読み出せませんから、そこに大切なソースファイルが入っていたりすると、大変なことになります。
そこで通常は、ディスクアレイを使った冗長構成にします・・・といっても分からない人には分からないですね(あたりまえか)。このコラムでは詳しい話はしませんけど、この方式としてよく使われているものに「RAID 1」と「RAID 5」というのがあります。
RAID 1は通常「ミラーリング」と言って、2台のディスクを組にして、同じデータを両方のディスクに書く方式です。だからその2台のどちらかが壊れても、データは救えるというわけですね。ただこの方式は効率が悪い、ということでよく使われるのがRAID 5です。これは、3台以上のディスクを組にして使うのですが、組になっているディスクのうち1台の故障があってもデータは失われません。でも、2台目のディスクが故障した瞬間、すべでのデータが失われる、というある意味では恐い方式です。
だからRAID 5は、ディスクの故障を即座に検知して、故障したディスクをすぐに新しいディスクと交換する必要があります。これを怠ると、2台目の故障ディスクが発生した瞬間、今までのデータがすべてパーに(^^;)
これは私のところじゃなくて、知り合いから聞いた話ですが、そこではこの2台目の故障で、カットオーバー寸前のシステムのソースその他諸々がパーになったそうです。その後の悲惨な状況は、お話するまでもないと思います(^^;) ここでは、ディスクアレイ装置が人目に付かないところにあって、しかもだれも故障を監視してなかったことから起こった悲劇です。

その他にも、誤ってソースを消してしまった、という話は枚挙にいとまがありません。
「すいません、実行ファイルからソースを作るにはどうやったらいいんですか?」
「それは不可能だよ」
「え〜、でもソースファイル消しちゃったんです。なんとかなりませんか」
「なんともならない」
「だからそこをなんとかして下さい」
「だから出来なって。諦めてもう一回作りなさい」
「そんな〜、あのプログラム、作るの大変だったんですよ」
「そんなの知らないよ。出来ないものは出来ないんだから」
なんて会話を、私も何度もしたことがありますが、でもあんまり重大な問題にはならないことが多いですけどね。だいたい、こんなこと言ってくるのって新人プログラマだから、大した物作ってないですから、ね。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp