ソースコード
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(2017年10月) |
ソースコード(英: source code)とは、コンピュータプログラミング言語で書かれた、コンピュータプログラムである文字列(テキストないしテキストファイル)のことである。
目次
1 概要
2 ソースコードの公開・非公開
3 リバース・エンジニアリング
4 兵器のソースコード
5 注記
6 関連項目
概要
コンピュータプログラムのことを「コード」と呼ぶ慣習は元々は、プログラミング言語が広く使われるより以前のコンピュータの黎明期に、機械語ないしそれを直接表現する、「ニモニック」(mnemonic) によるアセンブリ言語のプログラムが、まるで暗号のようだ、ということで出来たものである(なお、暗号学では「コード」とは暗号の分類の一つである。「コード (暗号) 」の記事などを参照)。
よってその由来からは、「ソースファイル」はともかく「ソースコード」とはコンピュータプログラムのものだけを指すことになるが、ハードウェア記述言語によるハードウェアの記述なども広義としてソースコードと呼ばれていることもある。
また語としては、コンパイラによって変換される先のオブジェクトコードや実行ファイル(実行可能バイナリ)などの機械語コードやバイトコードなど中間コードに対する対義語といった面もある。一方インタプリタはソースコードから直接、解釈(実行)をおこなう。なお、コンパイラとインタプリタの関連は、二村射影により定式化されている。
設計から実装へ、というプログラミングの過程(詳細は「プログラミング (コンピュータ) 」の記事を参照)で、ソースコードを記述することを特に指してコーディングという。これは元々は前述のような「コード」という語の由来から、アセンブリ言語のようなごく低水準の言語でプログラムを書く作業、というきわめて限定された意味から派生して、一般にソースコードを記述する、という意味になった語である。しかし、近年[いつ?]はHTMLを書くという意味にも使われるなど濫用され気味である(なお、デモシーンでは機械語のテクニックを駆使して高効率のプログラムを書く、というような本来の意味に近い意味で使われている)。
ソースコードの公開・非公開
ソースコードはソフトウェアの開発段階を経て機械語を生成した後でもそのソフトウェアの保守に不可欠であり、類似ソフトウェアの新たな開発や既存ソフトウェアの改善に有用であり、また、ソフトウェアに制御されるハードウェアの内容を知る大きな手がかりともなるため、ソースコードを独占あるいは逆に公開することは大きな意味を持つ[1]。
一般に人間には機械語は扱いがたく、20世紀末から始まったPCで使用されている大規模なOSや、アプリケーション・プログラムを機械語で書くことはほとんど不可能である。そのため、通常は人間にとって理解のしやすいプログラミング言語によって書かれたソースコードとしてプログラムを作成し、その後にコンパイラなどを用いてまとめて機械語に変換する。変換された機械語プログラム(バイナリ)は延々と続く16進数などで表示できるが人間には理解が極めて困難である。従って、既存のプログラム上の誤りであるバグを修正したり、改良を加えたりするためには元のソースコードが必須である。
知的財産権を収益の根幹とするソフトウェア産業では、ソースコードを企業秘密として保持し、使用者には機械語プログラムの複製の使用権を販売することで利益を得ていることが多い。このような考え方の下に開発されているソフトウェアはプロプライエタリ・ソフトウェアと呼ばれる。これらの企業にとってはソースコードは独占すべき重要な資産である。もしソースコードが流出すれば、自社の開発成果が競合他社の製品に利用される恐れがある。
これに対し、ソースコードを積極的に公開しようとする考え方もある。
アメリカ合衆国の政府資金によるソフトウェア開発では、開発成果は納税者である国民に還元すべきであるとの考えから、ソースコードを一般に公開する場合も多い。
リチャード・ストールマンとフリーソフトウェア財団の考えによれば、コンピュータの利用者は自由にソフトウェアによる恩恵を享受できるべきであり、その実現に反するソースコードの独占・隠蔽は許されない不道徳である(フリーソフトウェア運動)。
エリック・レイモンドに代表されるオープンソース支持者の中には、ソースコードの公開がソフトウェアの発展のためには有用であるという考え方もある。[2]
レッドハットのビジネスモデルのように、知的所有権よりはブランドイメージとユーザーサポート、安心感を売る形態の場合、ソースコードの公開が戦略的に有意義であることもある。ソースコードを独占しておくよりは、それを公開することでそのソフトウェアを普及させ、市場の拡大に役立てた方が良い場合である。
近年[いつ?]利用率が高まったLinuxは、リーナス・トーバルズがソースコードを一般公開したのが、最大の原因でもある、と文献などにもよくあるが、実際にはそもそも、その前にあったUNIXという存在が最も最大の原因である。[要出典]
リバース・エンジニアリング
通例、ソースコードから実行コードへの変換で多くの情報が失われるため、実行コードから完全なオリジナルのソースコードを得ることはできない。しかし、実行コードしか入手できない場合であっても、時間と手間を掛ければリバース・エンジニアリングによってソースコードに近いものを作りだすことは可能である。このため、真に機密保持が重要なプログラム、例えば暗号化装置のようなものでは意図的にプログラムが複雑に構成され、物理的にも読み出しにくいハードウェアに記録されているものがある。(セキュリティについては隠蔽によるセキュリティも参照のこと。)
Java VMや.NET Frameworkなど、仮想マシンあるいは中間言語方式のフレームワーク上で動作するアプリケーションソフトウェアはリバースエンジニアリングしやすい性質を持つが、第三者によるリバースエンジニアリングを防止するために、難読化 (obfuscation) を施すこともある。
兵器のソースコード
兵器で使用されるプログラムのソースコードはきわめて重要な機密とされる場合が多い[3]。
プログラムに起因する兵器の限界や制限を知っていれば、対抗手段を得られる可能性が高くなる、という指摘がある[要出典]。
注記
^ ただし、動的なウェブページの制御に使われるプログラミング言語であるJavaScriptのソースコードは、ウェブサイト作成に使われるHTMLやCSS同様、本来ウェブブラウザでいったんローカルにダウンロードして実行するものであるため、閲覧可能なウェブページのものであれば誰でも見ることが可能である。
^ オープンソース支持者の考えでは、例えば有用なソフトウェアの場合、ソースコードを公開すると直ちに世界中のソフトウェア開発者が興味を引かれてソースコードを読み漁るので、重要なバグは直ちに修正される。足りない機能は直ちに追加される。レイモンドはこのことを論文「伽藍とバザール」の中で「目玉の数さえ十分あれば、どんなバグも深刻ではない」[1]と言い表した。これはLinuxのような成功したオープンソースプロジェクトに共通する性質である。
^ 軍用機の例では日本の国産戦闘機開発計画FS-Xの交渉に際して、原型となった戦闘機F-16の飛行制御用プログラムについて、ソースコードの閲覧を許すソースライセンスの供与の可否が米国で問題となり、否決されたという例がある。
関連項目
- オブジェクトファイル
- 実行ファイル
- 重複コード
- 機械語
- コンパイラ
- インタプリタ
- ソフトウェア品質
- プログラミング作法