У меня на работе, в одном из проектов, используется модуль 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 — что означает, что модуль распространяется на тех же условиях, что и сам Перл.
Надеюсь, я не единственный человек, который пользуется этим модулем, и кому-то от этого будет польза.
Комментарии (9)
SDSWanderer
23.05.2015 00:57Не так давно была проблема с Lingua::RU::Number, написал автору, он был очень удивлен, но все порешал.
На проблему с использованием последней версии Moose в модуле Net::Amazon::S3 долго никто не реагировал, форкнул себе на гитхаб и ставил оттуда через dev версию Carton'a пока ее все таки не решили.ivanych Автор
23.05.2015 09:59У Moose ведь есть репозиторий на гитхабе, можно хотя бы пулл-реквест отправить. А в моем случае репозитория не было, так что только через письма:)
Envek
23.05.2015 11:32+1Надо сказать, что такая проблема актуальна для любого долгоживущего (больше, скажем, лет пяти) сообщества. В гораздо более молодом мире Ruby уже сейчас есть очень заметное количество совсем заброшенных библиотек (гемов), вокруг которых кучкуется несколько форков с какими-то единичными исправлениями. Какие-то проекты изредка меняют сопровождающего, какие-то возрождаются усилиями сообщества (показательный пример — гем cancan, после исчезновения разработчика возрождённый сообществом под именем cancancan ввиду ну просто бешеной его популярности).
KOS_MOS
Хорошая история, но на перле сейчас пишут единицы
pansa
Я знаю как минимум трёх. Но очень нужен еще один =)
FisHlaBsoMAN
Теперь вы знаете четырёх :)
kloppspb
Я с собой ещё двоих действующих приведу :)
PavelKuptsov
присоединяюсь к компании :)
статья очень приятная и правильная. вместо генерации кучу однотипных модулей — лучше меньше, да лучше
dimas
Я знаю не только перл, а где до сих пор используют целиком перловую систему биллинга :)