맨위로가기

포크 (소프트웨어 개발)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

포크(fork)는 소프트웨어 개발에서 기존 코드베이스에서 파생되어 독립적으로 개발되는 새로운 프로젝트를 의미한다. 이는 원래 코드의 복사본을 생성하여 새로운 기능 추가, 버그 수정, 또는 다른 목표를 추구하기 위해 사용된다. 포크는 자유 및 오픈 소스 소프트웨어에서 흔히 발생하며, 목표 불일치, 개인적 갈등, 또는 라이선스 문제로 인해 발생할 수 있다. 포크는 개발 커뮤니티를 분열시키고 자원 중복을 야기할 수 있지만, 새로운 혁신과 발전을 이끌기도 한다. 분산 버전 관리 시스템의 발전으로 포크는 더욱 일반화되었으며, 독점 소프트웨어에서도 플랫폼 간 호환성 확보를 위해 사용될 수 있다.

더 읽어볼만한 페이지

  • 소프트웨어 프로젝트 관리 - 소프트웨어 개발
    소프트웨어 개발은 요구사항 분석, 설계, 코딩, 테스트, 배포, 유지보수를 포함하는 컴퓨터 프로그램 및 관련 데이터를 만드는 과정으로, 다양한 방법론과 도구가 사용되며, 개발자 외에도 다양한 전문가들이 참여한다.
  • 소프트웨어 프로젝트 관리 - 애자일 소프트웨어 개발
    애자일 소프트웨어 개발은 1990년대에 등장하여 개인과 상호작용, 작동하는 소프트웨어, 고객과의 협력, 변화에 대한 대응을 핵심 가치로 삼고 적응형 계획과 반복적 실행을 통해 시장 출시 속도와 위험 완화를 추구하는 소프트웨어 개발 방법론이다.
  • 소프트웨어 포크 - 자바 데스크톱 시스템
  • 소프트웨어 포크 - 마테 (소프트웨어)
    MATE는 그놈 2에서 파생되어 전통적인 데스크톱 인터페이스 유지를 목표로 하는 데스크톱 환경이며, 마테차에서 이름을 따왔고, 여러 리눅스 배포판에서 사용 가능하다.
  • 소프트웨어 공학 - 통합 개발 환경
    통합 개발 환경(IDE)은 코드 편집, 빌드, 디버깅 등 소프트웨어 개발에 필요한 여러 기능을 통합적으로 제공하는 응용 프로그램이다.
  • 소프트웨어 공학 - 소프트웨어 개발
    소프트웨어 개발은 요구사항 분석, 설계, 코딩, 테스트, 배포, 유지보수를 포함하는 컴퓨터 프로그램 및 관련 데이터를 만드는 과정으로, 다양한 방법론과 도구가 사용되며, 개발자 외에도 다양한 전문가들이 참여한다.
포크 (소프트웨어 개발)

2. 용어

"포크"라는 단어는 14세기부터 "가지로 나누다, 갈라져 각자의 길을 가다"라는 의미로 사용되었다.[2] 소프트웨어 환경에서 이 단어는 실행 중인 프로세스를 두 개의 (거의) 동일한 복사본으로 분할하여 (일반적으로) 서로 다른 작업을 수행하도록 하는 fork 시스템 호출을 연상시킨다.[3]

소프트웨어 개발 맥락에서 "fork"는 1980년경 에릭 올만에 의해 소스 코드 관리 시스템의 "브랜치"를 생성하는 의미로 사용되었다.[4] 1983년까지 유즈넷에서 토론 주제를 옮기기 위해 하위 그룹을 만드는 프로세스로 사용되었다.[5]

