Pull to refresh

Как я стал мейнтейнером одного из модулей Perl на CPAN

Perl *
image

У меня на работе, в одном из проектов, используется модуль XML::WBXML. Это модуль для работы с бинарным XML — WAP Binary XML.

К сожалению, модуль обновлялся последний раз в 2006 году, т.е. 9 лет назад. С тех пор от Дэвида Глессера (David Glasser), автора модуля, не было ни слуху, ни духу, багрепорты висели неотвеченными, баги, соответственно, неисправленными. Модуль был забыт и заброшен.

Нужно было что-то с этим делать. Ниже я хочу поделиться своим опытом получения контроля над заброшенным модулем Perl.

В частности, один из багов модуля заключался в том, что при установке не проходили тесты (make test выдавал ошибку) и установка прерывалась. Ошибка же проистекала из того, что за последние 9 лет произошли изменения в библиотеке libwbxml2, которая используется в самом модуле. Библиотека стала выдавать ответы немного в другом виде и тест из-за этого сломался.

Для исправления этой ошибки достаточно было исправить одну строчку в самом тесте. Действие элементарное, но из-за него ломалась вся стройная процедура автоматической установки. Нужно было скачивать исходники модуля, накладывать патч, собирать модуль… И так каждый раз. Неудобно. Правильным решением было бы отправить патч самому автору модуля, но — как уже было сказано выше — автор пропал 9 лет назад и на бегрепорты не реагировал.

В связи с этим я решил попробовать сделать свой модуль для CPAN, с блэкджеком и шлюхами.

Форкнул исходный модуль и выложил новый модуль на CPAN под немного видоизмененным названием XML::WB. Ну и, конечно, исправил ошибку в тестах. Теперь модуль можно было поставить стандартным образом прямо из CPAN'а, без ручных манипуляций с исходниками. Пришлось, однако, исправить остальной код в проекте, который использовал этот модуль, так как название изменилось.

Но меня всё терзала мысль, что всё-таки я не совсем по фен-шую сделал. По-хорошему, надо было не делать новый модуль, а стать мейнтейнером оригинального и исправить ошибку прямо в оригинальном модуле, чтобы тем, кто его использует, не нужно было ничего менять и переключаться на новый модуль.

В это время, по какому-то совпадению, я прочитал новоcть на perlnews.ru, в которой мимоходом упоминалось о возможности получения контроля над заброшенным модулем. В комментариях к новости мне подсказали, что для этого есть более-менее стандартизированная процедура, которая описана тут. В основном всё сводится к «попытайтесь связаться с автором всеми возможными способами, а уж если не получится, тогда, может быть, модуль будет передан вам».

И вот, для начала, я написал автору письмо на все его емейлы, какие нашел, и приготовился ждать ответа. Но перспективы мне казались сомнительными (уж если чувак 9 лет не появлялся).

Через несколько дней я опубликовал пост у себя в блоге, где написал, что вот, мол, сделал форк модуля, если вдруг кому надо. В комментариях к посту мне тут же подкинули ссылку на сайт человека, очень похожего на автора оригинального модуля. Я посмотрел его сайт, посмотрел его Гитхаб… Вроде похоже, но уверенности не было. Этот человек пишет на JS, про Perl никаких упоминаний. Но — чем чёрт не шутит:)

Написал ему письмо. В копию, как полагается, добавил modules@perl.org. И, о чудо! — этот человек мне ответил и он действительно оказался Дэвидом Глессером, автором модуля. Мы обменялись с ним парой писем, оказалось, что он давно уже не занимается Перлом, вместо этого он сейчас пилит на JS фреймворк Meteor, а про Перловый модуль уже почти забыл. Он был бы рад передать мне модуль, но совершенно не помнит пароля к своему аккаунту на CPAN, а емейлы, к которым был привязан аккаунт, тоже давно уже все устарели. Например, там использовался его емейл на mit.edu, который у него был 10 лет назад, когда он там учился.

Я уж думал — всё, тупик. Но тут, вдруг, пришло письмо от Нейла Бауерса (Neil Bowers), одного из администраторов CPAN. Он прочитал нашу переписку с Дэвидом и решил нашу проблему — просто взял и назначил меня мейнтейнером модуля.

Ну, а поскольку у меня уже был готовый исправленный модуль, мне осталось только переименовать его обратно в оригинальный и загрузить на CPAN обновленную версию.

Вдобавок, я разместил модуль на Гитхабе (оригинальный модуль был написан, когда Гитхаба еще не существовало) и явно указал лицензию — perl_5 — что означает, что модуль распространяется на тех же условиях, что и сам Перл.

Надеюсь, я не единственный человек, который пользуется этим модулем, и кому-то от этого будет польза.
Tags:
Hubs:
Total votes 55: ↑49 and ↓6 +43
Views 10K
Comments Comments 9