누구나 읽고 쓸 수 있는 오픈소스 프로젝트를 통째로 복사해서, 원본과 무관하게 원하는 방향으로 가져가는 거예요. 그 복사본과 복사 행위 자체를 포크(fork)라고 불러요.
포크는 원본 소유자에게 허락을 구하지 않고 자유롭게 수정할 수 있는, 완전히 독립된 프로젝트 사본이에요(오픈소스 라이선스가 이미 그 권한을 부여하니까요). 이름의 유래도 직관적이에요. 도로가 두 갈래로 갈라지면, 원본은 원래 방향으로 계속 가고 내 버전은 새 길을 향하죠. 포크 이후 둘은 과거만 공유하는 완전히 별개의 프로젝트예요.
브랜치와 나란히 놓고 보면 차이가 선명해져요. 비슷하게 들리지만 다릅니다. 브랜치는 하나의 프로젝트 안에서 잠시 갈라졌다가 돌아오는 임시 사본이에요. 브랜치를 만들고, 빌드하고, 다시 메인 버전에 머지해요. 포크는 보통 다른 사람이 만드는, 더 영구적인 분리이고 대개 다시 합칠 계획이 없어요. 브랜치는 돌아오는 우회로예요. 포크는 떠나는 새 길이고요.
포크를 하는 이유는 몇 가지예요. 누군가의 작업물을 발판 삼아 자신만의 방향으로 가져가고 싶을 때, 프로젝트가 방치됐을 때 커뮤니티가 살려내기 위해, 혹은 프로젝트의 방향에 대한 의견 충돌이 너무 커서 두 버전이 각자의 이름을 달고 계속될 때예요. 지금 쓰고 있는 도구 중 상당수가 사실 더 오래된 무언가의 포크예요.
일상적인 GitHub 맥락에서는 의미가 좀 더 가벼워요. 다른 사람의 오픈소스 프로젝트에 기여하는 일반적인 방법은 이래요. 포크해서 내 사본을 만들고, 내 사본에서 원하는 대로 수정한 뒤, 원본 소유자에게 풀 리퀘스트를 보내요. "개선한 게 있는데, 반영할 의향이 있으신가요?" 이 경우 포크는 영구적인 결별이 아니라, 상대방의 코드를 건드리지 않고 변경 제안을 할 수 있는 개인 작업 공간이에요. 같은 단어지만 의도는 훨씬 우호적이죠.
직접 포크할 일이 없더라도 이것이 중요한 이유가 있어요. 포크는 오픈소스의 조용한 슈퍼파워예요. 좋은 것은 절대 완전히 막히지 않아요. 의존하는 도구가 방치되거나 잘못 관리되거나 원하지 않는 방향으로 흘러가면, 코드가 바로 거기 있어서 포크해서 이어갈 수 있어요(라이선스 조건 안에서). "언제든 포크할 수 있다"는 탈출구가 오픈소스 기반 개발을 안전하게 느끼게 하는 큰 이유예요.
포크는 프로젝트를 통째로 복사해 자신만의 방향으로 가져가는 거예요. 브랜치는 돌아오고, 포크는 떠나 독자적인 존재가 돼요. 오픈소스의 탈출구. 좋은 것은 절대 죽지 않아도 돼요.