Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

io.js가 나오기까지...

Node 쪽에서는 며칠 전에 등장한 io.js 때문에 시끌벅적해졌는데 Wired에도 실릴 정도가 됐다. io.jsNode.js를 포크(fork)한 버전이다. 풀어 말하면 현재 Node.js를 그대로 복사해와서 앞으로는 다른 길을 가겠다고 갈라져 나온 것이다.(오픈 소스의 라이센스 하에 포크한 것이므로 여기서 복사해 왔다는 의미가 저작권을 무시했다는 등의 부정적 의미는 아니다.) 처음 나왔을 때 io.js의 사이트까지 들어갔다가 나왔지만 WHATEVER.js 시리즈는 너무 많으므로 무심코 지나갔다가 며칠 뒤에 이게 Node.js의 포크 버전임을 깨달았다.

io.js를 얘기하기 전에 그동안의 Node 프로젝트의 상황을 이해할 필요가 있다. 10월에 Node.js 현재와 미래에서도 얘기했지만 Ryan Dahl이 Node를 만들고 Isaac Z. Schlueter가 두 번째 리더로 개발하다가 올 초부터는 TJ Fontain으로 리더가 넘어갔다. Node는 초창기 Joyent가 메인 스폰서를 하면서 Ryan을 풀타임 Node 개발자로 고용한 이후 Joyent 하에서 유지되고 있는데 Issac까지는 별문제가 없었지만 TJ Fontain 체제 이후에는 1년 이상 새 버전이 안 나오고 있다. 원래 작년 여름에 공개된 계획하에는 0.12는 물론이고 이미 1.0이 나왔어야 했지만, 아직 v0.12도 안 나온 상태이다. 당시 발표에서는 이 상황이 TJ가 프로젝트 방향을 정하려고 Node.js on the road를 진행하면서 지연되고 있는 것으로 조심스레 추측했었다.

io.js가 갈라져 나오기까지의 상황을 좀 이해하기 위해서 많은 글을 찾아보고 정리해 본다. 관련된 글은 대부분 찾아봤지만 놓친 사건이나 흐름 등이 있을 수 있고 내부에서 일어난 일은 잘 모르니 공개적으로 드러난 시간순으로 정리한 글이다.

Node Forward

io.js를 얘기하려면 먼저 Node Forward에 대해서 먼저 얘기를 해야 한다.(Node Forward가 무엇을 하는지에 대해서는 주우영님의 io.js란 무엇인가?에 자세히 나와 있다.) 8월 초에 Mikeal1이 Node 생태계를 개선하기 위한 Node Forward 위원회를 만들고 이슈 등에서 토론을 시작한다.

Node Forward 로고

Node Forward를 만든 것 부터가 앞에서 얘기한 현재 Node 프로젝트의 진행상황에 대한 불만이 표출된 것이다. Node는 자비로운 종신 독재자(BDFL, Benevolent Dictator For Life) 시스템으로 진행되는데 Issac 체제까지는 큰 문제가 없었지만 TJ Fontain 체제에서는 문제가 생긴 것이다. 사실 Issac이 자연스럽게 리더가 된 것에 비해 TJ Fontain을 잘 몰랐던 개발자라 3대 BDFL이 되었을 때 의아함이 있었는데 내부의 사정이 어떤지 알 수는 없지만, 결과적으로는 릴리즈도 안 되고 있고 이슈도 제대로 처리 안 되고 있어서 Node 프로젝트 개발이 제대로 이뤄지는가 하는 의구심이 생길 수밖에 없다.(Node의 안정성과는 좀 다른 얘기긴 하다.) 더 큰 문제는 왜 릴리즈가 안 되고 있는지도 알려지지 않았고 그러면 언제 릴리즈 할 것인지 어떤 문제가 있는지 어떻게 해결할 것인지가 커뮤니티와 전혀 의사소통되지 않고 있다. 이러한 내용은 Node Forward의 10월 9일 회의에서도 어느 정도 볼 수 있다.

We don’t want to have just one person who’s appointed by a company making decisions.
- Mikeal Rogers

그래서 Node Forward가 바라는 것은 Node를 BDFL 방식에서 Open Governance Model로 바꾸어서 더 민주적이고 많은 사람이 참여할 수 있게 하려는 것이다. 현재 Node가 Joyent에 소속되서 발생하는 문제를 없애고자 하는 것인데 이 문제가 실제로 Joyent가 Node를 자사에 이익에 맞추려고 했기 때문인지 TJ Fontain의 능력 부재인지 아니면 다른 문제가 있는 것인지는 현재 알 수가 없다.

