English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   lietuvių [lt]   Nederlands [nl]   polski [pl]   русский [ru]   українська [uk]  

Ежегодный слет хакеров GNU  • 25–27 августа •  Регистрируйтесь!

Это перевод страницы, написанной на английском языке.

Западня JavaScript

Ричард Столмен

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

Вебмастеры: есть несколько способов указать лицензию программ на JavaScript на сайте.

Сообщество свободного программного обеспечения хорошо знакомо с идеей, что несвободные программы несправедливы по отношению к пользователям. Некоторые из нас защищают нашу свободу, отвергая всякие несвободные программы на наших компьютерах. Многие другие считают несвободность программы серьезным недостатком.

Многим пользователям известно, что этот вопрос касается модулей, которые браузеры предлагают установить, поскольку они могут быть свободными или несвободными. Но существуют другие несвободные программы, которые браузеры выполняют, не спрашивая вас и даже не говоря вам об этом — это программы, на которые ссылаются или которые содержат страницы сайта. Эти программы чаще всего написаны на языке JavaScript, хотя используются и другие языки.

JavaScript (официально называемый “ECMAScript”, но мало кто употребляет это название) когда-то применяли для мелких излишеств на страницах Интернета, таких как занятные, но несущественные детали отображения и навигации. Было допустимо рассматривать их просто как дополнения к разметке HTML, а не как настоящие программы, и не задаваться этим вопросом.

Многие сайты до сих пор используют JavaScript таким же образом, но некоторые применяют его для крупных программ, которые решают серьезные задачи. Например, “Google Docs” пытается передать на вашу машину программу на JavaScript, занимающую полмегабайта, в сжатом виде, который мы называем “Obfuscript” (запутанный сценарий), потому что там нет комментариев и почти нет пробелов, а названия методов состоят из одной буквы. Исходный текст программы — это форма, предпочтительная для изменения программы; сжатый текст не является исходным текстом, и настоящий исходный текст недоступен пользователю.

Многие из этих программ не только несвободны, они еще и вредоносны, потому что они шпионят за пользователем.

Браузеры обычно не сообщают вам о том, что они загружают программы на JavaScript. В некоторых браузерах есть способ полностью выключить JavaScript, но даже если вы знакомы с этой проблемой, вам было бы достаточно трудно распознать содержательные несвободные программы и заблокировать их. Однако даже в сообществе свободного программного обеспечения большинство пользователей не знает об этой проблеме; молчание браузеров не выставляет ее напоказ.

Есть возможность сделать программу на JavaScript свободной, распространяя исходный текст по лицензии свободных программ. Если программа самостоятельна — если ее работа и назначение не зависят от страницы, на которой она используется — прекрасно; вы можете сохранить ее на своей машине, изменить ее и открыть в браузере, чтобы работать с ней. Но так обычно не делают.

Обычно программы на JavaScript предназначены для работы с конкретной страницей или конкретным сайтом, а работа страницы зависит от этих программ. Тогда встает другая проблема: даже если исходный текст программы доступен, браузеры не предлагают способа работать с измененной вами версией вместо исходной, когда вы посещаете этот сайт. Этот эффект сравним с тивоизацией, хотя его в принципе не так трудно преодолеть.

JavaScript — не единственный язык, на котором написаны программы, передаваемые с сайтов пользователю. Flash поддерживает программирование с помощью расширенного варианта языка JavaScript; если у нас будет хотя бы достаточно полный свободный проигрыватель Flash, нам будет необходимо решать проблему несвободных программ на Flash. Silverlight, кажется, создает проблемы, сходные с Flash, только еще хуже, поскольку Microsoft применяет его как базу для несвободных кодеков. Свободная замена Silverlight не решит проблему для свободного мира, если вместе с ней не будут поставляться свободные замены кодеков.

Апплеты на языке Java тоже выполняются в браузере и приводят к похожим проблемам. Вообще говоря, любая система апплетов приводит к проблемам этого рода. Наличие свободной среды для выполнения апплетов приводит нас только к постановке этого вопроса.

Теоретически возможно программировать на HTML и CSS, но на практике эти возможности ограничены, это неудобно; для каждой малости требуется незаурядное мастерство. Такие программы должны быть свободны, но на 2016 год CSS не представляет серьезной проблемы для пользователей.

