BTC ETH SOL XRP DOGE S&P 500 NASDAQ DOW EUR/USD USD/JPY GOLD
BTC ETH SOL XRP DOGE S&P 500 NASDAQ DOW EUR/USD USD/JPY GOLD

Read the English original

패키지 관리자는 이것을 고칠 수 없다

developer debugging nested dependency tree on laptop

해결할 수 없는 충돌

패키지 관리자 문제는 사라지지 않는다. 수년간의 툴링 업그레이드에도 불구하고 의존성 충돌은 여전히 빌드를 중단시킨다. 지난주, 개발자는 중첩된 의존성 전체에 걸쳐 같은 라이브러리의 충돌하는 버전으로 인해 발생하는 빌드 실패를 보고했다. 이것은 모든 유지 관리자가 직면했지만 어떤 생태계도 해결하지 못한 문제이다.

“이것을 방지할 방법은 없다”라는 Kevin Patel이 저술한 기사는 정확히 이러한 시나리오를 문서화하고 있다. 사용자가 lodash@4.17.12를 필요로 하는 패키지를 설치하면서 다른 의존성이 lodash@4.17.20를 요구했다. 패키지 관리자는 충돌을 해결하기 위해 두 버전을 모두 설치했으며, 이는 node_modules 폴더를 불어나게 하고 잘못된 버전이 로드될 때 런타임 오류를 발생시켰다. 이것은 가상적인 엣지 케이스가 아니다. Hacker News에서 79명의 댓글 작성자가 유사한 경험을 확인했으며, 한 사람은 “Python, Node, Ruby 전반에 걸쳐 이러한 문제를 디버깅하는 데 수 시간을 보냈다”고 언급했다. 툴링은 의존성 그래프가 본质적으로 해결하기를 거부하는 것을 해결할 수 없다.

왜 이것이 계속 발생하는가

패키지 관리자는 버전 범위가 신뢰할 수 있게 공존할 수 있다는 근본적으로 잘못된 가정 하에 작동한다. 실제로, 의미적 버전 관리는 여러 패키지가 호환되지 않는 제약을 적용할 때 중단된다. Erlang/OTP 29.0 릴리스는 지난달에 새로운 “잠금 파일” 형식을 도입하여 이 문제를 해결하려고 시도했지만, HN 댓글 작성자 중 한 사람이 “잠금 파일은 문제를 숨길 뿐이지, 기본적인 충돌 해결을 해결하지는 않는다”고 지적했다. 핵심적인 문제는 남아 있다: 알고리즘은 분산된 생태계에서 경쟁하는 버전 요구 사항을 신뢰할 수 있게 조정할 수 없다.

더 큰 그림

의존성 관리의 실패는 소프트웨어 개발의 더 깊은 긴장을 반영한다. WinCE64과 같은 프로젝트 - Nintendo 64용 Windows CE 2.11 포트 -는 엔지니어가 시스템을 자신의 의지에 따라 구부릴 정도로 얼마나 멀리 갈 수 있는지를 보여준다. 그러나 가장 헌신적인 해커들조차도 패키지 관리자의 가장 기본적인 결함을 해결할 수 없다: 그것은 결코 현대적인 의존성 그래프의 규모를 처리하도록 설계되지 않았다. 최근 Kars4Kids 광고 사례에서, 판사는 오도적인 마케팅을 금지했다. 마케팅 메시지에서 정확성을 요구하는 규제자와 마찬가지로, 오픈 소스 커뮤니티는 의존성 선언에 대한 집행 가능한 표준을 필요로 한다.

Project Gutenberg의 지속적인 개선은 기술 부채를 우선순위로 할 때 무엇이 가능한지를 보여준다. 1997년부터 이 프로젝트는 공공 도메인 텍스트의 깨끗한, 버전 관리된 아카이브를 유지해왔다. 패키지 관리자가 의존성을 문학적 판으로 취급한다면 - 각 버전은 별도의, 불변인 작업 - 현재의 위기는 결코 발생하지 않았을지도 모른다. 그러나 책과는 달리, 소프트웨어 의존성은 예측할 수 없는 방식으로 진화하며, 툴은 런타임에 호환되지 않는 버전을 조정하도록 강제한다.

주시할 점

의존성 관리의 다음 주요 테스트는 2024년 4분기에 있다. npm, 가장 큰 패키지 레지스트리,는 보안 패치를 의미적 버전 관리보다 우선순위로 하는 새로운 “충돌 해결기”를 롤아웃할 계획이다. 주시할 점은:

  • 100개 이상의 의존성을 가진 프로젝트를 이 해결자가 어떻게 처리하는지
  • 주요 언어 생태계가 동일한 논리를 채택하는지
  • 강제 버전 업그레이드에 대한 커뮤니티의 반발

한편, Groq의 Llama 3.3-70B 추론 서비스의 운명은 클라우드 제공업체가 이러한 불안정성을 수익화할 수 있는지 여부를 밝히だろう. Groq가 개발자가 의존성을 고정하는 데 어려움을 겪는 동안 추론 당 $0.05를 청구한다면, 시장은 깨지거나 새로운 평형을 찾을 것이다. 실제 질문은 패키지 관리자가 향상될 것인지, 아니면 그 향상이 문제를 해결할 것인지, 아니면 단지 새로운, 더 복잡한 실패 모드를 생성할 것인지를 묻는 것이다.