ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

プログラム、ソースコード、ウイルス

首輪などから指紋は検出されなかったが、記憶媒体には遠隔操作ウイルスの設計図にあたる「ソースコード」があり、捜査本部は真犯人が保存したものと断定した。江の島に設置されていた計35台の防犯カメラなどの解析の結果、首輪を取り付けた男は片山容疑者の可能性が高いことが判明。追跡捜査から居場所のマンションも突き止めた。

今日1日色々ネタにされていますが、5人目の被疑者があがったようですね。報道の姿勢や警察の捜査能力が批判されているのはもちろんのこと、なにやら発言する人が登場する用語の概念をよくわかっていないせいでさんざん弄ばれています。今回はちょっとそのへんを整理してみましょう。

そもそもプログラムってなんなんでしょうね

普遍的な意味では、あるものごとの進行や順序を書き並べたものです。例えば「卒業式のプログラム」を日本語でいえば「卒業式式次第」といったところでしょうか。内容はたぶんこんな感じですね。

  1. 開式の辞
  2. 国歌・校歌斉唱
  3. 卒業証書授与
  4. 校長祝辞
  5. 来賓祝辞
  6. 祝電・祝詞読み上げ
  7. 在校生祝辞
  8. 卒業生答辞
  9. 記念品贈呈
  10. なんか歌う
  11. 閉式の辞

こういうのもプログラムと言います。
情報工学におけるプログラムといえばコンピューターに対する命令を書き並べたものです。記述のために「プログラミング言語」と総称される人工的な言語を用います。細かく見ていくといくつもの分類ができるのですが、ここでは省略します。目的や思想に応じて様々なプログラミング言語が発明され、世界中でたくさんのプログラマーたちがコンピューターとお話するのに使っています。

ソースコードとはそもそもなんなのか

プログラムをプログラミング言語で記述したものです。たいていはテキストファイルです。というかテキストファイルではないソースコードを見たことがありません。使用するプログラミング言語の文法やしきたりに則り、コンピュータにやってもらう命令を羅列したものともいえます。規模の小さいものはひとつのファイルにまとまっているのですが、たいていのプログラムはプログラミング言語のルールやプログラム全体の保守性の確保などの理由で複数のファイルに分けてられています。
実はこれだけがあってもコンピューターに命令することはできません。コンピューターはソースコードそのものを命令として読み取ることができないからです。プログラムとして実行するには、大きく2通りのパターンがあります。ひとつは、俗に「ビルド」や「コンパイル」といわれる作業をすることで、コンピューターが理解できる命令の羅列に変換する方法です。もうひとつは、「インタープリタ」というプログラムにソースコードを読ませて、逐次コンピューターが理解できる命令に変換してプログラムを実行する方法です。どちらにしても、実行ファイルを生成するためのコンパイラ*1と呼ばれるものか、インタープリタがなければプログラムとしては動きませんし、OSの種類やバージョンによっては動作しない場合があります。

ライブラリというやつもあるよ

モダンなプログラミングでは、命令を一から十までソースコードソースコードに書き込むということは滅多にありません。じゃあどうなっているのかというと、多くのプログラムで使えそうな機能を「ライブラリ」というものにまとめておき、プログラムが必要なときに参照するというふうになっています。これこれのライブラリが必要ということは、ソースコードに決まった書き方で書く、ソースコードに読み込ませるときにオプションを指定するなどといった方法でコンパイラやインタープリタに知らせます。もちろん、プログラムを実行するためには事前に特定の場所にライブラリを置いておく必要があります。

ウイルスとは

まず、生物学におけるウイルスについておさらいしましょう。このウイルスは、生物と非生物の中間に位置する存在です。一応○○科○○みたいな感じで種別名がつけられ、生物っぽい扱いをされていますが、どっちなんだよという議論が未だに絶えません。生物としての要件を完全には持ち合わせておらず*2、生存するために他の細胞に寄生する必要があります。
情報工学におけるウイルスも同じく、「他の生物(ファイル)に寄生して増殖する」という特徴があります。ウイルス意外に悪さをするプログラムに「ワーム」「トロイの木馬」「バックドア」「スパイウェア」などがありますが、最近はこれらの特徴をいくつ兼ね備えたもの、分類が難しいものが湧いてきたので、まとめて「マルウェア(不正ソフトウェア)」と言うようになってきました。

ソースコード=設計図?

というわけで冒頭の引用に戻るわけですが、ソースコードが設計図なのかと言われるとたぶん違います。少なくとも人間にとっては。
現在のソフトウェア工学では、ソフトウェアを作る最初のほうで設計図を作ります。しかしそれは人間にとってわかりやすい自然言語で書かれたドキュメントであったり、しきたりに従って描かれた図であったりします。全体の設計図はもちろんのこと、各機能についての設計図でも大体そうです。「設計図を見てください」と言ってソースコードをシュッと机の上*3で滑らせるのはありえないと思います。
人間が設計図を読むという考え方で見れば、ソースコードの立ち位置はこうなんじゃないでしょうか。

プログラム
コンピューターがわかるように翻訳された、コンピューターへの命令の羅列
コンパイラ・インタープリタ
ソースコードをコンピューターが読めるように翻訳する
ソースコード
コンピューターへの命令を書き並べたもの。ただしそのままではコンピューターは読めない。
プログラマ
設計図を読み取り、コンピューターへの命令をソースコードの形で書き並べる。自分で設計図を書く人が多そうだが、設計者が別にいることもある。

ここまで書きましたが、間違ってないと思いたいです、はい。

*1:正しくはこれだけではありませんが、簡単のために説明を省きます

*2:単体でたんぱく質を合成できない、細胞質を持たない、エネルギーを自己生産できない

*3:もしくはデスクトップ