ソースコード
ソースコード(Source code、ソースプログラム、原始プログラム)とは、人間が記述した、ソフトウェア(コンピュータプログラム)の元となる一連の文字の羅列である。
概要
テキストファイルであるソースコードは、プログラミング言語の言語仕様に従って書かれており、コンピュータに対する一連の指示である。単にソースという場合も多い。その他には、コードやプログラムリストと呼ばれることもある。ソースコード(原始プログラム)が書かれたファイルをソースファイルという。
人間が読み書きすることを前提とした形式(ヒューマン・リーダブル)であるという点で、マシンコード、バイナリコード、オブジェクトコード、バイトコードなどの機械語(マシン・リーダブルなもの)の対義語として用いられる場合もある。
プログラミング言語を用いて、コンピュータに何か有用な作業をさせるための指示を書き上げることがプログラミングであり、書かれた指示の羅列がソースコードである。これは(機械語と比べて)人が読み書きしやすい形で記述されている。
ソースコードを記述する過程のことをコーディングと呼び、たとえば「新たなルーチンをコーディングする」などと使う。 ソースコードを記述する人間はプログラマーと呼ばれ[1]、プログラマーは仕様書等に示された入出力の指定や処理手順の概要に基づいて、場合によってはソースコードを記述する前に処理手順を示したフローチャートや状態遷移図を描き、モデリング言語等の利用なども含めて、最終的な生産物としてのソースコードを書き出していく。
コンピュータのプロセッサはソースコードを直接解釈することができない。アセンブリ言語の場合は、このソースコードをアセンブラで機械語に変換する。コンパイラ言語の場合は、このソースコードをあらかじめコンパイラで機械語に変換(コンパイル)してからコンピュータに実行させる。インタプリタ言語では、ソースプログラムをインタプリタが実行時に解釈し実行するので、コンパイルが不要である[2]。
プログラムの大きさは、バイナリコードの容量かソースコードの行数で示すことが多く、ソースコードの文字数ではあまり表現されない。
ソースコードの公開・非公開
ソースコードはソフトウェアの開発段階を経て機械語を生成した後でもそのソフトウェアの保守に不可欠であり、類似ソフトウェアの新たな開発や既存ソフトウェアの改善に有用であり、また、ソフトウェアに制御されるハードウェアの内容を知る大きな手がかりともなるため、ソースコードを独占あるいは逆に公開することは大きな意味を持つ。[3]
一般に人間には機械語は扱いがたく、20世紀末から始まったPCで使用されている大規模なOSや、アプリケーション・プログラムを機械語で書くことはほとんど不可能である。そのため、通常はプログラミング言語によって書かれたソースコードとしてプログラムを作成し、その後にコンパイラなどを用いてまとめて機械語に変換する。変換された機械語プログラムは延々と続く16進数などで表示できるが人間には理解が極めて困難である。従って、既存のプログラム上の誤りであるバグを修正したり、改良を加えたりするためには元のソースコードが必須である。
知的財産権を収益の根幹とするソフトウェア産業では、ソースコードを企業秘密として保持し、使用者には機械語プログラムの複製の使用権を販売することで利益を得ている。これらの企業にとってはソースコードは独占すべき重要な資産である。もしソースコードが流出すれば、自社の開発成果が競合他社の製品に利用される恐れがある。
これに対し、ソースコードを積極的に公開しようとする考え方もある。 テンプレート:Main
- アメリカ合衆国の政府資金によるソフトウェア開発では、開発成果は納税者である国民に還元すべきであるとの考えから、ソースコードを一般に公開する場合も多い。
- リチャード・ストールマンとフリーソフトウェア財団の考えによれば、コンピュータの利用者は自由にソフトウェアによる恩恵を享受できるべきであり、その実現に反するソースコードの独占・隠蔽は許されない不道徳である(フリーソフトウェア運動)。
- エリック・レイモンドに代表されるオープンソース支持者の中には、ソースコードの公開がソフトウェアの発展のためには有用であるという考え方もある。[4]
- レッドハットのビジネスモデルのように、知的所有権よりはブランドイメージとユーザーサポート、安心感を売る形態の場合、ソースコードの公開が戦略的に有意義であることもある。ソースコードを独占しておくよりは、それを公開することでそのソフトウェアを普及させ、市場の拡大に役立てた方が良い場合である。
- 近年利用率が高まったLinuxはリーナス・トーバルズが、ソースコードを一般公開したのが、最大の原因でもある。
リバース・エンジニアリング
実行コードしか入手できない場合であっても、時間と手間を掛ければリバース・エンジニアリングによってソースコードに近いものを作りだすことは可能である。このため、真に機密保持が重要なプログラム、例えば暗号化装置のようなものでは意図的にプログラムが複雑に構成され、物理的にも読み出しにくいハードウェアに記録されているものがある。
兵器のソースコード
兵器で使用されるプログラムのソースコードはきわめて重要な機密とされる場合が多い[5]。 問題として、輸出する兵器の制御プログラム内にトロイの木馬を含めておけば、輸出先と敵対した場合でも優位に立つことができ、プログラムに起因する限界や制限を知っていれば、対抗手段を得られる可能性が高くなる、という指摘があるテンプレート:要出典。