루시드 이맥스(현재 XEmacs)(1991) 또는 버클리 소프트웨어 배포판(BSD)(1993–1994)의 기원 동안에는 커뮤니티 분열의 의미로 사용된 것으로 알려져 있지 않다. 러스 넬슨은 1993년에 이러한 종류의 포크를 "분열(shattering)"이라는 용어로 사용했으며, 이는 존 길모어의 말이라고 했다.[6] 그러나 "포크"는 1995년까지 XEmacs 분할을 설명하는 데 현재의 의미로 사용되었고,[7] 1996년까지 GNU 프로젝트에서 이해되는 용법이었다.[8]

3. 분기 (브랜칭)

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

4. 자유 및 오픈 소스 소프트웨어에서의 포크

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

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

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

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

자유 및 오픈 소스 소프트웨어는 자유 소프트웨어 정의와 오픈 소스 정의에 따라 현재 소프트웨어를 개발, 관리 또는 배포하는 사람들의 사전 승인 없이 법적으로 포크될 수 있다.[13] 자유 소프트웨어 정의에서는 수정된 버전을 다른 사람에게 배포할 자유를 보장하며, 오픈 소스 정의에서는 파생 저작물을 허용하고 원본 소프트웨어의 라이선스와 동일한 조건으로 배포할 수 있도록 한다.[9][10]

BSD 라이선스는 포크가 독점 소프트웨어가 되는 것을 허용하며, 카피 레프트 지지자들은 상업적 인센티브가 독점화를 거의 불가피하게 만든다고 말한다. (그러나 카피 레프트 라이선스는 기여자 라이선스 계약의 형태로 독점적 권한을 가진 이중 라이선스를 통해 우회할 수 있다.) 독점 포크의 예로는 macOS(NeXTSTEPFreeBSD 기반), Cedega 및 CrossOver(Wine의 독점 포크, CrossOver는 Wine을 추적하고 상당한 기여를 함), EnterpriseDB(PostgreSQL 포크, Oracle 호환 기능 추가[16]), 독점 ESM 스토리지 시스템을 사용한 Supported PostgreSQL,[17] 및 Netezza의[18] 독점적이고 확장성이 뛰어난 PostgreSQL 파생 제품이 있다. 이러한 공급업체 중 일부는 커뮤니티 프로젝트에 변경 사항을 다시 기여하는 반면, 일부는 변경 사항을 자체 경쟁 우위로 유지한다.

1997년에 공개된 성당과 시장에서는 "포크의 가장 중요한 특징은 코드 교환 없이 경쟁적인 프로젝트를 만들어 잠재적인 개발자 커뮤니티를 분열시키는 것이다"라고 설명하고 있다. 그러나 현재는 이 정의가 일반적이지 않다.

경우에 따라서는 포크가 원래 프로젝트에 병합되거나 원래 프로젝트를 대체하는 경우도 있다. 모질라 파이어폭스모질라의 비공식 프로젝트였지만, 개발의 중심은 모질라 Suite에서 곧바로 파이어폭스로 옮겨졌다.

4. 1. 포크의 예시

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

포크는 자유 소프트웨어가 제공하는 자유의 일종으로 간주할 수도 있지만, 개발 성과가 중복되고 사용자가 어떤 것을 사용해야 할지 혼란스러워하는 등의 단점도 있다. 각 그룹이 협력하여 리소스를 공유할 수는 있지만, 자유 소프트웨어 라이선스는 이에 대해 규정하지 않으며, 합의가 이루어진 경우에만 수행된다. 따라서 개발 작업은 다른 포크와의 차별화에 중점을 두고 진행되는 경우가 많다.[13]

에릭 S. 레이먼드는 에세이 ''노스피어 정착''[11]에서 "포크의 가장 중요한 특징은 나중에 코드를 교환할 수 없는 경쟁 프로젝트를 만들어 잠재적인 개발자 커뮤니티를 분열시키는 것이다"라고 말했으며, Jargon 파일에서 포크는 나쁜 것으로 간주된다고 언급했다.[12]

데이비드 A. 휠러는 포크의 네 가지 가능한 결과로 포크의 소멸, 포크의 재병합, 원본의 소멸, 성공적인 분기를 제시했다.[13]

