자바스크립트 11줄이 인터넷을 마비시켰습니다. 한번의 게시 취소로.
2016년 3월 22일 21:30 UTC: npm이 메시징 앱 Kik의 특허 대리인이 "변호사들이 당신의 문을 두드릴 것"이라고 약속한 후 "kik"이라는 패키지 이름을 Kik에게 넘겨주자, 한 개발자가 자신의 npm 패키지 273개를 모두 게시 취소했습니다.
2016년 3월 22일 21:30 UTC: npm이 메시징 앱 Kik의 특허 대리인이 "변호사들이 당신의 문을 두드릴 것"이라고 약속한 후 "kik"이라는 패키지 이름을 Kik에게 넘겨주자, 한 개발자가 자신의 npm 패키지 273개를 모두 게시 취소했습니다. 273개 중 하나는 left-pad로, 문자열 앞에 공백을 추가하는 11줄짜리 코드이며 한 달에 250만 번 다운로드됩니다. 몇 분 만에 Babel, React 및 Node 빌드가 전 세계적으로 분당 수백 건씩 실패했습니다. 10분 만에 포크가 나타나 아무것도 변경하지 않았습니다. Babel이 line-numbers를 통해 left-pad를 가져오는데, 이는 0.0.3을 정확히 고정하기 때문입니다. 23:55에 npm은 백업에서 삭제된 버전을 복원했습니다. 이는 레지스트리 역사상 첫 "게시 취소 취소"였으며, 일주일 후 24시간 게시 취소 규칙을 시행했습니다. npm의 자체 설명과 Kik이 공개한 이메일 스레드에 따른 사후 분석: 어떤 작성자든 의존성 검사 없이 어떤 버전이든 삭제할 수 있게 한 레지스트리, 모든 설치 시 라이브로 해결되는 전이적 트리, 기본적으로 lockfile 없음. Git blame: 60 npm / 25 Kik / 15 의존성 습관. 수정안에 대한 평결: SHIP IT.
이 동영상에서 다루는 내용
- 3월 11일: Kik의 특허 대리인이 Azer Koçulu에게 `kik` 이름 변경을 요청합니다. 한 시간 후: 변호사들이 "당신의 문을 두드리고 계정을 폐쇄할 것"이라고 위협합니다. Azer: 3만 달러. Kik은 npm 지원팀에 이메일을 보냅니다.
- 3월 18일~20일: npm의 CEO가 Kik에게 이름을 이전합니다 ("kik.com과 관련이 있을 것으로 합리적으로 예상될 것"). Azer는 자신의 모든 모듈 삭제를 요청합니다.
- 3월 22일, 21:30~23:55 UTC: 273개 패키지 게시 취소; Babel, Atom, Node 프로젝트에서 [email protected] 404 오류 발생; 21:42에 fork 1.0.0 등장; npm의 CTO가 23:03에 "un-un-publishing" 트윗; 23:55에 백업에서 0.0.3 복원 — 2.5시간 소요.
- 3월 23일 및 3월 29일: npm의 사후 분석 ("우리가 실책을 저질렀다") 및 새 정책: 24시간 이내에만 게시 취소 가능, 제거된 이름에 대한 보안 자리 표시자 (2020년부터 72시간).
번역된 스크립트
원래 영어 내레이션에서 번역되었습니다. 사용 가능한 오디오 및 캡션은 YouTube에서 제어합니다.
0:00 한 개발자가 자바스크립트 11줄을 삭제하고, 몇 분 만에 Babel, React 및 Node 빌드가 전 세계적으로 분당 수백 건씩 실패합니다. 그 함수는 left-pad입니다. 이것은 문자열에 공백을 채우는 함수이며, 저녁이 끝날 무렵 npm은 자신이 할 수 없다고 말하는 단 한 가지 일을 합니다: 삭제된 버전을 다시 게시하는 것입니다. 어떻게 일어났는지, 왜 가능한지, 그리고 누가 비난을 받는지 알아보겠습니다. 이것은 The Daily Diff, 사후 분석입니다. 3월 11일. 메시징 앱 Kik의 특허 대리인이,
0:26 Azer Koçulu에게 이메일을 보냅니다: 당신의 npm 패키지 이름을 변경하세요. kik은 우리 브랜드입니다. Azer는 거절합니다. 한 시간 후: 우리 상표 변호사들이 당신의 문을 두드리고 당신의 계정을 폐쇄할 것입니다. Azer는 3만 달러라는 가격을 제시하고, Kik은 그 스레드를 npm 지원팀으로 보냅니다. 3월 18일. npm의 CEO는 npm install kik을 입력하는 누구든 그 메시징 앱을 기대할 것이라고 판단하고
0:48 그 이름을 넘겨줍니다. Azer는 자신의 모든 것을 삭제해달라고 요청합니다. 이틀 후 그는 직접 삭제합니다: 273개의 패키지를. 3월 22일, 21:30 UTC. left-pad를 요청하는 모든 빌드는 404 오류를 받습니다. 10분 후 낯선 사람이 그것을 1.0.0으로 다시 게시하지만, 아무것도 변하지 않습니다. Babel과 Atom은 line-numbers라는 패키지를 통해 그것을 로드하는데, 이는 정확히 0.0.3을 원하기 때문입니다.
1:13 23:03에 npm의 CTO가 트윗합니다: un-un-publishing. 23:55에 0.0.3이 백업에서 복원됩니다. 두 시간 반 동안. 왜 한 사람이 이런 일을 할 수 있을까요? 세 가지 이유가 있습니다. npm의 모든 버전은 작성자가 즉시 삭제할 수 있으며, 그것에 의존하는 사람이 누구인지 확인하지 않습니다. 둘째, 의존성은 전이적입니다: Babel은 left-pad가 존재한다는 것을 모르고, line-numbers를 알고 있으며, 전체 트리는 모든 설치 시 라이브로 해결됩니다.
1:36 셋째, 2016년에는 기본적으로 그 트리를 고정하는 것이 없었습니다. lockfile은 선택 사항이며, 따라서 모든 CI 실행은 11줄의 코드가 어떻게 생겼는지 인터넷에 다시 묻습니다. 하나의 레지스트리, 그것에 의존하는 사람이 운영하지 않는. git blame. npm, 60%: 자체 사후 분석에 따르면 무제한적인 게시 취소가 고통을 유발했고, 인용하자면, 우리가 실책을 저질렀습니다. Kik, 25%: 변호사가 아닌 특허 대리인이, Kik이 이미 사용하지 않기로 결정한 이름에 대해 문 앞에 변호사들을 보낼 것이라고 약속했습니다. 의존성 습관, 15%: 11줄의 코드를 직접 입력하는 대신 npm-install한 모든 사람들.
2:06 Kik의 빌드도 중단되었음을 포함하여. Kik의 빌드도 중단되었음을 포함하여. 피해 범위: 273개의 패키지가 삭제되었고, 그 중 하나는 한 달에 250만 번 다운로드됩니다. 수정에는 두 시간 반이 걸리고, 함수는 11줄입니다. Hacker News에서 우리가 프로그래밍하는 방법을 잊었는지 묻는 게시물은 1700점을 받았고, 대부분 빌드가 여전히 실패하는 사람들로부터 나왔습니다. 평결, 사후 분석: SHIP IT.
2:26 npm은 백업에서 복원하고, 다음 날 사후 분석을 게시하며, 일주일 이내에 여전히 유효한 규칙을 시행합니다: 24시간 동안 게시 취소할 수 있으며, 그 이후에는 사람과 이야기해야 합니다. 월요일: lockfile을 커밋하고, 함수가 11줄이라면, 그것은 문단이지 의존성이 아닙니다. 아직 이야기할 수 없는 사건을 댓글이나 daily diff dot dev로 보내주세요. 댓글이나 daily diff dot dev로 보내주세요. 그리고 오늘의 차이점입니다.
2:48 저는 Axrisi의 Niko입니다. 책임감 있게 병합하세요.
출처
- npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
- npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
- Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
- Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
- Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
- left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
- Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
- Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
- Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
- The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com



