2천만 설치된 2014년 PHP 임시 패치, 작성자가 12년 만에 deprecated 선언
- 2014년 AOL CMS의 PHP 5.2에서 5.3 업그레이드 중 pecl_http 1 제거로 사라진 http_build_url()를 대체하려 174줄 폴리필을 작성, Packagist 누적 설치 19,864,271회, 최근 30일 401,308회를 기록함
- WPML이 코드베이스에 직접 번들해 150만 사이트 이상에 배포되고, idna-convert 의존을 거쳐 프랑스 CMS SPIP 소스와 Debian·Ubuntu 패키지로도 유입됨
- 2021년 유지보수자를 구했으나 가족사로 후속 조치가 끊겼고, 트레일링 슬래시 경로에서 마지막 세그먼트를 잘라내려 붙인 'a'를 찾기·바꾸기로 제거하면서 경로의 모든 'a'를 삭제하는 버그가 수년간 발견되지 않음
- 후속은 PHP League URI 라이브러리와 표준 URI API를 포함한 PHP 8.5로 넘기고, 검증되지 않은 새 유지보수자가 공급망 공격 표적이 될 수 있다며 xz Utils 백도어 사례를 근거로 인수 제안을 거절함
- AOL CMS는 끝내 이 폴리필을 교체하지 않고 2020년 플랫폼 종료까지 그대로 운영됨
Hacker News opinions
작성자임. 12년 만에 deprecated 하는 게 맞다고 봤음. 질문 있으면 받을게.
JS 세계 보면 is-odd, is-even, left-pad 같은 게 널려 있음. 그거에 비하면 이 패치는 복잡한 프로젝트임.
핵심은 버그임. 고쳐도 안 고쳐도 누군가는 피해를 봄. 알려진 버그가 없었다면 문서에 구식이라고만 적고 그대로 두는 게 나았을 듯.
AI 시대니까 몇 년 안 건드린 프로젝트면 AI한테 수정안부터 뽑아보고 검토하면 됨. 부담이 확 줄어드는데, deprecated 선언이랑 수정 릴리스는 다른 차원의 선택임.
AOL에서 같이 일했었는데 반갑다. 2014년 그때 AOL은 어땠는지 궁금하네.
오래 살려둔 건 좋은데 11년째 업데이트가 없긴 함. 이걸 살아있다고 부르긴 애매함.
임시 수정 중에 잘 동작하는 것만큼 영구적인 건 없음.
설치량 보면 마이그레이션 안내를 deprecation notice로 출력하는 마지막 릴리스를 내야 하지 않나. 사람들은 몇 년 뒤 옛 스택오버플로 답변 타고 들어올 텐데.
Packagist에 abandoned로 표시돼 있음. composer require든 lockfile install이든 abandoned, you should avoid using it 경고가 뜸. 대체 패키지는 제안되지 않았음.
Laravel 5.x 시절에 웹 개발 시작했는데 이 글 읽으니 향수 돋음. 그때랑 지금이 너무 다름.
레포도 archived 처리해야 하지 않나. 기능은 있는데 쓰는 사람을 거의 못 봄.
deprecation만으로도 로컬 도구랑 취약점 스캐너가 잡아내지만, archived까지 해야 레포에 들어온 사람이 바로 앎.
트레일링 슬래시 있을 때만 발동하니까 드물었던 듯. 그래도 그 버그가 이렇게 오래 안 걸렸다는 게 신기함.
나도 PHP 프로젝트에 썼는데 이 라이브러리는 접해본 적 없음. 구버전 PHP 호환 때문에 다시 쓸 사람들한테는 도움 될 글임.
PHP 접은 지 7년인데 컨텍스트 스위칭 때문에 질렸음. 배우기 쉬워서 클래스도 객체도 모르고 이것저것 만들었고 그 덕에 여기까지 옴.
Hyrum의 법칙대로 2천만 설치면 어딘가에선 이 버그를 문자열에서 'a' 제거하는 유용한 함수로 쓰는 사람이 있을 것임.