RubyGems 설치 문제의 근본 원인은 여러 측면에서 분석될 수 있습니다.
기술적 문제: Gem과 Bundler의 불일치
RubyGems 프로젝트는 사실상 gem
과 bundler
라는 두 개의 독립적인 프로젝트가 합쳐진 형태입니다. 이로 인해 gem
개발자는 bundler
의 작동 방식을, bundler
개발자는 gem
의 작동 방식을 제대로 이해하지 못하는 응집성 부족 현상이 발생합니다. 결과적으로 gem
에서는 작동하는 해결책이 bundler
에서는 무용지물이 되는 경우가 빈번합니다. 또한, 코드베이스가 매우 복잡하고 유사한 기능을 하는 수십 개의 변수와 메서드가 존재하여 문제 해결을 더욱 어렵게 만듭니다.
저자의 간단한 해결책
저자는 이 문제를 단 한 줄의 코드로 해결할 수 있는 매우 간단한 패치를 제시했습니다. lib/rubygems/defaults.rb
와 lib/rubygems/path_support.rb
파일에 Gem.default_install
메서드를 추가하여 젬 설치 경로를 오버라이드할 수 있도록 하는 방식입니다. 이 패치는 기존 동작을 변경하지 않으면서도 배포판이 쉽게 기본 설치 경로를 사용자 디렉토리로 설정할 수 있게 합니다.
비기술적 문제: 개발자 커뮤니티의 저항
기술적인 해결책이 명확함에도 불구하고, 이 패치가 적용되지 못하는 주된 이유는 프로젝트 리더들의 ‘자존심(Ego)’과 비협조적인 태도 때문입니다.
* 외부 기여에 대한 거부감: 개발자들은 자신들의 코드를 외부인이 더 잘 고칠 수 있다는 사실을 받아들이려 하지 않습니다. 저자는 “개발팀의 만족스러운 해결책이 없다”는 의견을 제시했다는 이유만으로 프로젝트에서 영구적으로 차단당했습니다.
* ‘무한 루프’식 문제 해결: 개발팀은 문제를 근본적으로 해결하기보다는 임시방편적인 해결책(예: bundle install --path
사용 권고)을 제시하거나, 기본 동작을 변경하지 않는 불완전한 패치를 적용한 후 문제를 종결시키는 방식을 반복합니다. 이는 결국 동일한 문제가 계속해서 보고되는 ‘무한 루프’를 야기합니다.
* ‘나에게는 잘 작동한다(Works for me)’ 태도: 일부 핵심 개발자들은 자신들의 특정 개발 환경(예: .bundle
설정, ruby-build
사용)에서 문제가 발생하지 않으면 다른 사용자들의 기본 설치 실패 문제에 무관심한 태도를 보입니다. 시스템에서 제공하는 Ruby 패키지를 사용하는 사용자를 ‘바보’로 취급하는 발언까지 서슴지 않습니다.
* 패키지 관리자의 무관심: 심지어 Fedora나 Arch Linux와 같은 배포판의 패키지 관리자들조차 RubyGems 패치 적용에 소극적입니다. 그들은 “Bundler는 프로덕션에 사용되어서는 안 된다”거나 “사용자가 직접 해결할 수 있다”는 이유로 패치 적용을 거부합니다.
이러한 복합적인 요인들이 15년간 지속된 RubyGems 설치 문제의 근본적인 원인으로 지적됩니다.