https://www.bloter.net/newsView/blt201604040002

2016년 3월경, npm에서 유명한 라이브러리인 left-pad가 삭제되며 수많은 서비스들에 장애가 생긴 일을 기억하시나요? 단지 문자열의 왼쪽에 padding을 추가해 주는 단순한 라이브러리였지만, 이것이 삭제되며 수많은 혼란을 야기했습니다.

 

최근, 비슷한 일이 다시 발생했습니다. colors.js와 faker.js가 그 대상입니다.

faker.js는 테스트용 가짜 데이터를 생성해 주는 라이브러리로, 실제와 유사한 데이터를 얻을 수 있었습니다.

colors.js는 node.js 콘솔 출력에 색깔을 입힐 때 사용하는 라이브러리로, 텍스트에 .green 등만 붙이면 되는 등 간편한 사용법으로 여러곳에서 사용되어 왔습니다.

 

두 모듈의 라이선스는 모두 MIT 라이선스였습니다. 라이선스나 저작권을 고지하기만 하면 사용이 자유로운 라이선스였죠. 두 모듈 모두 여러 곳에서 사용하기 시작합니다. 그중 아마존 같은 대기업이 있었음은 물론이고요. 하지만 그 사용량에 비해 후원자 수는 매우 적었습니다.

 

그렇게 잘 운영되나 싶었지만 사건이 발생합니다. 개발자가 어찌된 영문인지 두 모듈 모두 잘못된 버전을 업로드후 잠적하기에 이릅니다. faker.js는 저장소가 통째로 비워졌고 colors.js는 무한루프가 삽입되어 코드가 정상 동작하지 않게 되었죠. 당연히 해당 모듈을 사용하고 있던 자료에서 문제가 발생합니다. 그나마 left-pad 사건 이후 한번 업로드한 버전은 내릴수 없도록 변경되었기에, 문제가 없는 구버전을 사용할수 있어 문제가 커지진 않습니다.

 

개발자가 이러한 행동을 한 것은 2020년 9월경 자신의 아파트에 불이 난 이후 노숙자 신세가 되며(#1) 돈 관련에서 민감해진것이 아니냐는 추측이 있습니다. 특히나 2020년 11월에는 포츈 500 및 그 이하 회사들을 지원하지 않겠다고 밝힌적이 있어서(#2, 해당 이슈는 지워졌습니다) 돈 때문이라는건 거의 기정사실화되고 있는 분위기입니다.

 

참고로 해당 개발자는 문제의 커밋 직후 단순히 버그가 있다는 식의 이슈를 남기고 고정해두기도 했는데요,(#3) 이후 남긴 내용들도 "자바스크립트 6으로 업데이트를 시도했는데 CI가 자바스크립트 5만 지원한다" 등 정상적인 내용은 없습니다. 심지어 같이 개발하던 개발자마저 권한을 빼버려서(#4, 해당 개발자는 이후 정상 동작하는 1.4.0을 포크해 유지할 계획이라 밝혔습니다) 할 수 있는게 없다고 밝혔습니다.

 

이후 colors의 문제가 되는 버전은 npm에서 삭제되었습니다. 해당 개발자의 Github 계정 역시 정지되었다고 합니다.(#5)

 

의견은 두가지 정도로 나뉘는것 같습니다. 개발자는 업데이트를 할 권리가 있으며(설사 그것이 잘못되었다 해도) 잘못된 버전이 설치되지 않게 하는건 사용자의 의무라는 의견과, 아무리 그래도 무한루프를 넣는 테러는 너무했다는 의견입니다.

  • profile

    무한루프 테러도 너무했고, 그렇다고 깃허브 계정을 정지시켜 버린 것도 너무했어요. npm에서만 빼면 되는데 굳이 개발자의 생명이라고 할 수 있는 깃허브에서까지 퇴출시킬 필요는...

     

    그런데 js는 이런 일이 반복될 수밖에 없다고 생각해요. 잡다한 서드파티 자료에 너무 많이 의존합니다. 언어 차원에서 기본 제공되는 기능도 빈약하고, 유명한 js 프레임워크들도 흔히 쓸 법한 기능들을 깔끔하게 포장해서 제공하지 않고 그냥 알아서 갖다 쓰라고 하고... PHP나 그 밖의 다른 언어, 다른 프레임워크였다면 언어 자체의 내장 함수나 프레임워크에서 제공하는 기능으로 처리할 수 있을 법한 것까지 모두 서드파티를 갖다 써야 해요.

     

    게다가 서드파티 라이브러리를 만드는 사람들도 서로 관련된 기능들을 묶어서 체계적으로 제공하는 것이 아니라 그냥 자기가 아쉬웠던 함수 하나씩 모듈로 만들어 뿌리는 경우가 많습니다. 그래서 한두 개로 해결되지 않고 여러 개를 갖다 써야 합니다. 라이믹스에 비유하자면 게시판에 댓글 수를 표시해 주는 모듈, 조회수를 표시해 주는 모듈, 작성 시간을 "5분 전"으로 변환해 주는 모듈을 각각 따로 설치해야 하는 것과 같은 상황이예요. 심지어 이렇게 해도 성능에 지장이 없기 때문에 아무도 경각심을 느끼지 못하고, 의존성 그래프가 더욱 막장으로 치닫습니다.

     

    사실 대부분의 개발자들은 자기가 왜 colors나 left-pad 따위를 쓰고 있는지 모릅니다. A를 설치했는데 A가 B에 의존하고, B가 C에 의존하고, C가 D에 의존하고, D가 그걸 끌어온 것 뿐이지요. 모두들 쓰면서도 아무도 몰라주는 라이브러리 개발자가 화풀이를 하기도 쉽고, 그 화풀이에 영문도 모르고 당하기도 쉬운 환경 아닌가요?

     

    주요 프레임워크들이 책임지고 검증된 라이브러리를 제공하지 않는 이상, 누군가 말썽을 부릴 때마다 npm이나 깃허브에서 개별적으로 제재하는 방법으로는 이 문제를 해결하기 어려울 것 같습니다.

  • profile

    아파트에 불나서 돈이 없다는 것은 믿기 힘든것이, 오히려 보험금 나오니까 없던돈도 생겨야 맞는데 말이죠. 건물에 대한 보험도 있고, 테넌트 보험도 의무적으로 가입해야 하므로... 

     

    오픈소스 개발자들이 명예를 위해 하는 사람들도 많을텐데, 아무도 안알아줘서 명예마저 없다면 슬퍼지겠네요. 그렇더라도 악성코드를 만들거나 배포한다면 누군가는 나서서 제재를 해야겠지요.

  • profile profile
    https://nypost.com/2020/09/16/resident-of-nyc-home-with-suspected-bomb-making-materials-charged/
    https://abc7ny.com/suspicious-package-queens-astoria-fire/6425363/

    본문에는 적지 않았습니다만 아파트에 불이 난 건 본인이 사제 폭탄을 만들다 낸 사고라는 얘기가 있습니다.(화재 현장에서 폭탄을 만드는데 쓰이는 재료들이 발견되었다네요)

    어찌보면 자업자득인 셈이죠. 그런 이상한 짓만 안했어도 사고를 당했을 일은 없으니 말이죠.
  • profile profile
    허어~ 보험금 타는것은 고사하고 보험사가 거꾸로 구상권 청구하겠네요. 있던 돈마저 다 날릴듯… 폭탄을 취미로 만들었을리는 없고 사고 안났으면 예전 보스턴 바머 이상도 되었겠네요.