분산 버전 관리 (DVCS) 도구는 "분기"와의 구분을 흐리게 하여 "포크"라는 용어의 덜 감정적인 사용을 대중화했다.[14]

경우에 따라서는 포크가 원래 프로젝트에 병합되거나 원래 프로젝트를 대체하기도 한다. EGCS(Experimental/Enhanced GNU Compiler System)는 GCC에서 분기되었지만, 원래 프로젝트보다 활발하게 개발이 진행되었고, 최종적으로는 공식 GCC 프로젝트로 인정받았다.

다음은 포크의 예시이다.

  • 대부분의 리눅스 배포판은 다른 배포판에서 파생되었다.
  • Pretty Good Privacy는 미국 암호 수출 규제로 인해 미국 외에서 포크가 진행되었다.
  • NetHack는 Hack에서 포크되었으며, Slash'EM 등 다양한 변종이 있다.
  • OpenBSD는 테오 데 라트에 의해 NetBSD에서 포크되었다.
  • OpenSSH는 SSH에서 포크되었다.
  • DragonFly BSDFreeBSD 4.8에서 포크되었다.
  • Adempiere는 Compiere 2.5.3b에서 포크되었다.
  • iDempiere는 Adempiere 3.6.1에서 포크되었다.
  • NeoOffice는 OpenOffice.org에서 포크되었다.

5. 독점 소프트웨어에서의 포크

독점 소프트웨어에서 저작권은 일반적으로 개별 소프트웨어 개발자가 아닌 고용 주체가 갖는다. 따라서 독점 코드는 소유자가 윈도우 버전과 명령줄 인터페이스 버전, 또는 IBM PC 호환 컴퓨터용 워드 프로세서와 매킨토시 컴퓨터용 버전과 같이 두 개 이상의 버전을 개발해야 할 때 더 흔하게 포크된다. 일반적으로 이러한 내부 포크는 플랫폼 간에 동일한 모양, 느낌, 데이터 형식 및 동작을 갖도록 하여, 한 플랫폼에 익숙한 사용자가 다른 플랫폼에서도 생산성을 높이거나 문서를 공유할 수 있도록 한다. 이것은 대부분 더 큰 시장 점유율을 만들어 포크로 인해 발생하는 추가 개발 비용을 회수하기 위한 경제적 결정이다.[19]

이러한 종류가 아닌 주목할 만한 독점 포크는 여러 종류의 독점 유닉스이다. 거의 모든 유닉스는 AT&T 유닉스를 라이선스 하에 파생되었으며 모두 "유닉스"라고 불리지만 점점 더 상호 호환되지 않는다.[19]

6. 문제점

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

포크는 자유 소프트웨어의 자유로 여겨지기도 하지만, 중복된 개발로 인해 사용자가 어떤 것을 사용해야 할지 혼란을 겪는 문제점도 있다. 각 그룹이 협력하여 자원을 공유할 수도 있지만, 자유 소프트웨어 라이선스에는 이에 대한 규정이 없어 합의가 된 경우에만 가능하다. 따라서 개발 작업은 주로 다른 포크와의 차별화에 중점을 둔다.

1997년에 공개된 '''성당과 시장'''에서는 ''"포크의 가장 중요한 특징은 코드 교환 없이 경쟁적인 프로젝트를 만들어 잠재적인 개발자 커뮤니티를 분열시키는 것이다"''라고 설명한다. 그러나 현재는 이 정의가 일반적이지 않다.

자르곤 파일에서는 포크가 "좋지 않은 일"로 여겨지며, 그 이유로 많은 개발 노력이 낭비되고, 본가 쟁탈전, 계승, 설계 방향성 등에 대해 후계 그룹 간에 격렬한 논쟁이 벌어진다는 점을 지적한다. 포크에는 강한 사회적 압력이 따르며, GNU Emacs와 XEmacs의 분열, 386BSD의 3개 그룹 분열, GCC와 EGCS의 분열과 같이 해커 역사에 남을 정도로 큰 포크는 매우 적다.

