소스 코드

영화 소스코드에 대해서는 소스 코드(영화) 문서를 참조하십시오.


Source Code. 디지털기기의 소프트웨어 내용을 프로그래밍 언어로 나타낸 설계도. 보통 이용하게 되는 프로그램들은 이 소스 코드를 컴파일한 것이다.

위 문장이 무슨 의미인지 전혀 모르겠다면, 다음의 설명을 읽어 보자.

컴퓨터 소프트웨어(프로그램)를 만들 때는 설계도가 필요하다. 소스 코드가 바로 그 설계도다. 그것도 개념만 나타낸 추상적인 설계도가 아니라(그런건 순서도라고 한다), 당장 컴퓨터에 입력만 하면 진짜로 프로그램을 완성할 수 있는 매우 세밀하고 구체적으로 짜여진 설계도다.

건축물의 설계도나 전자기계의 회로도가 주로 기호(그림)로 이루어져 있듯, 컴퓨터 프로그램의 설계도인 소스 코드는 프로그래밍 언어로 작성되어 있다. 따라서 (언어라는 표현으로부터 짐작할 수 있겠지만) 그 언어의 문법만 알면 사람도 소스 코드를 읽고 그 뜻을 이해할 수 있다. 실제로 소스 코드를 보면 영문자와 숫자, 몇가지 특수문자 등으로 쓰여져 있고, "set", "value", "push" 등 영어 단어 비슷한 것도 종종 보인다.

오픈 소스 소프트웨어나 기업이 제작한 상용 프로그램은 대개 여러 프로그래머들이 참여하는 대규모 프로젝트기 때문에, 사람이 읽고 그 의미를 알기 쉽도록 작성하는 것이 좋고,[1] 거기다 코드의 기능을 설명하는 주석까지 달아주는 경우가 많다.
반대로 업계 표준에 맞게 논리적이고 간결하게 짜여져 있지 않은, 즉 읽기 불편한 소스 코드는 일명 스파게티라 불린다. (물론 컴퓨터에게는 소스 코드에 주석이 달려 있건 없건, 스파게티이건 아무 상관도 없다. 이런 것은 소스 코드를 접해야 하는 개발자 등의 인간을 위한 배려일 뿐이다.)

그런데, 사람이 읽을 수 있는 형태의 설계도(소스 코드)는 컴퓨터에게는 너무나 읽기 힘든 고차원적인(?) 내용이다. 때문에 컴퓨터가 읽을 수 있도록 아주 원초적인 레벨의 형태로 바꿔줘야 한다. 이렇게 바꿔주는 과정을 컴파일링이라 하며 컴파일링을 해주는 컴퓨터 프로그램을 컴파일러라 하는데, 아무튼 그 결과물은 컴퓨터가 읽을 수 있는 형태인 기계어로 쓰여 있다. 이 결과물은 이진수로 쓰여 있다고 하여 "바이너리(이진수, binary)"라고도 하고 컴퓨터에서 실행이 된다고 하여 "실행파일(이그제큐터블, executable)"이라고도 하는데, 이게 우리가 일반적으로 말하는 컴퓨터 프로그램(소프트웨어)이다. 바이너리는 이진수로 쓰여져 있기 때문에 사람은 읽지 못하며, 억지로 뜯어봐도 1과 0만 어지럽게 나열되어 있을 뿐이다.

학생 시절에 BASIC이나 HTML 등으로 프로그래밍을 배워본 위키러라면 소스 코드를 본 적이 있는 셈이다. 그런데 위에서 언급한 컴파일러라든지 바이너리는 본적이 없을 것이다. 베이식이나 HTML 같은 스크립팅 언어는 별도의 컴파일러 없이도 컴퓨터가 즉석에서 해석(인터프리트) 하여 실행할 수 있기 때문이다. 따라서 얘네들은 코드만 있고 바이너리(실행파일)이 따로 없다.[2]

상용 프로그램이 아닌 공개 프로그램 중에는, 실행파일(바이너리)뿐만 아니라 소스 코드까지 함께 다운로드할 수 있게 해놓은 경우도 많다. 그런데 다운로드 페이지를 좀 유심히 살펴봤다면, 바이너리는 윈도 PC용, 매킨토시용 등등 OS별로 구분되어 있는데 반해 소스 코드는 OS 구분 없이 하나만 있음을 눈치챘을 것이다. 이는 소스 코드는 설계도이기 때문에 OS 종류에 관계없이 바이너리 제작에 이용할 수 있기 때문이다.

또 잘 보면 리눅스용 바이너리는 잘 없고, 대개 소스 코드만 내려받기 되어 있다. 리눅스는 윈도와 달리 워낙 시스템 환경이 다양하기 때문에, 그에 맞춰 바이너리를 일일이 만들어두는 것보다는 소스 코드를 주고 사용자가 자기 시스템에 맞게 컴파일하도록 하는 것이 쉽기 때문이다.

공개 프로그램 중에는 다른 사용자/개발자들이 소스 코드를 들여다보고 연구 개발을 하는 것을 권장하기 위해 소스 코드를 공개하는 경우도 많다. 함께 힘을 합쳐 더 좋은 프로그램을 만들자는 초청 같은 것인데, 이렇게 공개(오픈)된 소스 코드를 갖는 프로그램을 오픈 소스 프로그램이라 부른다.

상용 프로그램의 경우 당연히 오픈 소스가 아니다. 오픈은 커녕 기업 비밀로 철저히 감춰지는 경우가 대부분이다. 소스 코드 없이 바이너리 파일만으로 프로그램의 설계를 유추해내는 것은 대단히 어렵다. 그래서 간혹가다 인디 게임이나 프로그램에서 포맷/바이러스 따위 때문에 소스 코드를 잃어버려서 개발/업뎃을 못한다는 말이 간간히 보인다. 물론 프리서버처럼 (불법이기는 하지만) 기존 소스 코드에 기대지 않고 처음부터 다시 프로그래밍하여 기능을 복제하는 경우도 있기는 한다.

  1. 예를 들어 소스 코드에서 띄어쓰기는 해도 좋고 안해도 좋은 프로그래밍 언어가 많은데, 그래도 띄어쓰기를 해 주면 사람이 읽기가 훨씬 좋다.
  2. 베이식용 컴파일러도 나와 있다. 인터프리터가 워낙 느리다 보니...