실제로 io.js가 공개되기 전에 Node Forward에서도 Node를 포크했다가 Private로 전환했다. 처음 포크를 한 것이 알려졌을 때 사람들이 왜 포크 했느냐고 묻자 Mikeal은 그냥했다고 대답했지만 io.js가 나온 상황에 그대로 믿을 만한 사람은 없을 것이다. 이후 Node Forward에서 포크한 Node 프로젝트를 private로 돌려서 (이는 트레이드마크 관련 이슈로 그대로 릴리즈 하긴 어려웠던 것 같다.) 이슈를 통해서 접근 권한을 나누어 주다가 이 저장소를 io.js로 옮겼다.

Node Advisory Board

여기에 Joyent가 사태 수습에 나서기 위해서2 Node Advisory Board를 만든다. Joyent의 공지에 따르면 Node 프로젝트가 Joyent만의 프로젝트가 아니므로 주요 컨트리뷰터로 만든 위원회를 통해서 정기적으로 회의하면서 Node의 이슈를 처리하거나 방향을 정하는 곳으로 만들겠다고 한다.

Advisory Board의 멤버를 보면 Bert Belder, TJ Fontaine, Isaac Schlueter, Dan Shaw 등 Node를 사용하는 다양한 회사의 개발자가 모여있다. 여기서 2주마다 회의를 진행하고 있으며 이 회의 내용을 정리해서 온라인에 공개하고 있으므로 주요 방향 결정에 대한 히스토리나 내용을 알고 싶다면 여기를 참고하면 된다. 그동안 논의된 내용을 보면 외부 개발자들의 공헌을 어떻게 하면 더 잘 유도하고 Open Governance나 방향 결정을 어떻게 민주적으로 할 것인가 하는 다양한 논의가 이루어졌고 Node 프로젝트를 Joyent 소속이 아닌 별도의 Node 조직 밑으로 빼는 부분까지도 얘기되고 있고 11월 20일 회의를 보면 다양한 부분으로 나누어서 워킹 그룹까지 만들었다.

회의를 몇 번 하지 않았지만 Node Forward가 원했던대로 Advisory Board도 흘러가고 있긴 하다. 최근 회의에서는 Node 프로젝트를 Joyent 밑에서 빼 와서 새로 Node.js Organization를 만들어서 관리하도록 하는 부분까지 구체적으로 얘기되고 있고 위원회라고는 하지만 회의는 누구나 참여할 수 있게 참여 방법을 안내하고 있다.

io.js

Advisory Board가 생겨서 이제 상황이 정리되나 생각하고 있었는데 갑자기 io.js가 공개됐다. Node Forward의 행동이 Joyent와 Node BDFL에 대한 압박용이라고 생각했고 Advisory Board를 통해서 약간의 결실(?)을 얻었다고 생각했는데 회의 3번정도 진행된 상황에서 io.js로 갈라져 나온 것이다.

io.js 로고
로고 출처: https://github.com/node-forward/node-forward.github.io

여러 가지 정황상 Mikeal이 이 모든 상황에 뒤에 있다고 생각되지만 InfoWorld와의 인터뷰에 따르면 자신이 fork를 주도한 것은 아니고(not even close) Fedor Indutny가 했다고 밝히고 있다. Node Advisory Board의 방향을 올바르지만 7월부터 Joyent와 협업을 했지만, 여전히 결과는 나오지 않고 있고 그동안 너무 오래 기다렸기 때문에 io.js로 갈라져 나오게 됐다고 설명하고 있다.

io.js의 핵심 멤버는 아니지만, 초기부터 node를 개발한 Max Ogden이 다음과 같이 io.js를 정리했다.(공식 문서는 아니다.)

  • io.js는 node v0.12의 포크이다.(node.js의 차기 버전이고 아직 릴리즈 안됨)
  • io.js는 node.js와 완전히 호환될 것이다.
  • io.js를 만든 사람들은 node의 핵심 컨트리뷰터이지만 프로젝트 운영방식에 대해 다른 생각을 하고 있다.
  • 이는 제로섬 게임이 아니다. 많은 핵심 컨트리뷰터는 node.js와 io.js를 둘 다 유지 보수할 것이다.
  • io.js는 node.js의 대항마가 아니다.
  • io.js 프로젝트는 오픈 거버넌스 모델(open governance model)을 사용한다.
  • io는 목성에서 4번째로 큰 달이고 'input/output'을 의미하기도 하므로 적합한 이름이다.(비동기 I/O)
  • node 사용자가 'noders'면 io 사용자는 'ionians'이다.
  • apt-get install iojs로 node 설치를 할 수 있을 것이다.
  • io.js의 첫 릴리즈는 내년 1월이 될 것이다.3
  • io 팀은 매주 릴리즈하는 일정을 위해 자동화된 빌드 인프라를 사용하고 있다.
  • io 코어팀(technical committee)의 회의는 유튜브에 올라와 있다.
  • Node의 버그 수정은 필요에 따라 io로 가져올(cherry-pick) 것이다.