포크를 선언하는 것은 간단하지만, 독립적인 개발과 지원을 지속하기 위한 충분한 노력이 필요하다. 충분한 자원 없이 포크를 하면 프로젝트는 곧 활동 중지 상태에 빠진다. 예를 들어, GNOME에서 포크된 GoneME는 어느 정도 인지도를 얻었지만 곧 개발이 중단되었다. 반면, X.Org X11 서버는 개발자와 사용자로부터 광범위한 지원을 받아 X의 개발 속도를 높이는 데 성공했다.

참조

[1] 웹사이트 "the Lemacs/FSFmacs schism" http://www.jwz.org/d[...] Jamie Zawinski 2009-11-30
[1] 뉴스 "Behind the KOffice split" https://lwn.net/Arti[...] Linux Weekly News 2013-07-06
[1] 뉴스 "Copyright assignment – once bitten, twice shy" http://www.h-online.[...] H-Online 2012-03-30
[1] 웹사이트 "Forking is a feature" http://dashes.com/an[...] Anil Dash 2012-02-29
[1] 뉴스 "The Great Software Schism" http://www.linuxjour[...] Linux Journal 2012-01-06
[1] 웹사이트 "To Fork Or Not To Fork: Lessons From Ubuntu and Debian" http://mako.cc/writi[...] Benjamin Mako Hill 2012-02-26
[2] 웹사이트 Entry 'fork' in Online Etymology Dictionary http://www.etymonlin[...] 2012-05-25
[3] 콘퍼런스 A Comprehensive Study of Software Forks: Dates, Reasons and Outcomes http://flosshub.org/[...] 2012-10-20
[4] 웹사이트 "An Introduction to the Source Code Control System." http://sccs.sourcefo[...] Project Ingres, University of California at Berkeley 2014-11-06
[5] 웹사이트 Can somebody fork off a "net.philosophy"? https://groups.googl[...] net.misc 1983-01-18
[6] 웹사이트 Shattering — good or bad? https://groups.googl[...] gnu.misc.discuss 1993-10-01
[7] 웹사이트 Re: Hey Franz: 32K Windows SUCK!!!!! https://groups.googl[...] cu.cs.macl.info 1995-09-21
[8] 웹사이트 Lignux? https://groups.googl[...] gnu.misc.discuss 1996-06-07
[9] 웹사이트 The Free Software Definition https://www.gnu.org/[...] Free Software Foundation 2013-10-15
[10] 웹사이트 The Open Source Definition http://opensource.or[...] The Open Source Initiative 2006-07-07
[11] 웹사이트 Promiscuous Theory, Puritan Practice http://www.catb.org/[...] 2002-08-15
[12] 웹사이트 Forked http://catb.org/jarg[...] Jargon File 2011-11-08
[13] 웹사이트 Why Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers!: Forking http://www.dwheeler.[...] 2006-04-05
[14] 웹사이트 An "open governance" fork of Node.js https://lwn.net/Arti[...] 2015-01-15
[14] 학위논문 Understanding Code Forking in Open Source Software Hanken School of Economics
[15] 웹사이트 Forked a project, where do my version numbers start? http://programmers.s[...] 2011-08-26
[16] 웹사이트 EnterpriseDB http://www.enterpris[...] 2006-11-13
[17] 웹사이트 Fujitsu Supported PostgreSQL http://www.fastware.[...] 2006-08-20
[18] 웹사이트 Netezza http://www.netezza.c[...] 2006-11-13
[19] 웹사이트 Fear of forking http://linuxmafia.co[...] Rick Moen 2012-12-17
[20] 웹사이트 Entry 'fork' in Online Etymology Dictionary http://www.etymonlin[...] 2012-05-25
[21] 콘퍼런스 A Comprehensive Study of Software Forks: Dates, Reasons and Outcomes http://flosshub.org/[...] 2012-10-20



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com