화해 제안

node.js와 io.js 프로젝트를 어떤 식으로 통합 할 것인지 많은 질문을 받았습니다. 두 프로젝트에 참여하는 사람들은 작업이 쓸모없어지는 것은 아닌지, 어떻게 각 프로젝트의 좋은 점을 반영할지 등을 알고 싶어합니다.

이 문서는 초안이며 커뮤니티의 의견에 따라 수시로 업데이트되고 편집됩니다. 이 문서는 Joyent과 Node.js 재단에 대한 최종 의사는 아니지만 통합을 위한 제안을 여기에서 만들어 io.js 커뮤니티가 협력 할 부분을 명확히 하는 것에 목적이 있습니다.

이 문서에서는 통합 이전의 각 프로젝트는 io.js와 node.js라 하고 통합 된 프로젝트는 Node라 하겠습니다.

미래의 프로젝트가 io.js에서 시작되었다고 생각하는 경향이 있는데, 이 문서에서는 재단하에 놓인 새로운 프로젝트를 node.js나 io.js 중 한쪽만의 연장이 아니라 두 프로젝트의 통합을 통한 새로운 조직체로 취급합니다. 통합의 최종 목표는 단순한 합병이 아닌 더 그림이 되어야 합니다.

Technical Governance

Node.js 재단은 Technical Governance Structure(재단 운영 조직에서 분리된 독립 조직)를 채용합니다. 이 재단은 다음 내용을 보장하는 아주 간단한 구조입니다.

  • 재단과 재단의 회의의 영향을 받지 않고 자율적으로 의사 결정을 할 수 있다.
  • 운영 소유권 및 투표 시스템을 가져야 한다.

재단의 규정은 변경이 매우 어렵고 TC는 조직 구조를 점진적으로 개선하고 싶기 때문에 현재 운영 구조를 그대로 가져오는 것은 큰 실수가 되리라 생각합니다.

규정 구조에 대한 합의의 초안으로 다음 문서를 io.js에서 가져올 것입니다.

덧붙여 CONTRIBUTING.md에 있는 “collaborator” 항목의 기존 io.js 기여자들 역시 이관됩니다.

문서가 이전하면서 다음과 같은 변경이 이루어집니다.

  • TC 멤버 추가:
    • TJ Fontaine
    • Alexis Campailla
    • Julien Gilli
  • 기여자 추가:
    • James M Snell
    • Stephen Loomis
    • Michael Dawson

장기 지원

장기 지원에 관한 고차원적인 아이디어는 io.js 로드맵에서 언급하고 있지만, 구체적이진 않습니다. 이는 아직 io.js가 이전 버전의 호환성을 깨뜨리는 릴리스를 하지 않았기 때문입니다. node.js 프로젝트는 비공식적인 장기 지원 정책을 가지고 있지만 공식 문서에 명시되지는 않습니다. 하지만 이전 버전을 위한 패치 릴리스를 만들고 있기 때문에 어떤 정책이 존재한다고 생각할 수 있습니다.

LTS WG (Long Term Support Working Group)

다음 문장은 장기 지원 워킹 그룹(이하 LTS WG)을 위한 선언의 초안이며 WORKING_GROUPS.md로 추가될 예정입니다.

LTS WG는 Node 이전 버전의 유지 보수 및 릴리스에 책임을 집니다.

Node는 커뮤니티가 유지 보수를 하려 하는 한 이전 버전의 패치 릴리스를 만듭니다. LTS WG는 특정 버전을 지원하기 위해 기여할 필요가 없을 때까지 책임이 있습니다.

LTS WG의 책임 범위는 다음과 같습니다.

  • 버그를 수정해 하위 버전으로 백 포트, 안정성 향상, 다른 관련 변경을 이전 릴리스 버전에 적용(현재 버전과 Canary 제외).
  • 관리 및 변경 백 포트 자동화 도구의 작성, 유지 보수
  • 안정된 패치 릴리스를 보장하기 위한 정책과 문서화의 시행

초기 멤버에 추가

  • Michael Dawson

브랜치 관리 등 구체적인 것은 이 문서에는 포함하지 않았지만 워킹 그룹이 책임을 집니다.

버전 통합

io.js와 node.js에 겹치는 버전 (v0.12.0 및 v1.1.0)는 없기 때문에, 두 프로젝트의 모든 버전을 Node 버전으로 할 수 있습니다. 이렇게 하지 않으면, 이 버전에 의존하는 커뮤니티의 상당 부분에 불필요한 혼란을 줄 것 입니다.

이전 릴리스

다음 버전은 “이전 버전”으로 간주하고 LTS WG에서 관리합니다.

  • 0.8.x
  • 0.10.x
  • 0.12.x