io.js 로고
로고 출처: https://github.com/iojs/io.js/issues/37

커뮤니티는 io.js 등장을 환영하는(혹은 주목하는) 분위기이고 StrongLoop에서도 io.js를 지원하는 글을 올렸고 벌써 Uber의 개발자인 Matt Ranney가 프로덕션에 적용했다는 트윗을 올리기도 했다.



io.js에 대한 생각

프로젝트가 갈라져 나온 것에 대해서 걱정과 우려가 있기는 하지만 상황 자체는 좋게 보고 있다. Node.js 프로젝트는 지난 1년간 확실히 진행 상태에 문제가 있었고 이 문제를 커뮤니티가 해결하려는 시도를 하고 있다. 다른 생각이 있으면 Fork를 해서 개선을 하는 것이 그동안 오픈 소스가 돌아가는 방식이고 적절한 라이센스로 오픈 소스로 프로젝트가 나왔을 때 커뮤니티가 안심하고 사용할 수 있는 것도 이 때문이다.(물론 Sun이 Oracle에 넘어갈 때 오픈 소스라서 괜찮다고 했지만, Oracle의 만행이 발생한 사건도 있긴 하지만... 뭐 그래도 MariaDB로 빠져나올 수는 있었으니..) 나중에 io.js와 Node 두가지가 존재해서 혼란스러워질지 둘이 다시 합쳐질지는 알 수 없지만, 현재 상황을 해결하기 위한 충분한 압박은 주고 있다고 본다.

인터넷 기사를 보면 핵심 커미터 중 4명이 io.js에 소속되어 있다면서 Node의 세력이 둘로 갈라진 것처럼 설명하고 있지만, 자세히 들여다보면 그렇게 생각되지 않는다. 위의 Max Ogden의 글처럼 오히려 둘이 현재 같이 가는 분위기인데 주요 커미터 중 한 명인 Issac 같은 경우도 io.js TC(technical committee)에 소속되어 있지만, Node Advisory Board에도 소속되어 있다. 물론 Joyent에서 긴장해야 하는 것도 맞고 앞으로 어찌 될지 혼란스러운 상황인 것은 맞지만, 뉴스 제목들에서 느껴지는 것처럼 서로 싸우고 갈라선 느낌은 또 아니라는 것이다. Mikeal도 Fragmentation라는 글에서 io.js도 Node 커뮤니티에 속해 있으므로 커뮤니티 자체는 하나이고 두 프로젝트가 서로 소스를 공유할 수 있으므로 공헌이 파편화돼서 생기는 문제도 별로 없을 것이라고 밝히고 있다. 얼마 전 npm에 갔을 때 Issac한테 물어봤을 때도 현재는 Node에 커밋은 안 하고 있고 정치적인 이슈에만 관여하고 있다고 했는데 앞으로 Node Advisory Board가 어떻게 움직이고 io.js TC가 어떻게 움직이느냐에 달려 있다고 본다. 일단 나는 Node.js 진영이 다시 활기(?)를 띠게 된 것이 반갑다. 더군다나 이정도 규모의 프로젝트에서 BDFL이 여러번 바뀌는 것도 처음 봤고 이런 식으로 Fork하는 것도 처음 보는 것 같아서 더욱 흥미롭다.

물론 다음에 또 책을 쓰게 되면 "Node.js 프로그래밍"이 아니라 "io.js 프로그래밍"이 되어야 하는가? 라는 생각같은 것도 들지만.. ㅎ

Update(2014.12.9)

