ソースコード
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ソースコード(Source code、ソースプログラム)とは、ソフトウェア(コンピュータプログラム)の元となる人間が記述した一連の文字の羅列である。
目次 |
[編集] 概要
テキストファイルであるソースコードは目的となるプログラミング言語の言語仕様に従って書かれており、コンピュータに対する一連の指示である。単にソースという場合も多い。その他には、コードやプログラムリストと呼ばれることもある。ソースコード(原始プログラム)が書かれたファイルをソースファイルという。
対義語としては、マシンコード、バイナリコード、オブジェクトコード、バイトコードなどの機械語を意味する[1][2]。
プログラミング言語を用いて、コンピュータに何か有用な作業をさせるための指示を書き上げることがプログラミングであり、書かれた指示の羅列がソースコードである。これは(機械語と比べて)人が読み書きしやすい形で記述されている。
ソースコードを記述する過程のことをコーディングと呼び、たとえば「新たなルーチンをコーディングする」などと使う。 ソースコードを記述する人間はプログラマーと呼ばれ[3]、プログラマーは仕様書等に示された入出力の指定や処理手順の概要に基づいて、場合によってはソースコードを記述する前に処理手順を示したフローチャートや状態遷移図を描き、モデリング言語等の利用なども含めて、最終的な生産物としてのソースコードを書き出していく。
コンピュータのプロセッサはソースコードを直接解釈することができない。コンパイラ言語の場合は、このソースコードをあらかじめコンパイラで機械語に変換(コンパイル)してからコンピュータに実行させる。インタプリタ言語では、ソースプログラムをインタプリタが実行時に解釈し実行するので、コンパイルが不要である[4]。
プログラムの大きさは、バイナリコードの容量かソースコードの行数で示すことが多く、ソースコードの文字数ではあまり表現されない。
[編集] ソースコードの公開・非公開
ソースコードはソフトウェアの開発段階を経て機械語を生成した後でもそのソフトウェアの保守に不可欠であり、類似ソフトウェアの新たな開発や既存ソフトウェアの改善に有用であり、また、ソフトウェアに制御されるハードウェアの内容を知る大きな手がかりともなるため、ソースコードを独占あるいは逆に公開することは大きな意味を持つ。[5]
一般に人間には機械語は扱いがたく、20世紀末から始まったPCで使用されている大規模なOSや、アプリケーション・プログラムを機械語で書くことはほとんど不可能である。そのため、通常はプログラミング言語によって書かれたソースコードとしてプログラムを作成し、その後にコンパイラなどを用いてまとめて機械語に変換する。変換された機械語プログラムは延々と続く16進数などで表示できるが人間には理解が極めて困難である。従って、既存のプログラム上の誤りであるバグを修正したり、改良を加えたりするためには元のソースコードが必須である。
知的財産権を収益の根幹とするソフトウェア産業では、ソースコードを企業秘密として保持し、使用者には機械語プログラムの複製の使用権を販売することで利益を得ている。これらの企業にとってはソースコードは独占すべき重要な資産である。もしソースコードが流出すれば、自社の開発成果が競合他社の製品に利用される恐れがある。
これに対し、ソースコードを積極的に公開しようとする考え方もある。
詳細は「オープンソース」を参照
- アメリカ合衆国の政府資金によるソフトウェア開発では、開発成果は納税者である国民に還元すべきであるとの考えから、ソースコードを一般に公開する場合も多い。
- リチャード・ストールマンとフリーソフトウェア財団の考えによれば、コンピュータの利用者は自由にソフトウェアによる恩恵を享受できるべきであり、その実現に反するソースコードの独占・隠蔽は許されない不道徳である(フリーソフトウェア運動)。
- エリック・レイモンドに代表されるオープンソース支持者の中には、ソースコードの公開がソフトウェアの発展のためには有用であるという考え方もある。[6]
- レッドハットのビジネスモデルのように、知的所有権よりはブランドイメージとユーザーサポート、安心感を売る形態の場合、ソースコードの公開が戦略的に有意義であることもある。ソースコードを独占しておくよりは、それを公開することでそのソフトウェアを普及させ、市場の拡大に役立てた方が良い場合である。
- 備考として現在大学や研究所でよく使用されているOSのLinuxが世界中に広まったのは、開発者である学生(リーナス・トーバルズ)がそのソースコードを一般公開したのがもとになったからである。こういったプラス面もある。
[編集] リーバース・エンジニアリング
実行コードしか入手できない場合であっても、時間と手間を掛ければリーバース・エンジニアリングによってソースコードに近いものを作りだすことは可能である。このため、真に機密保持が重要なプログラム、例えば暗号化装置のようなものでは意図的にプログラムが複雑に構成され、物理的にも読み出しにくいハードウェアに記録されているものがある。
[編集] 兵器のソースコード
兵器で使用されるプログラムのソースコードはきわめて重要な機密とされる場合が多い[7]。 プログラム独自の問題として、輸出する兵器の制御プログラム内にキルコードと呼ばれるトロイの木馬型の罠を含めておけば、将来、輸出先が敵対した場合でも容易に無能力化したり情報を操作したりすることができ、また、そこまで意図的でなくともプログラムに起因する兵器の限界や制限を知っていれば対抗手段を得られる可能性が高くなる、という指摘がある。
兵器の設計や生産・運用・保守の全般についてはライセンス生産の項を参照のこと。
[編集] 注記
- ^ 機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。
- ^ ソースコードのような人間が読める文字列形式の情報一般は「ヒューマン・リーダブル」と呼ばれ、純然たる機械語である「マシン・リーダブル」なものとは区別される。アセンブリ言語で書かれたプログラムはソースコードと呼ばれないがヒューマン・リーダブルである。
- ^ 過去にはコーダーと呼ばれた時もある。
- ^ 過去にはソースコードと機械語の間に中間言語と呼ばれる中間生成ファイルが存在する言語処理系があったが、21世紀現在では人間が意識することはなくなっている。
- ^ 但し、ウェブサイト作成に使われるHTMLや、CSS、JavaScriptなどのウェブページのソースは、現在開いているウェブページの一部もしくはすべてを誰でも見ることが可能である。
- ^ オープンソース支持者の考えでは、例えば有用なソフトウェアの場合、ソースコードを公開すると直ちに世界中のソフトウェア開発者が興味を引かれてソースコードを読み漁るので、重要なバグは直ちに修正される。足りない機能は直ちに追加される。レイモンドはこのことを論文「伽藍とバザール」の中で「目玉の数さえ十分あれば、 どんなバグも深刻ではない」[1]と言い表した。これはLinuxのような成功したオープンソースプロジェクトに共通する性質である。
- ^ 軍用機の例では日本の国産戦闘機開発計画FSXの日米交渉に際して、米国政府より米国製の既存戦闘機F-16のアビオニクス用ソースコードの供与を受けることの可否が議論された。もしもソースコードが開示されないままブラックボックスの形態で供与されていた場合、プログラムに問題があれば米国側での修正を待つ間は日本側では対処出来なくなり最悪では完成したFSX機が使用出来なくなる。米国側で修正の必要性や修正後の再供与の可否を交渉材料とされる可能性も生じた。ソースコードが開示されているならば必要に応じて修正が可能であり、これらの危険性からは免れる。結果として、F-16のアビオニクス用ソースコードの供与は得られず、FSX計画で作られたF-2支援戦闘機のアビオニクス用プログラムは日本の軍需企業が独自に開発した。この日本のF-2用のソースコードは米国側に開示されたため、日米間の不平等な関係だけでなく武器の国外輸出や技術提供を禁じた原則論を逸脱した行為として批判を受けた。