Возникло мощное движение, которое призывает применять на сайтах только свободные (некоторые говорят “открытые”) форматы и протоколы, то есть те, документация на которые опубликована и которые каждый волен реализовать. При наличии программ на страницах сайтов это условие необходимо, но не достаточно. Сам по себе JavaScript свободен как формат, и когда его применяют на сайте, это не обязательно плохо. Однако, как мы видели выше, этого не всегда достаточно. Когда сайт передает программу пользователю, недостаточно, чтобы программа была написана на документированном и не вызывающем затруднений языке — эта программа тоже должна быть свободна. “Пользователю передаются только свободные программы” должно стать частью критерия корректного поведения сайтов.

Молчаливая загрузка и выполнение несвободных программ — один из нескольких вопросов, поднимаемых “веб-приложениями”. Термин “веб-приложение” был создан, чтобы стереть принципиальное различие между программами, которые передают пользователям, и программами, которые работают на сервере. Он может обозначать особую клиентскую программу, которую выполняет браузер; он может обозначать особую серверную программу; он может обозначать особую клиентскую программу, которая работает рука об руку с особой серверной программой. Клиентская и серверная стороны затрагивают разные этические вопросы, даже если они так тесно связаны, что можно утверждать, что они представляют собой части одной программы. Эта статья рассматривает только вопрос программ на клиентской стороне. Вопрос серверной стороны мы рассматриваем отдельно.

Как на практике мы можем решать проблему несвободных программ на языке JavaScript на сайтах? Первый шаг — избегать выполнения их.

Что мы подразумеваем под “нетривиальным”? Это понятие растяжимое, так что это вопрос создания простого критерия, дающего хорошие результаты, а не поиска единственно верного ответа.

Мы предлагаем использовать правило, согласно которому программа на JavaScript нетривиальна, если:

Как мы узнаем, свободны ли программы на JavaScript? В отдельной статье мы предлагаем метод, которым нетривиальная программа на языке JavaScript на странице сайта может указать адрес, по которому находится ее исходный текст, а также может указать и лицензию с помощью стилизованных комментариев.

Наконец, нам нужно изменить свободные браузеры так, чтобы они обнаруживали и блокировали несвободные нетривиальные программы на языке JavaScript на страницах сайтов. Программа LibreJS обнаруживает несвободные нетривиальные программы на JavaScript на страницах, которые вы посещаете, и блокирует их. LibreJS входит в состав IceCat и доступен в качестве дополнения для Firefox.

Пользователям браузера нужен также удобный механизм для указания программ, которые нужно использовать вместо программ на определенной странице. (Указанные программы могут быть полной заменой или только измененной версией свободных программ с той страницы.) Greasemonkey приближается к этому, но не совсем, потому что не гарантирует, что программа со страницы будет изменена перед тем, как эта программа начинает выполняться. Можно использовать локальный прокси-сервер, но это слишком непрактично для реального решения. Нам нужно построить решение, которое будет надежным и удобным, так же как и сайты для обмена модификациями. Проект GNU хотел бы рекомендовать сайты, выделенные только для свободных изменений.

Эти особенности будут позволять программе на JavaScript со страницы сайта быть по-настоящему свободной в практическом смысле. JavaScript больше не будет особенным препятствием на пути к нашей свободе — не более, чем C и Java сейчас. Мы сможем отвергать и даже заменять несвободные нетривиальные программы на языке JavaScript точно так же, как мы отвергаем и заменяем несвободные пакеты, предлагаемые для установки обычным образом. Тогда мы сможем начать кампанию по освобождению JavaScript на сайтах.

А пока выполнять несвободную программу на JavaScript допустимо в одном случае: если это нужно, чтобы послать жалобу операторам сайта и сообщить им, что им следует освободить или удалить программы на JavaScript с этого сайта. Пожалуйста, смело включайте временно JavaScript, чтобы сделать это — но не забудьте выключить его после этого.

Вебмастеры: есть несколько способов указать лицензию программ на JavaScript на сайте.

Благодарности: Я благодарю Мэтта Ли и Джона Резига за их помощь в определении предлагаемого нами критерия, и Давида Парунакяна за то, что он обратил мое внимание на эту проблему.

К НАЧАЛУ


[Эмблема ФСПО]“Наша задача — сохранение, защита и поддержка свободы использования, изучения, модификации, копирования и распространения компьютерных программ, а также защита прав пользователей свободных программ”.

Фонд свободного программного обеспечения — ведущая организация, ответственная за разработку операционной системы GNU. Поддержите GNU и ФСПО покупкой руководств и других товаров, присоединением к ФСПО в качестве члена-партнера или пожертвованиями, прямо в фонд или по Flattr.