Isaac Z. Schlueter가 IO.js에 상황을 정리하는 글을 올려서 추가로 정리한다. 여러모로 현재 상황을 가장 잘 알고 있는 사람 중에 하나이므로... 위 내용 중 틀린 내용은 없지만 드러나지 않았던 내용만 정리한다.

  • 7월 11일에 Mikeal이 개인 저장소를 만들어서 Node.js의 미래에 대해 얘기를 하다가 이를 공개적으로 하자고 해서 8월에 Node Forward를 만들었다.
  • Node Forward TC에는 현재 Node.js에 공헌도가 높은 8명 중 6명이 포함되어 있다.(Node.js를 만든 Ryan은 더이상 활동하지 않고 TJ Fontain은 제의했으니 거절했다.)
  • Node Forward는 Joyent나 Node.js와 경쟁하지 않는다. Joyent를 포함해서 커뮤니티와 협업으로 Node를 개선하는 것이 목표이고 그동안 Joyent가 Node에서 노력한 부분을 존중하며 앞으로도 이러한 노력을 합칠 수 있다고 믿는다.
  • 8월 13일 Joyent의 CEO인 Scott Hammond가 Node의 방향에 대해 Issac에게 물어봤고 그 당시 다른 사람한테도 물은 것으로 알고 있다.
  • Scott이 9월 26일 Node Advisory Board를 논의하는 회의를 열었다.(첫 회의는 10월 23일에 열렸다.)
  • 10월 9일 Scott이 Mikeal에게 Node Forward가 node를 포크한 것은 Joyent의 node.js 트레이드 마크를 침범한 것이라고 말하고 이 저장소는 서로의 신뢰를 깨뜨리고 진행 중인 Node Advisory Board를 만드는 노력을 허사로 만들 수 있다고 해서 여기에 동의해서 Private으로 변경했다.
  • Node Advisory Board의 11월 20일 회의에 Node 포크에 대한 안건은 다시 꺼냈고 Scott은 "Joyent의 Node.js에 기반을 둔 프로젝트를 다시 Node"
    라고 부르는 건 트레이드마크를 침범한 것이므로 Public으로 하고 싶다면 "node"외에 다른 이름을 사용하라고 했다.
  • 그래서 특정 회사에 속하지 않고 커뮤니티가 합의를 통해서 오픈 거버넌스 모델로 갈 방법이 명확해 졌고 Node와 관련된 제품을 제공하면서 Node.js 트레이드 마크를 침범하지 않는 방법에 대해서 논의하기 시작했다.
  • Node Advisory Board의 회의는 앞으로도 생산적으로 진행될 것이라고 보고 있다.
  • 11월 26일 Fedor Indutny는 Node Forward가 트레이트마크 이슈 없이 작업을 공개적으로 할 수 있도록 Node.js를 다른 이름으로 포크하기로 결졍했다.
  • Node Forward의 Node 포크에서 작업하던 TC는 IO.js 저장소로 옮겼고 비기술적인 논의는 여전히 Node Forward에 남아있다.
  • IO.js도 Joyent나 Node와 경쟁하지 않고 Node 코어 팀이 개선 작업을 계속하도록 하는 데 목적이 있다. IO.js는 커뮤니티 안에서 개선된 프로세스로 기술적 혹은 비기술적 이슈를 처리해서 기존 Node Forward가 하던 노력을 계속 진행한다.
  • Node Advisory Board에서 이뤄진 작업은 Node 커뮤니티에 공유되면서 진행될 것이다. 앞으로도 이런 식으로 될 것이라고 보고 있다.
  • io.js의 목적

    • 지속적인 통합
    • 정상상태를 나타내도록 테스트를 100% 통과하도록 한다.
    • SemVer와 호환되는 엄격한 버저닝
    • 컨트리뷰터가 소유권을 가지면서 특정 회사의 제어를 받지 않는다.
    • 투명하게 합의를 이루고 오픈 거버넌스 방법을 찾는다.
    • 주간 릴리즈
    • V8 버전의 지원
    • 활발한 개발
    • 예상할 수 있는 로드맵
    • 커뮤니티와 연계한 작업
  • Node Advisory Board도 동일한 목적으로 움직이고 있다고 가정하면 미래에는 두 프로젝트가 합쳐질 가능성도 있다.
  • npm은 달라질 것 없다.(ipm이 되지 않는다.)



  1. Mikeal은 request등의 모듈을 만들며 초기부터 노드를 사용한 개발자로 NodeConf를 주도하는 사람이다. 

  2. 정확히 사태 수습용인지는 모르지만 흐름상 그렇게 보인다. 

  3. 1월 13일 예정인데 이는 Fedor의 생일이다. 

2014/12/07 02:44 2014/12/07 02:44