Ловушка JavaScript
Ричарт Столлман
Ты можешь каждый день запускать несвободные программы на своем компьютере и не знать об этом — через свой веб браузер.
В обществе Свободного Программного Обеспечения (СПО), известна идея о том что несвободные программы плохо обходятся со своими пользователями. Некоторые из нас полностью отказываются от установки проприетарного Программного Обеспечения (ПО), а многие другие бойкотируют несвободные программы. Многие пользователи знают, что этот вопрос относится и к плагинам, которые браузеры предлагают установить, поскольку они могут быть свободными или несвободными.
Но браузеры запускают и другие несвободные программы, которые не только не просят тебя об этом, но и даже не говорят — это программы, которые содержатся в веб страницах или ссылках на них. Эти программы в большинстве случаев написаны на JavaScript, хотя могут использоваться и другие языки программирования.
JavaScript (официально называемый как ECMAscript, но это имя редко используется) изначально
использовался для второстепенных «выкрутасов» на веб страницах, таких как привлекательная, но малозначащая навигация или особенности внешнего вида. Его рассматривали скорее как простое расширение возможностей разметки HTML, чем настоящее ПО, и оно не представляло значительной проблемы.
Множество сайтов все еще используют JavaScript для этого, но некоторые уже используют его для крупных программ, которые выполняют значительную работу. Например, Google Docs загружает на твою машину программу на JavaScript, которая весит пол мегабайта в компактной форме, которую мы можем назвать как Obfuscript, т.к. у нее отсутствуют комментарии и какие-либо пробелы, а переменные именуются словами из одной буквой. Исходный код программы представляется формой для модификации, но компактный код не является исходным кодом и реальный исходный код этой программы не доступен пользователю.
Браузеры не сообщают тебе, когда загружают программы на JavaScript. Большинство браузеров имеют возможность полного отключения JavaScript, но ни один из них не может проверить JavaScript программу на нетривиальность или на несвободность. Даже если ты осознаешь эту проблему, тебе будет достаточно сложно идентифицировать и затем заблокировать такие программы. Однако, даже в сообществе СПО большинство пользователей не осознают этой проблемы, поскольку браузеры, как правило, скрывают это.
Можно писать программы на JavaScript как СПО, предоставляя исходный код под лицензией СПО. Но даже если исходный код программы доступен, не существует простого способа для запуска модифицированной версии вместо оригинальной. В настоящее время свободные браузеры не предполагают возможность запустить вашу собственную модифицированную версию вместо той, что представлена на странице. Эффект от этого сопоставим с тивоизацией, хотя его и не так сложно победить.
JavaScript это не просто язык для программ, которые посылают веб страницы пользователям. Поддерживается программирование Flash по средствам расширенного варианта JavaScript. Нам нужно изучать проблематику по Flash, что бы предоставить подходящие рекомендации. Silverlight создает проблемы схожие с Flash, но более сложные, поскольку Microsoft использует его как платформу для несвободных кодеков. Свободная замена Silverlight не будет работать на свободный мир до тех пор пока не появятся нормальные свободные кодеки.
Java апплеты также запускаются в браузере, и вызывают схожие проблемы. В общем, любая такая система создает апплет с такой проблемой. Наличие свободной исполняющей среды для апплета поможет нам решить эту проблему.
Появляется мощное движение, которое призывает веб сайты объединяться только вокруг форматов и протоколов, которые называются «свободными» (некоторые называют их «открытыми»), утверждается, что вся документация доступна и любой может ее свободно использовать. С появлением программ на веб страницах, это необходимо, но не достаточно. Сам JavaScript, как формат, является свободным, и его использование на веб страницах не обязательно плохо. Однако, как мы видели выше, этого также не достаточно. Когда сайт загружает программу пользователю, для программы не достаточно иметь документацию и быть написанной на свободном языке, эта программа также должна быть свободна. «Только свободные программы могут загружаться пользователям» это должно стать частью поведения веб сайтов.
Загрузка без уведомления и запуск не свободных программ это лишь одна из многих проблем существующих в «веб приложениях». Термин «веб приложение» был разработан для игнорирование фундаментальных различий между ПО предоставляемое пользователям и ПО работающем на сервере. Это может относиться к специализированной клиентской программе, запущенной в браузере; это может относиться к специальному серверному ПО; это может относиться к специальной клиентской программе, которая работает «рука об руку» с специальным серверным ПО. Клиентская и серверная сторона порождают различные этические проблемы, даже если они так тесно взаимосвязаны, что возможно формируют части формы одной программы. Эта статья адресована только проблемам клиент-серверного ПО. Мы расскажем о серверных проблемах отдельно
Как же мы можем практически решить проблему с несвободныыми программами, написанными на JavaScript, на веб сайтах? Ниже приведен план действия.
Во-первых, нам необходим практический критерий для определения нетривиальных программ на JavaScript. Поскольку «нетривиальность» является мерой степени, то встает вопрос о создании простого критерия, который дает хорошие результаты при определении, а не дает один правильный ответ.
Мы предлагаем определять JavaScript программу, как нетривиальную, если она определяет методы и либо загружает дополнительный скрипт, либо загружает себя, или если она осуществляет AJAX запрос.
В конце этой статьи мы предлагаем соглашение по которому нетривиальная программа на JavaScript в веб странице может содержать URL на котором расположен ее исходный код, а также может содержать свою лицензию, посредством стилизованных комментарий.
В заключении, нам необходимо изменить свободные браузеры для поддежки свободны пользователей страниц с JavaScript. Прежде всего, браузеры должны иметь возможность сообщать пользователю о нетривиальных несвободных программах на JavaScript, прежде чем запускать их. Возможно, необходимо аддаптировать под это NoScript.
Пользователям браузеров также необходим удобный инструмент для указания кода JavaScript для его использования вместо кода JavaScript на определенной странице. (Указанный код может быть либо полностью замещенным, либо модифицированной версией свободной программы на JavaScript на этой странице.) Greasemonkey почти в состоянии сделать это, но не полностью, поскольку он не гарантирует, что модифицированный код JavaScript на странице, на которой раньше он выполнялся, выполнится. Использование локального прокси сервера также неудобно, чтобы быть действующим решением. Нам необходимо конструктивное решение, которое будет надежным и удобным, также и для сайтов распространяющих изменения. GNU Project будет рекомендовать подобные сайты, которые посвящены только свободным изменениям.
Эти шаги сделают возможным чтобы страницы включали программы на JavaScript, которые являются свободными в реальном и фактическом смысле. JavaScript не будет больше серьезным препятствием для нашей свободы — не больше чем С или Java сейчас. Мы сможем отказаться и даже заменить несвободные нетривиальные программы на JavaScript, как только мы откажемся и заменим несвободные пакеты, которые предлагают для установки обычным способом. Наша компания для веб сайтов с свобдным JavaScript начинается.
Спасибо вам Мэт Ли и Джон Ресиг за вашу помощь в определении наших предложенных критериев.
Оригинал статьи