1.0 이전 버전은 호환되지 않았지만, 1.0 이후 릴리스는 유의적 버전과 호환합니다. LTS WG의 재량 하에 0.12.x와 0.10.x 패치 릴리스에 API를 추가할 수 있습니다. 그러나 하위 호환성이 없는 변경은 node.js, io.js 양쪽에 존재하는 정책을 준수하여 이 릴리스에서는 할 수 없는 것으로 합니다.

현재 릴리스

  • 1.x

현재 node.js 0.12.x과 io.js 1.x 두 개의 CURRENT 개발 라인이 있습니다. 사용자가 존재하는 한 두 개발 라인 모두 계속할 필요가 있습니다. 문제는 “LTS(장기 지원)에 어느 라인을 넣어야 하는가?”입니다.

근 몇 개월동안 io.js는 현재 stable 개발 라인과 종속 라이브러리를 모두 동기화하는 커다란 성과를 이루었습니다. 더 빠른 릴리스 주기와 함께 많은 npm 모듈 저자들을 코어 내부에 흡수했고, 생태계가 코어에 맞추어 현재의 안정 개발과 함께하기 시작했습니다. 이것은 각 프로젝트와 더 거대한 공동체 간 협력의 새로운 시대를 열었고 Node도 이것을 계승할 것입니다.

하지만 이 말이 0.12.x는 “죽는다”는 것은 아닙니다. 0.12.x, 0.10.x는 지금도 많은 사용자가 사용하고 있으며, LTS WG는 이들이 안정적으로 지원되는 플랫폼을 계속 사용할 수 있도록 할 것입니다.

버전 번호가 없는 릴리스

CANARY (“다음” V8과 주 버전의 모든 변경)

현재 안정 버전의 개발과 함께 앞으로를 위한 버전의 개발도 이루어져야 합니다. 이 개발 라인은 브랜치와 버전 번호없이 테스트 용 나이틀리 빌드가 될 것입니다. 이는 Node의 변경을 테스트할 곳이 될 것이며, V8의 CANARY 버전 뿐만 아니라 주 버전을 올릴 때에도 필요할 것입니다.

현재 안정 버전에서 그랬던 것처럼 Node의 “다음” 개발 라인도 종속 라이브러리와 동기화해야 합니다. 이렇게 함으로써, Node 안정 버전이 나오기 훨씬 전부터 CANARY을 사용해 의존 라이브러리 프로젝트와 그 사용자는 쉽게 성능 회귀나 의존성 내의 하위호환성을 깨뜨릴 수 있는 변경이 있는지 테스트 할 수 있게 됩니다.

웹 사이트

nodejs.org 웹 사이트는 웹 사이트 WG에 이관되어 워킹 그룹이 책임지게 될 것입니다. 이 사이트는 io.js의 여러 언어 커뮤니티에서 웹 사이트를 현지화 할 수 있도록 iojs.org(gulp에서 구축 된 사이트)와 비슷하게 재구성됩니다.

소셜 미디어

소셜 미디어 계정(Twitter, Facebook 등)은 Evangelism WG에 이관합니다.

Evangelism WG

이 io.js WG는 Node로 이관할 것입니다.(WG의 내부 투표가 끝나지 않아 보류 중) Node 프로젝트를 위해 계속 주간 업데이트를 만들고 소셜 미디어를 통한 전파 등의 일을 하게 됩니다.

i18n

모든 io.js 현지화 커뮤니티 WG(마지막으로 집계했을 때에는 32개 팀)는 Node 프로젝트로 이관 여부를 투표할 것입니다. 각 언어에서 서로 협조를 하며 계속 프로젝트 리소스를 지역화하게 될 것입니다.

io.js 한국 커뮤니티의 투표는 nodejs/nodejs-ko#38에서 진행 중입니다. 댓글로 의견을 달아주세요.

로드맵 WG

이 io.js WG는 Node로 이관할 것입니다.(WG의 내부 투표가 끝나지 않아 보류 중) 사용자의 피드백을 계속 모으고 TC가 검토할 로드맵 자료의 초안을 작성합니다.

Streams WG

이 io.js WG는 Node로 이관할 것입니다.(WG의 내부 투표가 끝나지 않아 보류 중) readable-stream과 함께 Node에서 Streams를 만들고 개선해 나아갈 것 입니다.

Tracing WG

이 io.js WG는 Node로 이관할 것입니다.(WG의 내부 투표가 끝나지 않아 보류 중) Node 애플리케이션의 투명성을 개선해 나아갈 것입니다.

빌드 WG

이 io.js WG는 Node로 이관할 것입니다.(WG의 내부 투표가 끝나지 않아 보류 중) Node의 빌드 생성과 빌드를 위한 인프라 개선, 유지 보수를 계속해 나아갈 것입니다.