20080205

Использование словарей Lingvo 11 в Linux

Предыстория


Какое-то время назад я купил Lingvo 11 «Шесть языков», ту версию, которая стоила около 2000 руб. Покупал в основном для того, чтобы использовать на наладоннике, потому что словари Multilex для наладонника продавались каждый язык отдельно, и нужный мне набор получался дороже, чем хотелось бы. Однако в Lingvo 11 входила и версия для Windows. Более того, мне пришлось её поставить, чтобы установить словари в наладонник, но с тех пор я так и не мог ей воспользоваться (потому что пользуюсь я каждодневно линуксом). А недавно стало обидно: такие деньги заплачены, а словари лежат… Тем более, что lingvo.yandex.ru доступен не всегда.

Посещение форума Lingvo показало, что АББИИ как не хотела, так и не хочет делать оболочку Lingvo ни для линукса, ни для маков… Можно сказать даже всячески препятствуют использованию своего продукта в не-Windows операционных системах и эмуляторах.

Оболочки же для словарей в линукс и на маке давно есть готовые (stardict, например, или его консольная версия sdcv, TranslateIt на маке). Достаточно было бы продавать словари в любом открытом формате, но ни продавать, ни лицензировать словари отдельно в АББИИ не хотят. И с сайта stardict.sourceforge.net коллекцию сконвертированных в формат stardict словарей заставили недавно убрать.

Закон РФ и юридическое творчество АББИИ


На мой взгляд в этом случае я, как обладатель экземпляра программы вправе изменить программу/базу данных так, чтобы она работала на моих технических средствах и взаимодействовала с использумым мною программами (ст. 1280 новой четвёртой главы ГК РФ).
ГК, глава 4:
Статья 1280. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ

1. Лицо, правомерно владеющее экземпляром программы для ЭВМ или экземпляром базы данных (пользователь), вправе без разрешения автора или иного правообладателя и без выплаты дополнительного вознаграждения:

1) внести в программу для ЭВМ или базу данных изменения исключительно в целях их функционирования на технических средствах пользователя и осуществлять действия, необходимые для функционирования таких программы или базы данных в соответствии с их назначением, в том числе запись и хранение в памяти ЭВМ (одной ЭВМ или одного пользователя сети), а также осуществить исправление явных ошибок, если иное не предусмотрено договором с правообладателем;

2) изготовить копию программы для ЭВМ или базы данных при условии, что эта копия предназначена только для архивных целей или для замены правомерно приобретенного экземпляра в случаях, когда такой экземпляр утерян, уничтожен или стал непригоден для использования. При этом копия программы для ЭВМ или базы данных не может быть использована в иных целях, чем цели, указанные в подпункте 1 настоящего пункта, и должна быть уничтожена, если владение экземпляром таких программы или базы данных перестало быть правомерным.


К слову сказать, в лицензионном соглашении АББИИ «заботливо» прописала вот что (это копи-паст из соглашения к 12-й версии Lingvo, но если мне память мне не изменяет, в 11-й было написано так же):
8.3. Вы обязуетесь не осуществлять самостоятельно и не разрешать третьим лицам осуществлять следующие действия.

8.3.1. Деассемблировать, декомпилировать (преобразовывать объектный код в исходный текст) ПО (включая программы, базы данных (в том числе словари) и другие компоненты ПО), за исключением случаев и только в объеме, явным образом разрешенном применимым законодательством. Если применимое законодательство разрешает подобные действия, любая информация, полученная таким способом, не должна раскрываться третьим лицам, если только такое раскрытие не предусмотрено применимым законодательством, и должна быть немедленно сообщена Компании ABBYY. Вся такая информация является конфиденциальной и принадлежит Компании ABBYY.


К счастью, законодательство РФ явно разрешает декомпиляцию объектного кода в исходный текст (пункт 3 вышеупомянутой статьи 1280 ГК), если это необходимо для обеспечения взаимодействия с декомпилируемой программой (формально, достаточным поводом для этого является написание на bash скрипта, который вызывает stardict, которому нужны словари).

Дело техники


Итак, когда мне потребовалось воспользоваться словарём, я почитал всякие советы и блоги в интернете (рекомендую заметку Перенос словарей Lingvo из ABBYY Lingvo в stardict (на jack.kiev.ua) и пост на форуме AlReader), и сделал так:

1. Скопировал бинарные словари в формате .lsd в отдельный каталог, туда же скопировал DslComp.exe и все DLL-ки из каталога с устанной Lingvo.
2. Поправил бинарный файл DslComp.exe (с помощью -b режима и xxd в vim), заменив по смещению 0004E8E1 байт 84 на байт 32. Эта замена включает в DslComp.exe недокументированную функцию декомпиляции словарей. Понятно, что то, какой байт и где заменять сильно зависит от версии Lingvo, и тот вариант, который описан у jack.kiev.ua у меня не подходит, а подошёл тот, который был указан на форуме alreader.com.
На форумах в интернете можно найти «патчи» для DslComp.exe из Lingvo версий с 9-й по 11-ю. Про 12-ю ничего не видел, но и специально не искал. Как я понял, пользователям версии 8.0 и более ранних этим извратом (декомпиляцией словарей) заниматься вообще не надо. Так что, если нужно Lingvo в Linux, то лучше покупать самую старую версию, какую только найдёте. Главное, не 12-ю.

3. После этого запустил wine DslComp.exe, и выбрал там конвертацию из .sdl в .dsl. Получилось. Полученный файл .dsl — это простой текстовый файл в кодировке UTF-16. Возможно, из него потребуется вырезать упоминания про файлы с произношением (мне не пришлось).
4. Затем я взял программку makedict с xdxf.sourceforge.net (Converter: many to many), собрал её. Конвертация словаря .dsl в формат stardict деляется с помощью неё так:
$ makedict -i dsl -o stardict Словарь.dsl

Словарь в формате stardict будет лежать отдельным подкаталогом. Его нужно переместить в /usr/share/stardict/dic/. Дополнение: или, как заметил SIR, в домашний каталог пользователя, ~/.stardict/dic/ (Спасибо!).

Вроде всё. Если всё работает, резервную копию словарей в Windows можно удалять.

Информация к размышлению


Эта заметка показывает весь «блеск» несвободного программного обеспечения. Условия его использования противоречат интересам пользователей, и удовольствие за такие деньги ниже среднего. Тонкости и нюансы несвободных лицензий тоже создают дополнительные неудобства, ограничения и риски. В случае Lingvo, технически, использовать словари в GNU/Linux вместе с stardict возможно, но это требует получасовой возни. На мой взгляд, такое использование законно, но при использовании в организации лучше, наверное, проконсультироваться с юристом, а не с моим блогом :) На практике могу лишь посоветовать не покупать последнюю версию Lingvo. А лучше купить уже бывшую в употреблении старую версию (чтобы не платить проприетарщикам). В идеале — восьмую или более ранюю (чтобы не заниматься декомпиляцией словарей). Благо, на том же молотке.ру такие предложения бывают.

Хочу также заметить, что конкурент АББИИ, компания MediaLingua, тем временем уже начала разработку многоязыковых словарей MultiLex для Linux. Это можно только приветствовать. Возможно, в скором времени покупать качественные словари можно будет у них, а про мелкомягких АББИИ с их Лингво забыть как про страшный сон. Дополнение: Увы, упоминание версии для Linux с сайта Мультилекса убрали, кишка тонка; убираю ссылку.

Дополнение: Читатели в комментариях дали вот эту ссылку, что нужно менять в dslcomp.exe в 12-й версии Lingvo (по-англ.)