가장 인기 있는 YAML 파서의 저자가 갑작스럽게 프로젝트를 포기하고, 이를 사용하지 않음(deprecated) 및 유지보수하지 않음(unmaintained)으로 표시함. 경고나 다른 유지보수자 지정 없이 이루어진 일로, 패키지는 여전히 기능적이지만 4000개 이상의 다른 크레이트에서 사용되고 있어, 감사 및 자동 업데이트 도구에서 유지보수되지 않는 크레이트 사용에 대해 경고할 것임.
CDO라는 약어에 혼란을 느낀 사람들을 위해, 이는 'collateralized debt obligation'을 의미함을 추측함. 여러 번 'collateralized'라는 단어가 사용되었기 때문임.
코드가 취약한 경로가 외부 라이브러리에서 실행되거나 접근할 수 없다면, 그것은 안전한 코드 경로가 됨. 라이브러리를 가져오는(vendoring) 것은 코드를 공격하는 도구를 제공하며, 자체 라이브러리에 대한 테스트 커버리지가 충분하다면, 가져온 라이브러리에 대한 코드 커버리지 도구를 실행할 수 있음. 가져온 라이브러리를 수정하는 것은 도전적일 수 있지만, 필요하지 않은 부분을 삭제하는 것은 상대적으로 쉬울 수 있음. 물론, 가져온 라이브러리의 구조에 따라 다름.
전직 양적 분석가이자 현재 경제학자는 저자가 'Collateralized Debt Obligation'이라는 용어를 올바르게 사용한 것을 칭찬함. '기술적 부채'에 대한 기사를 쓰고 싶은데, '부채'라는 비유는 그 개념에 적합하지 않다고 생각함. '고점도 코드'라는 표현이 더 나을 수 있음. 코드를 새로운 기능에 맞게 쉽게 변경할 수 없어서 마치 높은 유도성을 가진 것처럼 느껴짐.
'junk tech debt'가 갑자기 'AAA' 등급으로 평가받는다는 것에 대해, 저자는 코드가 가져오기(vendoring) 되기 전과 후에 같은 코드가 더 나은 부채 등급을 가질 수 없다는 것을 의미하는 것 같음. 하지만 이것은 코드 자체의 가치만을 보는 것으로, 전체 가치 제안의 가장 중요한 부분을 놓치고 있음. 코드를 가져오는 유지보수자는 이제 그 코드를 소유하게 되며, 죽은 프로젝트에서 코드를 가져온 활동적인 유지보수자는 이슈에 대응하고, 풀 리퀘스트를 검토하며, 버그를 수정할 수 있는 인간이 있기 때문에 코드의 가치를 높임.
JS npm 생태계에서도 같은 패턴을 보았음. Npm audit은 주로 보안 문제에 대해 과장되게 경고하며, 라이선스가 허용하는 한, 사용자로부터 받는 터무니없는 문제들로부터 벗어나는 가장 신뢰할 수 있는 방법 중 하나임.
yaml-rust를 포크하고 순수 Rust로 다시 작성하여 yaml-rust2를 만든 것은 운이 좋았음. 이 포크는 YAML 테스트 스위트를 완전히 통과하며 벤치마크에서도 더 나은 성능을 보임. 마이그레이션도 간단해 보임. 결국 문제는 여전히 남아 있으며, 우리는 현재 무료로 노동을 제공하는 다른 사람들에게 의존하고 있지만, 그들이 영원히 그렇게 할 것이라는 보장은 없음.
소스 기반 패키지 매니저가 레지스트리가 발행된 패키지의 유지보수를 강제로 인수할 법적 권리를 강제하지 않는다면, 무시무시한 문제에 직면할 것임: 방치, 악의적인 변경, 악의적인 제거, 사칭 등... 커뮤니티에 충분히 중요하다고 판단되는 패키지의 경우, 원래 소유자의 손에서 레지스트리 항목을 빼앗아 포크로 바꾸는 방법이 필요함.
코드가 작동하고 수년간 그래왔다면, 유지보수되지 않는다고 해서 무슨 상관이 있을까? 수정할 필요가 없고 그 한계와 능력을 알고 있다면 문제가 되지 않음. 코드는 스스로 나빠지지 않음. 수십 년 전 코드를 여러 번 빌려오거나 통합하는 데 아무 문제가 없었음.
의존성을 가져오는 것(vendoring)이 해결책임. 20년 동안 '완성'되어 개발 및 유지보수가 느려진 거의 모든 의존성에 대해 이를 수행함.
Hacker News 의견