오픈소스 패키지를 포팅할 때의 일반적인 원칙은, 해당 패키지가 자신의 시스템에서 빌드되고 실행되도록 적용한 변경 사항을 기록해 두는 것이며, 그 변경 사항이 커뮤니티 전체에 유용할 것이라고 판단되면 패키지 관리자에게 제출하는 것입니다. 대개 이는 향후 동일한 패키지를 포팅할 때 드는 수고를 줄여주는 이점도 있습니다.
저는 수많은 소프트웨어 패키지를 VOS와 OpenVOS로 포팅해 왔으며, 보통은 수정 내용을 유지보수 담당자에게 보내려고 노력합니다. 하지만 항상 그런 것은 아닙니다. 그 이유는 다음과 같습니다.
1. 일부 변경 사항은 OpenVOS 환경에 특화된 것입니다. OpenVOS에만 적용되는 제한 사항을 우회하기 위해 변경을 가한다면, 이 변경 사항을 업스트림에 제출하는 것은 별 의미가 없습니다. 관리자들은 일반적으로 이러한 패치를 거부할 것입니다. 예를 들어, OpenVOS 17.0 이전 버전에서 파일 이름 길이에 적용되던 제한이 이에 해당합니다.
2. 오픈소스 패키지의 최신 버전에서는 일부 변경 사항이 이미 반영되었을 수 있습니다. 변경 사항을 제출하기 전에, 이미 다른 사람이 먼저 해당 변경을 적용했는지 확인하는 것이 좋습니다. 특히 원본 소스 코드를 다운로드한 지 꽤 시간이 지났다면 더욱 그렇습니다. 이미 구식인 변경 사항으로 모두의 시간을 낭비할 필요는 없습니다.
3. 변경 사항은 사실 다른 제품에 포함되어 있습니다. 예를 들어, 저는 최근 MySQL 5.1.48을 OpenVOS Release 17.1로 포팅하는 작업을 마쳤습니다. 빌드 스크립트를 여러모로 수정함으로써 OpenVOS 17.1의 새로운 동적 링크 기능을 활용하도록 만들 수 있었습니다. 하지만 이러한 변경 사항을 MySQL 팀에 전달하는 것은 의미가 없습니다. 왜냐하면 해당 변경 사항은 실제로는 다른 팀이 관리하는 autoconf 패키지에 있기 때문입니다. MySQL 패키지는 단지 autoconf의 사용자일 뿐이며, 특정 플랫폼에서 autoconf가 수행하는 작업에 대해 어떠한 통제권도 가지고 있지 않습니다.
4. 패키지를 구한 시점과 오늘 사이에는 너무 많은 시간이 흘렀습니다. 여기서 문제는 오픈소스 패키지가 끊임없이 변화하는 대상이라는 점입니다. 일부 패키지는 상당히 안정적이어서 업데이트 빈도가 낮지만, 다른 패키지들은 끊임없이 변화하고 있습니다. 저는 MySQL 5.1.48을 포팅하는 데 9개월을 보냈는데, 이는 부업으로 진행했기 때문이기도 하고, 포팅이 완료된 후에도 내부 테스트 및 릴리스 프로세스와 일정을 맞춰야 했기 때문입니다. 그래서 제가 MySQL 팀에 패치를 보낼 준비가 되었을 때쯤, 그들은 이미 버전 5.5(일반 공개 버전)와 버전 5.6(개발 버전)으로 넘어간 상태였습니다. 제가 적용했던 변경 사항 중 상당수는 더 이상 깔끔하게 적용되지 않았고, 어떤 경우에는 소스 파일의 이름이 바뀌거나 새로운 디렉터리로 이동되기도 했습니다. 패치를 현재 버전으로 완전히 업데이트하는 작업을 할 수는 있겠지만, 작업량이 방대하고 적어도 제 생각에는 그만한 노력을 들일 가치가 없습니다. 이번 일을 통해 얻은 교훈은, 제 버전에서 변경 사항이 안정화되는 즉시 업스트림으로 보내야 했다는 것입니다. 물론 이는 어느 정도 판단의 문제이기도 합니다.
때로는 구체적이고 잘 작성되었으며 버그도 철저히 제거된 패치를 제출하기 위해 모든 절차를 제대로 밟았음에도 불구하고, 유지보수 담당자들이 이를 무시하거나 거부하는 경우가 있습니다. 이는 답답할 수 있지만, 너무 신경 쓰지 마세요. 많은 오픈소스 패키지는 자원봉사자들이 유지보수하고 있기 때문에, 흔하지 않은 플랫폼에 대한 패치를 처리할 수 있는 시간이 제한적입니다.
MySQL 5.1.48의 OpenVOS 포팅 버전의 경우, 제 조사 결과 현재 개발 릴리스에서도 여전히 존재하는 것으로 확인된 MySQL 패키지 내의 명확하고 독립적인 문제들에 대해 5건의 구체적인 버그 보고서를 등록하기로 결정했습니다. 또한, GNU 공중 사용 허가서(GNU Public License)의 조건에 부합하는 조치로서, 우리가 적용한 모든 변경 사항을 기여할 수 있도록 별도의 버그 보고서를 등록했습니다. 각 사례마다, 해당 버그 보고서를 종결하는 데 적합하다고 판단되는 변경 사항을 반영한 소스 코드 패치를 기여했습니다. MySQL 팀이 제가 요청한 5가지 구체적인 변경 사항을 통합해 주기를 기대합니다. 이 문제들은 OpenVOS뿐만 아니라 다른 플랫폼에도 영향을 미칠 수 있는 사항들입니다. 제가 MySQL에 보낸 패치를 확인해 보고 싶으시다면, http://bugs.mysql.com을 방문하여 '고급 검색(Advanced Search)'을 클릭한 후, 버그 번호 44300, 44832, 60907, 60908, 60910, 60911, 60912, 60913을 검색해 보시기 바랍니다.
MySQL 5.1.48의 OpenVOS 포트는 Stratus에 의해 “MySQL for OpenVOS, Release 2.0”으로 명명될 예정이며, OpenVOS Release 17.1의 출시와 동시에 조만간 정식 출시될 예정입니다.
