Когда свободные программы зависят от несвободных
Ричард СтолменКогда программа свободна (от слова “свобода”[1]), это значит, что она дает пользователям четыре свободы, так что они контролируют, что делает программа. В большинстве случаев этого достаточно, чтобы распространяемая программа была этичной; но не всегда. Есть дополнительные проблемы, которые могут возникнуть в специфических обстоятельствах. В этой статье описана неочевидная проблема, возникающая, когда обновление свободной программы требует применения несвободной.
Если пользование свободной программой неизбежно зависит от другой программы, которая несвободна, мы говорим, что свободная программа “в западне”. Ее текст свободен, и у вас может быть возможность копировать ее части в другие свободные программы с хорошими, этичными результатами. Но вы не должны работать с программой в западне, потому что это значит, что вы отказываетесь от свободы и сдаетесь на милость той несвободной программы.
Тот, кто отстаивает принципы свободных программ, не будет заведомо помещать программу в западню. Однако многие свободные программы разрабатываются людьми или компаниями, которые не особенно поддерживают эти принципы или не осознают проблемы.
Зависимость от несвободной программы может принимать различные формы. В простейшем случае это язык программирования, у которого нет свободной реализации. Первые программы, которые я написал для системы GNU в восьмидесятых годах XX века, в том числе GNU Emacs, GDB и GNU Make, приходилось компилировать несвободным компилятором Си компании AT&T, потому что свободного компилятора Си не было, пока я не написал GCC. К счастью, такого рода проблемы по большей части отошли в прошлое; сейчас у нас есть свободные компиляторы и платформы почти для всех языков, какие только используются для написания свободных программ.
Мы можем вызволить программу из западни этого рода, переведя ее на другой язык или выпустив свободную реализацию языка, на котором она написана. Таким образом, когда появилась полная свободная реализация Java, это вызволило все свободные программы на этом языке из западни Java.
Зависимость этого рода концептуально проста, потому что она вытекает из положения, заданного в один момент времени. В момент t свободная программа P не работает без несвободной платформы программирования Q. Заимствуя термин лингвистики, можно сказать, что это “синхроническая” связь.
Не так давно мы наблюдали зависимость другого рода в программах баз данных, когда можно собрать и работать с любой версией программы в мире свободы, но обновление с версии N до версии N+1 требует несвободной программы.
Это происходит потому, что внутренний формат базы данных изменяется между версией N и версией N+1. Если вы серьезно пользовались версией N, у вас, вероятно, есть большая база данных в формате версии N. Для обновления программ базы данных до версии N+1 вам нужно преобразовать формат этой базы данных.
Если это предполагается делать обработкой с помощью несвободной программы преобразования формата или с помощью службы разработчика, которая представляет собой услугу-замену программы, то программы базы данных в западне — но менее очевидным образом. Любую заданную версию программы базы данных можно применять без несвободных программ и услуг-замен программ. Проблема возникает, когда вы пытаетесь продолжать пользоваться программой длительное время, что связано с периодическим обновлением ее; в этом случае программой невозможно пользоваться без какой-то несвободной программы или ее эквивалента. Такая программа базы данных попадает в западню при движении во времени — мы могли бы назвать это “диахронической западней”, заимствуя другой термин лингвистики.
Например, хотя программа OpenERP (переименованная впоследствии в “Odoo”) свободна, она в диахронической западне. GNU Health, наш свободный пакет для управления клиникой, первоначально пользовался OpenERP. В 2011 году разработчик GNU Health Луис Фалкон обнаружил, что обновление до следующей версии OpenERP требует отсылки базы данных (всех медицинских записей о пациентах) на сервер OpenERP для преобразования формата. Это услуга-замена программы: она требует, чтобы клиника, которая пользуется GNU Health, доверила свои собственные вычисления и свои данные компании-разработчику OpenERP. Фалкон не сдался, он перевел GNU Health на Tryton.
Пользование услугой-заменой программы принципиально эквивалентно работе с несвободной программой с функциями слежки, а также универсальной лазейкой. Эта служба могла бы сохранять копию баз данных, формат которых пользователи преобразуют. Даже если мы уверены, что компания, предоставляющая эту услугу, никому никогда ни в каком виде преднамеренно эти данные не покажет, мы не можем быть уверены, что доступ к данным не получат агентства разведки различных стран или взломщики систем безопасности (пожалуйста, не называйте их “хакерами”).
Когда программа в диахронической западне, вызволение ее из западни требует больше, чем однократной работы по программированию. Работу приходится делать постоянно, каждый раз, когда меняется формат данных. Вести проект, поддерживая решимость продолжать эту работу в долгосрочной перспективе, нелегко. Может оказаться проще оказать давление на компанию, чтобы она не ставила пользователям западню — отказываясь от программы до тех пор, пока она в западне. Учитывая, насколько трудно освободить программу, вам лучше было бы держаться от нее подальше.
Можно опробовать программу в диахронической западне без несвободных программ, но если вы собираетесь не просто поиграться, вы должны обходить ее подальше. И предприятия, и частные лица найдут прекрасные свободные альтернативы, у которых нет такой проблемы; чтобы избежать этой западни, нужно только распознать ее.