포크 (소프트웨어 개발)

포크(fork) 또는 소프트웨어 개발 포크, 프로젝트 포크(project fork)는 개발자들이 하나의 소프트웨어 소스 코드를 통째로 복사하여 독립적인 새로운 소프트웨어를 개발하는 것을 말한다. 오픈 소스 소프트웨어의 경우 소스 코드가 공개되어 있고, 프로젝트에서 소스 코드를 통째로 복사하는 것이 허용되는 라이선스를 채택한 경우, 원저작자에 의해 재사용을 허가받은 코드이기에 포크를 통한 새로운 소프트웨어 개발이 가능하다. 레드햇 리눅스(Red Hat Linux)를 포크하여 CentOS가 생겼고, 데비안(Debian)을 포크하여 우분투(Ubuntu)가 생겼고, MySQL을 포크하여 MariaDB가 생겼다.

용어 
포크(fork)라는 용어는 14세기 초부터 "여러 갈래로 나누고 개개의 길을 가다"라는 뜻으로 사용되어 왔다. 소프트웨어 환경에서 이 낱말은 실행 중인 프로세스가 그 자신을 2개의 (거의) 동일한 사본으로 나뉘게 하여 각기 다른 작업을 수행케 한다는 의미에서 시스템 호출을 포크하는 것에서 비롯되었다.

분기 
많은 프로젝트는 버그 픽스만 이루어지는 ‘안정 버전’(stable version) 또는 ‘릴리스’(release version) 와 새로운 기능을 통합한 ‘개발 버전’(development version) 과를 따로 마련하고 있다. 이것도 포크의 일종이다. 이 같은 포크는 ‘브랜치’(branch) 또는 ‘분기’라고 하며, 이는 ‘포크’(fork)라는 말이 부정적인 뉘앙스를 풍기고 있으며, 이 방법은 소프트웨어 공학의 ‘브랜칭’(branching)을 닮았기 때문이다.

프리웨어 
자유 소프트웨어의 포크 원인은 목표의 불일치 및 개인 대립 등이 있다. 포크가 발생하는 경우 개발 그룹이 거의 같은 내용의 코드 기반으로 사용하지만, 소프트웨어의 원래 이름과 사용자 커뮤니티 내용은 대부분의 경우 큰 그룹 (또는 원래 설계자의 소속 그룹)이 인수하게 된다. 따라서, 포크 소프트웨어의 평판 식으로 불이익이 된다. 분기한 개발팀 간의 관계는 대체로 양호하지만(예: 우분투 및 데비안), 충돌하고 있거나 (예: X.Org Server와 XFree86, cdrtools 과 cdrkit), 전혀 교류가 없는(예: 리눅스 배포판의 대부분) 경우 등 다양하다.

포크는 자유 소프트웨어로 인한 자유의 일종으로 간주할 수도 있지만, 중복된 개발로 인해 이용자가 어떤 것을 사용해야할 지 고민을 던져주는 나쁜 점도 있다. 각 그룹이 협력하여 자원을 공유할 수는 있지만, 무료 소프트웨어 라이센스로는 이 점에 대해서는 규정이 없어 합의가 된 경우에만 행해지지 않는다. 따라서 개발 작업은 다른 포크와의 차별화에 중점을 두고 행해지는 경우가 많다.

각주

외부 링크 
 Right to Fork - Meatball Wiki
 A PhD examining forking: (Nyman, 2015)  "Understanding Code Forking in Open Source Software - An examination of code forking, its effect on open source software, and how it is viewed and practiced by developers"

소프트웨어 공학
소프트웨어 포크
소프트웨어 프로젝트 관리