Позвонив в «МТУ-Интел», я получил более обстоятельный ответ. Самое главное, что там признают свою ответственность за качество предоставления услуги (в том числе касательно скорости соединения). Евгений Рябовол, с которым я общался, посоветовал сразу обращаться в службу технической поддержки, и уже их технические сотрудники свяжутся с соответствующими службами МГТС. Заодно он отметил, что была проведена модернизация call-центра, однако этим же вечером я убедился, что телефон службы поддержки по-прежнему наглухо занят. С другой стороны, он посоветовал пользоваться либо факсом, либо e-mail, заверив что к таким обращениям относятся со всей серьезностью.
Также Евгений добавил: если у клиента возникает подозрение, что сотрудник компании «не дорабатывает» в решении его проблемы, можно обратиться по адресу complain@stream.ru, и руководство отдела по работе с абонентами рассмотрит жалобу.
Напоследок я спросил, какой процент абонентов, пытающихся подключиться к «Стрим-ТВ», вынужден отказать себе в удовольствии? На что Евгений ответил, что, согласно статистике, лишь около двух процентов желающих получают отказ из-за недостаточной скорости ADSL-соединения.
Конечно, если пользователь ничего читать не хочет, то для этого есть технический персонал, который подъедет и все настроит. Если хочет, то, на мой взгляд, искать информацию на компакт-диске не так удобно, как в брошюрке. И что делать тем, кому диск «не полагается»? Да и в любом случае, стоило бы сделать какую-либо памятку в бумажном виде, чтобы все-таки не огорошивать клиента экранными надписями, а разъяснить некую общую последовательность действий по подключению приставки, отсылая за подробностями к документации на компакт-диске или хотя бы дать конкретный URL в Интернете. И наконец, в этой самой документации описывается настройка только одного модема — Paradyne (который выдают они), и если у вас модем другого производителя[Как у меня, например, D-Link G604T со встроенным модулем беспроводной связи. С таким устройством возникает сразу несколько проблем, о которых я расскажу далее], то неминуемо возникнут «недокументированные» трудности. Даже действуя по аналогии, не всегда можно понять, что именно в настройках мешает работать. Дело в том, что ТВ-приставка рассчитана на определенную конфигурацию сети, в ней уже зашиты настройки соединения, а так как ADSL-роутеры берут управление внутренней сетью и распределение трафика полностью на себя, то декодер просто не может соединиться с сервером провайдера. Именно этим и объяснялась моя «долгоиграющая» надпись на экране.
Итак, чтобы «открыть поток» кроме основного соединения[Его можно сделать как в режиме Bridge — в этом случае надо подключаться к Интернету с компьютера, так и в режиме PPPoE, тогда эту функцию и соответственно распределение трафика по сети берет на себя сам роутер-модем] с параметрами VPI/VCI — 1/50, в ADSL-роутере необходимо создать еще два в режиме Bridge с параметрами 1/91 и 1/92. Первое — отвечает непосредственно за взаимодействие приставки с сервером (сервис Video-on-Demand: обеспечивает демонстрацию программы передач, просмотр своего счета и тому подобные услуги), второе — непосредственно обеспечивает трансляцию изображения.
Кроме того, приставка при включении получает свой IP-адрес через DHCP, поэтому если в роутере был включен свой DHCP-сервер, то ничего работать не будет. Именно с этой проблемой я и столкнулся в начале. Более того, изучив опыт других «собратьев по несчастью», я выяснил, что никакие ограничения на выдачу адресов не помогают; видимо, приставка рассылает широковещательный поисковый запрос к DHCP-серверу только один раз, а сервер в локальном роутере отвечает быстрее «стримовского». Так как новый запрос не выдается даже в случае отказа присвоить локальный IP-адрес, то приставка вообще остается без какого-либо адреса. Поэтому функцию DHCP-сервера приходится выключать в любом случае. Это действительно неудобно, особенно если у вас роутер с модулем WiFi, к которому подключаются мобильные устройства: придется по приходе домой каждый раз переключатся с автоматического получения адреса на статический IP, заново задавая все настройки маски, шлюза и DNS…
У роутеров с WiFi есть и другие проблемы. Дело в том, что пакеты с видеоданными имеют очень высокий приоритет, и если видеопоток транслируется в широковещательном режиме, то на некоторых роутерах он практически полностью забивает весь WiFi-эфир. В результате беспроводные устройства либо вообще не могут подключиться к точке доступа, либо испытывают проблемы при передаче данных. Выглядит это следующим образом: когда приставка «Стрим-ТВ» выключена — все прекрасно работает, но после того как вы ее включаете, Интернет в мобильных устройствах пропадает. Чтобы устранить проблему, необходимо указать, на какие конкретно порты роутера будет поступать поток видеоданных из ADSL-канала. В разных устройствах это делается по-разному — где-то в виде таблицы, где то в виде настроек соединения, в общем, нужно штудировать инструкцию. Однако в моем случае таких проблем, к счастью, не возникло.
После того как все заработало, я столкнулся с очень неудобным расположением каналов. Сначала я думал, что это задается «намертво» поставщиком сигнала, однако оказалось, что его можно настроить, переключая в меню способы сортировки каналов; среди вариантов есть так называемая «личная», где можно переставлять каналы местами — не очень логично, но работает.
Вообще, интерфейс у «Стрима-ТВ» все-таки странный… Например, как попасть в статистику по счету? Находясь в основном меню, надо нажать синюю кнопку на пульте, причем в меню нет никакой подсказки! Это волшебное заклинание надо просто знать. К тому же у статистики «Стрим-ТВ» никакого веб-интерфейса[С 1 февраля «МТУ-Интел» обещает объединить счет «Стрим» и «Стрим-ТВ», соответственно доступ ко всей статистике должен быть из единого личного кабинета «Стрим»]. Очень интересно, может есть еще какие-нибудь интересные кнопки? Если найдете — дайте знать.
У пульта приставки есть одна возможность, о которой вскользь говорится в инструкции — его можно использовать для управления практически любым телевизором. Для этого нужно действовать следующим образом: нажав вверху справа на клавишу «TV» (она загорится красным цветом), нужно дождаться, когда она погаснет, затем (не отпуская) нужно нажать на «ОК» и, не отпуская обеих клавишь, дождаться момента, пока вновь не загорится «TV». Отпускаете все кнопки и набираете трехзначный код производителя (из таблицы кодов). После чего (убедившись, что горящая кнопка «TV» погасла) нужно один раз нажать кнопку «ОК».
Файл с кодами для настройки можно скачать сwww.stream-tv.ru/streamtv/faq/tvbr_codes.html
Если уж затронули тему «секретных» кнопок, то расскажу еще про одну. У приставки есть свои внутренние настройки, в них можно выбрать отношение сторон экрана (4:3 или 16:9), максимальный уровень громкости, номер канала, на который будет транслироваться сигнал (если вы по каким-то причинам выбрали композитный выход для подключения приставки к телевизору), можно переключить сигнал на стандарт S-Video (см. врезку), а если вы приобретете беспроводную инфракрасную клавиатуру — то можно настроить и ее параметры. Попасть в это меню несложно: сразу после включения приставки, дождавшись появления белого экрана, надо нажать на пульте кнопку «Menu», и через некоторое время приставка перейдет в экран своих настроек. По окончании главное — не забыть нажать «Save changes».
Подводя итог, хочется отметить, что транслируемое изображение не вызывает никаких нареканий; в конференциях даже счастливые владельцы многодюймовых плазменных панелей признают высокое качество телевизионной картинки. Так что если у вас каждый месяц находятся ненужные как минимум 13 долларов, имеется хорошее качество ADSL-соединения и вы не боитесь настроить ваш модем (или готовы подождать «фирменных» настройщиков), то я настоятельно рекомендую присмотреться к этому виду телевизионного досуга.
При желании подключить AmiNET110 к S-Video-входу своего телевизора вы будете разочарованы — идущий в комплекте кабель не имеет соответствующего разъема.
Если вы готовы взять в руки паяльник и сделать такой кабель самостоятельно, то вам понадобится знать «распиновку» разъема. Приставка имеет многофункциональный 10-контактный выход стандарта mini-DIN. Поэтому попробуйте раздобыть провод с аналогичным разъемом для подключения видеокарты ATI All-in-Wonder к телевизору (такими кабелями комплектовались и другие видеокарты, например производства Matrox; рекомендую обратиться в сервисный отдел какой-нибудь крупной компьютерной фирмы), в этом случае задача сведется лишь к перепайке контактов в соответствии со схемой.
Есть еще один секрет — у этой приставки есть и RGB-выход. Если у телевизора разъем SCART, то вы можете подключить телевизор и таким образом, но имейте в виду, что на управляющем входе «RGB Status» (16-й контакт SCART) должен быть сигнал +1…3 В.
АНАЛИЗЫ: Апгрейд копилефта
Наука: Проблемы 2000 года: P=?NP
Также Евгений добавил: если у клиента возникает подозрение, что сотрудник компании «не дорабатывает» в решении его проблемы, можно обратиться по адресу complain@stream.ru, и руководство отдела по работе с абонентами рассмотрит жалобу.
Напоследок я спросил, какой процент абонентов, пытающихся подключиться к «Стрим-ТВ», вынужден отказать себе в удовольствии? На что Евгений ответил, что, согласно статистике, лишь около двух процентов желающих получают отказ из-за недостаточной скорости ADSL-соединения.
Конечно, если пользователь ничего читать не хочет, то для этого есть технический персонал, который подъедет и все настроит. Если хочет, то, на мой взгляд, искать информацию на компакт-диске не так удобно, как в брошюрке. И что делать тем, кому диск «не полагается»? Да и в любом случае, стоило бы сделать какую-либо памятку в бумажном виде, чтобы все-таки не огорошивать клиента экранными надписями, а разъяснить некую общую последовательность действий по подключению приставки, отсылая за подробностями к документации на компакт-диске или хотя бы дать конкретный URL в Интернете. И наконец, в этой самой документации описывается настройка только одного модема — Paradyne (который выдают они), и если у вас модем другого производителя[Как у меня, например, D-Link G604T со встроенным модулем беспроводной связи. С таким устройством возникает сразу несколько проблем, о которых я расскажу далее], то неминуемо возникнут «недокументированные» трудности. Даже действуя по аналогии, не всегда можно понять, что именно в настройках мешает работать. Дело в том, что ТВ-приставка рассчитана на определенную конфигурацию сети, в ней уже зашиты настройки соединения, а так как ADSL-роутеры берут управление внутренней сетью и распределение трафика полностью на себя, то декодер просто не может соединиться с сервером провайдера. Именно этим и объяснялась моя «долгоиграющая» надпись на экране.
Итак, чтобы «открыть поток» кроме основного соединения[Его можно сделать как в режиме Bridge — в этом случае надо подключаться к Интернету с компьютера, так и в режиме PPPoE, тогда эту функцию и соответственно распределение трафика по сети берет на себя сам роутер-модем] с параметрами VPI/VCI — 1/50, в ADSL-роутере необходимо создать еще два в режиме Bridge с параметрами 1/91 и 1/92. Первое — отвечает непосредственно за взаимодействие приставки с сервером (сервис Video-on-Demand: обеспечивает демонстрацию программы передач, просмотр своего счета и тому подобные услуги), второе — непосредственно обеспечивает трансляцию изображения.
Кроме того, приставка при включении получает свой IP-адрес через DHCP, поэтому если в роутере был включен свой DHCP-сервер, то ничего работать не будет. Именно с этой проблемой я и столкнулся в начале. Более того, изучив опыт других «собратьев по несчастью», я выяснил, что никакие ограничения на выдачу адресов не помогают; видимо, приставка рассылает широковещательный поисковый запрос к DHCP-серверу только один раз, а сервер в локальном роутере отвечает быстрее «стримовского». Так как новый запрос не выдается даже в случае отказа присвоить локальный IP-адрес, то приставка вообще остается без какого-либо адреса. Поэтому функцию DHCP-сервера приходится выключать в любом случае. Это действительно неудобно, особенно если у вас роутер с модулем WiFi, к которому подключаются мобильные устройства: придется по приходе домой каждый раз переключатся с автоматического получения адреса на статический IP, заново задавая все настройки маски, шлюза и DNS…
У роутеров с WiFi есть и другие проблемы. Дело в том, что пакеты с видеоданными имеют очень высокий приоритет, и если видеопоток транслируется в широковещательном режиме, то на некоторых роутерах он практически полностью забивает весь WiFi-эфир. В результате беспроводные устройства либо вообще не могут подключиться к точке доступа, либо испытывают проблемы при передаче данных. Выглядит это следующим образом: когда приставка «Стрим-ТВ» выключена — все прекрасно работает, но после того как вы ее включаете, Интернет в мобильных устройствах пропадает. Чтобы устранить проблему, необходимо указать, на какие конкретно порты роутера будет поступать поток видеоданных из ADSL-канала. В разных устройствах это делается по-разному — где-то в виде таблицы, где то в виде настроек соединения, в общем, нужно штудировать инструкцию. Однако в моем случае таких проблем, к счастью, не возникло.
После того как все заработало, я столкнулся с очень неудобным расположением каналов. Сначала я думал, что это задается «намертво» поставщиком сигнала, однако оказалось, что его можно настроить, переключая в меню способы сортировки каналов; среди вариантов есть так называемая «личная», где можно переставлять каналы местами — не очень логично, но работает.
Вообще, интерфейс у «Стрима-ТВ» все-таки странный… Например, как попасть в статистику по счету? Находясь в основном меню, надо нажать синюю кнопку на пульте, причем в меню нет никакой подсказки! Это волшебное заклинание надо просто знать. К тому же у статистики «Стрим-ТВ» никакого веб-интерфейса[С 1 февраля «МТУ-Интел» обещает объединить счет «Стрим» и «Стрим-ТВ», соответственно доступ ко всей статистике должен быть из единого личного кабинета «Стрим»]. Очень интересно, может есть еще какие-нибудь интересные кнопки? Если найдете — дайте знать.
У пульта приставки есть одна возможность, о которой вскользь говорится в инструкции — его можно использовать для управления практически любым телевизором. Для этого нужно действовать следующим образом: нажав вверху справа на клавишу «TV» (она загорится красным цветом), нужно дождаться, когда она погаснет, затем (не отпуская) нужно нажать на «ОК» и, не отпуская обеих клавишь, дождаться момента, пока вновь не загорится «TV». Отпускаете все кнопки и набираете трехзначный код производителя (из таблицы кодов). После чего (убедившись, что горящая кнопка «TV» погасла) нужно один раз нажать кнопку «ОК».
Файл с кодами для настройки можно скачать сwww.stream-tv.ru/streamtv/faq/tvbr_codes.html
Если уж затронули тему «секретных» кнопок, то расскажу еще про одну. У приставки есть свои внутренние настройки, в них можно выбрать отношение сторон экрана (4:3 или 16:9), максимальный уровень громкости, номер канала, на который будет транслироваться сигнал (если вы по каким-то причинам выбрали композитный выход для подключения приставки к телевизору), можно переключить сигнал на стандарт S-Video (см. врезку), а если вы приобретете беспроводную инфракрасную клавиатуру — то можно настроить и ее параметры. Попасть в это меню несложно: сразу после включения приставки, дождавшись появления белого экрана, надо нажать на пульте кнопку «Menu», и через некоторое время приставка перейдет в экран своих настроек. По окончании главное — не забыть нажать «Save changes».
Подводя итог, хочется отметить, что транслируемое изображение не вызывает никаких нареканий; в конференциях даже счастливые владельцы многодюймовых плазменных панелей признают высокое качество телевизионной картинки. Так что если у вас каждый месяц находятся ненужные как минимум 13 долларов, имеется хорошее качество ADSL-соединения и вы не боитесь настроить ваш модем (или готовы подождать «фирменных» настройщиков), то я настоятельно рекомендую присмотреться к этому виду телевизионного досуга.
При желании подключить AmiNET110 к S-Video-входу своего телевизора вы будете разочарованы — идущий в комплекте кабель не имеет соответствующего разъема.
Если вы готовы взять в руки паяльник и сделать такой кабель самостоятельно, то вам понадобится знать «распиновку» разъема. Приставка имеет многофункциональный 10-контактный выход стандарта mini-DIN. Поэтому попробуйте раздобыть провод с аналогичным разъемом для подключения видеокарты ATI All-in-Wonder к телевизору (такими кабелями комплектовались и другие видеокарты, например производства Matrox; рекомендую обратиться в сервисный отдел какой-нибудь крупной компьютерной фирмы), в этом случае задача сведется лишь к перепайке контактов в соответствии со схемой.
Есть еще один секрет — у этой приставки есть и RGB-выход. Если у телевизора разъем SCART, то вы можете подключить телевизор и таким образом, но имейте в виду, что на управляющем входе «RGB Status» (16-й контакт SCART) должен быть сигнал +1…3 В.
АНАЛИЗЫ: Апгрейд копилефта
Автор: Федор Зуев
«Отпустить на свободу» свои программы не так просто, как кажется. Во-первых, для передачи авторских прав установлена намеренно усложненная и запутанная форма, которая якобы защищает автора от недобросовестных пользователей. Возможность же того, что автор разрешит любое использование изобретения не кому-то одному, а всем желающим, копирайтный закон вообще не рассматривает. Во-вторых, продолжая аналогию, нет смысла отпускать раба на свободу, если за воротами его схватит первый же встречный охотник за головами. Мало радости раздавать свой код всем желающим только для того, чтобы облегчать жизнь и без того не бедным писателям проприетарного софта.
Один из хакеров Ричард Столлман поступил в лучших американских традициях и основал в 1984 году FSF (Free Software Foundation, Фонд свободного софта) и проект GNU. В 1989 году FSF опубликовал первую версию GNU GPL, «Всеобщей публичной лицензии GNU» — стандартного юридического заклинания, которое каждый мог бы приложить к своей программе, разрешая ее свободное распространение и улучшение всеми, кто согласится распространять свои добавления на тех же условиях.
В 1991 году при участии присоединившегося к FSF юриста Эбена Моглена была выпущена вторая версия GPL. Изменения в ней касались в основном юридической техники. Третьей версии GPL ждали с 2001 года. Официальные лица FSF (Столлман, Моглен, директор FSF Брэдли Кун) многозначительно говорили, что работа идет, но подробностей не сообщали. Столлман недавно признался, что соавторы лицензии просто не могли выкроить время, чтобы собраться и дописать текст.
Текст, как и обещалось, стал гораздо понятнее. Изменены многие фразы, ранее дававшие повод для двусмысленных толкований. Длинные абзацы из больших сложносочиненных фраз, характерные для GPL2, разделены на короткие тезисы, каждый — со своим подзаголовком. Полтора десятилетия ответов на глупые вопросы пользователей не прошли для FSF даром.
Этого, однако, нельзя сказать о частях GPL3, устанавливающих новые нормы и принципы. Тут хватает и многословия, и косноязычия, а кое-где и вовсе трудно понять, что имеется в виду. Таких мест, впрочем, немного. Большая часть изменений посвящена кодификации того, что и прежде считалось общепринятым, а теперь вот еще и официально закреплено.
a) Требование делать некоторые предупреждения юридического и информационного характера. Например, об авторстве программы.
b) Заявления об отказе от гарантий может быть сформулировано иными словами, чем в самой GPL.
c) Запрет на упоминание определенных имен (торговых марок) в рекламе.
d) Требование, чтобы программа имела функцию, позволяющую пользователю получить ее исходный код.
e) Допустимы также некоторые ограничения, касающиеся патентных войн. Подробности — ниже.
Практически это означает, что GPL3 становится совместим с лицензиями таких важных свободных программ, как XFree86, OpenSSL, Eclipse, Apache.
Специальные усилия были приложены, чтобы добиться совместимости с вызвавшей немало споров лицензией Affero GPL (пункт d), хотя, на мой взгляд, оно того не стоило.
По сравнению с детально проработанными патентными нормами таких новейших лицензий, как IBM Public License или Apache Software License, патентная часть GPL3 выглядит набором общих фраз. Но софтверные патенты — сущность противоречивая. И слишком сильно полагаться на ту или иную их рационализацию неразумно.
Во-первых, GPL3 подчеркивает, что в число передаваемых прав входят и любые патенты, связанные с программой, и что, следовательно, всякий, кто распространяет программу, опираясь на GPL, отказывается от всяких патентных претензий по поводу всех прошлых и будущих ее версий.
Во-вторых, GPL3 разрешает делать исключения из этого правила для защиты в патентных войнах. Патентные войны ведутся по принципу «сам такой!». Как только крупной фирме другая крупная фирма предъявляет обвинение в нарушении патента, первая фирма смотрит в своем патентном портфеле и тоже обвиняет вторую фирму в нарушении какого-нибудь патента. Той приходится сбавлять обороты и идти на мировую.
Теоретики свободного софта спорят о допустимой форме «патентной контратаки» (patent retaliation): допустима ли защита от всех патентов, всех софтверных патентов или только от патентов, затрагивающих данную программу; должна ли контратака выражаться в отмене всей лицензии или только патентной ее части. GPL придерживается консервативного подхода — сама не устанавливает никаких санкций, а только позволяет вводить их в качестве дополнительных условий, чтобы обеспечить совместимость с наиболее важными свободными лицензиями, такие санкции практикующими.
Предполагается, что оно служит благой цели, защищает права или что-то в этом роде. Что именно — в закон внести обычно забывают. Нет, не случайно. Я бы сказал, изощренно забывают.
Представьте, что законодатели запретили срывать или взламывать замки. Любые замки, независимо от того, кому принадлежит замок и дверь. Успевший первым навесить на чужое имущество побольше замков — диктует остальным свои условия. Это и есть аналогия DRM. Не аналогия даже — на некоторые настоящие замки DRM распространяется именно таким образом. DRM, очевидно, принципиально несовместим со свободным софтом.
ТС — Treacherous Computing — DRM, встроенный в компьютер на уровне железа так, что запустить на нем можно только софт, подписанный обладателем секретного цифрового ключа. Много шуму вызвало DRM/TC видеоплейера TiVo, где в качестве софта использовалась Linux. Требования GPL2 соблюдались, исходные тексты были предоставлены — но без секретного ключа они совершенно бесполезны, ни изменить, ни перекомпилировать их бинарники невозможно.
Соответственно, в GPL3 появилось уточнение, что полный соответствующий исходный код для бинарника должен включать все необходимое для компиляции и запуска, в том числе и модифицированного.
Кроме того, заявлено, что никакая программа, опубликованная под GPL3, не может считаться реализацией DRM. Иными словами — любую мешающую пользователю функциональность GPL3-программы можно убрать. Или же написать заново программу, осуществляющую доступ к той же самой информации.
Здесь FSF вступил на почву, еще совершенно неизвестную для публичных софтверных лицензий, и неудивительно, что именно эти нормы вызвали наибольшую критику.
1) Требование о предоставлении всех необходимых для компиляции и запуска программы кодов и шифров — безумно.
2) Не только его, Линуса, собственный код, но и вообще весь код, для которого авторами специально не указана возможность апгрейда лицензии, лицензирован под GPL2 и только под ней.
Второй пункт касается толкования действующей GPL2, и здесь, думаю, прав не Торвальдс, а Кокс. А вот первый, несмотря на резкость его формулировки, действительно затрагивает большую проблему с анти-DRM’ными нормами GPL3.
Дело в том, что возможность выполнения программы — это, вообще говоря, свойства не программы, а компьютера. Над которым автор программы прямого контроля не имеет. Ясно, что код для Pentium IV при вcем желании не может быть исполнен на IBM PC XT c процессором i8086. И копирайт тоже, вопреки популярному заблуждению, не дает автору контроля над выполнением его программы — а только над распространением и копированием.
Обсуждалась, например, анекдотическая возможность вытягивания у автора секретного ключа путем постройки машины, требующей подписанный этим ключом бинарник ядра (зная публичный ключ, это сделать не так трудно).
Надеюсь, к моменту выхода окончательной версии GPL3 этот вопрос, как и многие другие, будет решен.
История GPL
Четверть века назад, в 1980 году, Соединенные Штаты впервые в мире приняли закон, распространивший копирайт на компьютерные программы. Это событие без всякого энтузиазма встретили не только конечные пользователи (коих тогда было раз-два и обчелся), но и многие программисты — особенно принадлежавшие к академическому сообществу. Большинство хакеров были (и остаются) людьми идейными. А одна из любимых хакерских идей — «Информация должна быть свободной!». Им же предлагалось сомнительное счастье быть рабовладельцами, вместе со всеми вытекающими последствиями.«Отпустить на свободу» свои программы не так просто, как кажется. Во-первых, для передачи авторских прав установлена намеренно усложненная и запутанная форма, которая якобы защищает автора от недобросовестных пользователей. Возможность же того, что автор разрешит любое использование изобретения не кому-то одному, а всем желающим, копирайтный закон вообще не рассматривает. Во-вторых, продолжая аналогию, нет смысла отпускать раба на свободу, если за воротами его схватит первый же встречный охотник за головами. Мало радости раздавать свой код всем желающим только для того, чтобы облегчать жизнь и без того не бедным писателям проприетарного софта.
Один из хакеров Ричард Столлман поступил в лучших американских традициях и основал в 1984 году FSF (Free Software Foundation, Фонд свободного софта) и проект GNU. В 1989 году FSF опубликовал первую версию GNU GPL, «Всеобщей публичной лицензии GNU» — стандартного юридического заклинания, которое каждый мог бы приложить к своей программе, разрешая ее свободное распространение и улучшение всеми, кто согласится распространять свои добавления на тех же условиях.
В 1991 году при участии присоединившегося к FSF юриста Эбена Моглена была выпущена вторая версия GPL. Изменения в ней касались в основном юридической техники. Третьей версии GPL ждали с 2001 года. Официальные лица FSF (Столлман, Моглен, директор FSF Брэдли Кун) многозначительно говорили, что работа идет, но подробностей не сообщали. Столлман недавно признался, что соавторы лицензии просто не могли выкроить время, чтобы собраться и дописать текст.
Общие впечатления
По сравнению с GPL2 третья версия заметно потолстела. Вместо 16 Кбайт черновик занимает почти 30. Большая часть текста, впрочем, выглядит знакомо. Похоже, мы его уже читали, причем не один раз. Действительно, заметная часть нового текста повторяет «GPL FAQ», полуофициальный документ, содержащий толкование и разъяснение GPL ее авторами.Текст, как и обещалось, стал гораздо понятнее. Изменены многие фразы, ранее дававшие повод для двусмысленных толкований. Длинные абзацы из больших сложносочиненных фраз, характерные для GPL2, разделены на короткие тезисы, каждый — со своим подзаголовком. Полтора десятилетия ответов на глупые вопросы пользователей не прошли для FSF даром.
Этого, однако, нельзя сказать о частях GPL3, устанавливающих новые нормы и принципы. Тут хватает и многословия, и косноязычия, а кое-где и вовсе трудно понять, что имеется в виду. Таких мест, впрочем, немного. Большая часть изменений посвящена кодификации того, что и прежде считалось общепринятым, а теперь вот еще и официально закреплено.
Личное использование
GPL3 делает различие между «распространением», при котором пользователь копирует или передает готовые копии программы кому-нибудь другому, и личным использованием, при котором все создаваемые копии остаются в частном хозяйстве одного и того же лица. Последнее — разрешается безо всяких дополнительных условий. Учитывая, что этим лицом может быть не только программист-одиночка, но и огромная корпорация, послабление значительное. Хотя, конечно, более формальное, чем фактическое — на практике и сейчас никто не задумывается о необходимости, скажем, копировать исходные тексты программ на каждую рабочую станцию.Совместимость
Раздел 7, «Совместимость лицензий» вводит целую систему дополнительных условий — разрешений и ограничений, которые можно добавлять к GPL3 без потери совместимости с другим кодом под GPL3 же. Разрешения (дополнительные права, передаваемые пользователю) могут быть какие угодно (что и раньше практиковалось, в том числе и самим FSF), ограничения же должны быть одного из пяти типов:a) Требование делать некоторые предупреждения юридического и информационного характера. Например, об авторстве программы.
b) Заявления об отказе от гарантий может быть сформулировано иными словами, чем в самой GPL.
c) Запрет на упоминание определенных имен (торговых марок) в рекламе.
d) Требование, чтобы программа имела функцию, позволяющую пользователю получить ее исходный код.
e) Допустимы также некоторые ограничения, касающиеся патентных войн. Подробности — ниже.
Практически это означает, что GPL3 становится совместим с лицензиями таких важных свободных программ, как XFree86, OpenSSL, Eclipse, Apache.
Специальные усилия были приложены, чтобы добиться совместимости с вызвавшей немало споров лицензией Affero GPL (пункт d), хотя, на мой взгляд, оно того не стоило.
Софтверные патенты
Большое внимание GPL3 уделяет борьбе с софтверными патентами. Во времена написания GPL2 софтверные патенты выглядели как временное и случайное извращение. Сейчас это опасность, заботящая большинство программистов во многих странах мира.По сравнению с детально проработанными патентными нормами таких новейших лицензий, как IBM Public License или Apache Software License, патентная часть GPL3 выглядит набором общих фраз. Но софтверные патенты — сущность противоречивая. И слишком сильно полагаться на ту или иную их рационализацию неразумно.
Во-первых, GPL3 подчеркивает, что в число передаваемых прав входят и любые патенты, связанные с программой, и что, следовательно, всякий, кто распространяет программу, опираясь на GPL, отказывается от всяких патентных претензий по поводу всех прошлых и будущих ее версий.
Во-вторых, GPL3 разрешает делать исключения из этого правила для защиты в патентных войнах. Патентные войны ведутся по принципу «сам такой!». Как только крупной фирме другая крупная фирма предъявляет обвинение в нарушении патента, первая фирма смотрит в своем патентном портфеле и тоже обвиняет вторую фирму в нарушении какого-нибудь патента. Той приходится сбавлять обороты и идти на мировую.
Теоретики свободного софта спорят о допустимой форме «патентной контратаки» (patent retaliation): допустима ли защита от всех патентов, всех софтверных патентов или только от патентов, затрагивающих данную программу; должна ли контратака выражаться в отмене всей лицензии или только патентной ее части. GPL придерживается консервативного подхода — сама не устанавливает никаких санкций, а только позволяет вводить их в качестве дополнительных условий, чтобы обеспечить совместимость с наиболее важными свободными лицензиями, такие санкции практикующими.
DRM/TC
Другая угроза свободному софту — DRM/TC. DRM — это, грубо говоря, средство, ограничивающее пользователя в доступе к информации, отключение или обход которого запрещены законом.Предполагается, что оно служит благой цели, защищает права или что-то в этом роде. Что именно — в закон внести обычно забывают. Нет, не случайно. Я бы сказал, изощренно забывают.
Представьте, что законодатели запретили срывать или взламывать замки. Любые замки, независимо от того, кому принадлежит замок и дверь. Успевший первым навесить на чужое имущество побольше замков — диктует остальным свои условия. Это и есть аналогия DRM. Не аналогия даже — на некоторые настоящие замки DRM распространяется именно таким образом. DRM, очевидно, принципиально несовместим со свободным софтом.
ТС — Treacherous Computing — DRM, встроенный в компьютер на уровне железа так, что запустить на нем можно только софт, подписанный обладателем секретного цифрового ключа. Много шуму вызвало DRM/TC видеоплейера TiVo, где в качестве софта использовалась Linux. Требования GPL2 соблюдались, исходные тексты были предоставлены — но без секретного ключа они совершенно бесполезны, ни изменить, ни перекомпилировать их бинарники невозможно.
Соответственно, в GPL3 появилось уточнение, что полный соответствующий исходный код для бинарника должен включать все необходимое для компиляции и запуска, в том числе и модифицированного.
Кроме того, заявлено, что никакая программа, опубликованная под GPL3, не может считаться реализацией DRM. Иными словами — любую мешающую пользователю функциональность GPL3-программы можно убрать. Или же написать заново программу, осуществляющую доступ к той же самой информации.
Здесь FSF вступил на почву, еще совершенно неизвестную для публичных софтверных лицензий, и неудивительно, что именно эти нормы вызвали наибольшую критику.
Линукс останется без GPL3
Переполох наделало резкое письмо Линуса Торвальдса с заявлением, что ядро Linux никогда не перейдет на GPL3. Его позицию, в целом можно свести к следующим тезисам:1) Требование о предоставлении всех необходимых для компиляции и запуска программы кодов и шифров — безумно.
2) Не только его, Линуса, собственный код, но и вообще весь код, для которого авторами специально не указана возможность апгрейда лицензии, лицензирован под GPL2 и только под ней.
Второй пункт касается толкования действующей GPL2, и здесь, думаю, прав не Торвальдс, а Кокс. А вот первый, несмотря на резкость его формулировки, действительно затрагивает большую проблему с анти-DRM’ными нормами GPL3.
Дело в том, что возможность выполнения программы — это, вообще говоря, свойства не программы, а компьютера. Над которым автор программы прямого контроля не имеет. Ясно, что код для Pentium IV при вcем желании не может быть исполнен на IBM PC XT c процессором i8086. И копирайт тоже, вопреки популярному заблуждению, не дает автору контроля над выполнением его программы — а только над распространением и копированием.
Обсуждалась, например, анекдотическая возможность вытягивания у автора секретного ключа путем постройки машины, требующей подписанный этим ключом бинарник ядра (зная публичный ключ, это сделать не так трудно).
Надеюсь, к моменту выхода окончательной версии GPL3 этот вопрос, как и многие другие, будет решен.
Наука: Проблемы 2000 года: P=?NP
Автор: Сергей Николенко
Наверное, мало кто из людей, связанных с компьютерной индустрией, не слышал об этой задаче, занимающей центральное место в современной теоретической (и практической) информатике. За применениями ее возможного решения далеко ходить не нужно — они так разнообразны, что вряд ли мне удастся изложить их все. P и NP, за выяснение факта равенства или неравенства которых платят миллион — это так называемые сложностные классы алгоритмов. Понятие сложности алгоритма совсем не такое сложное, как некоторые алгоритмы. Попробую изложить его здесь более или менее строго, потратив на это константное время (сейчас поймете, что это такое) — как свое, так и читателей.
Предельно коротко и нестрого (зато интуитивно) классы P и NP можно описать так: P — это вычислительные задачи, которые легко решить; NP — задачи, для которых легко проверить, верно ли предполагаемое решение. Перейдем к более точным формулировкам.
Начнем с моделей вычислений. Математические модели компьютеров появились раньше, чем сами электронно-вычислительные машины, но задержка оказалась небольшой. В 1936 году Эмиль Пост (Emil Leon Post), а в 1937 году — Алан Тьюринг (Alan Turing) независимо друг от друга разработали теоретическую модель, которая легла в основу теории алгоритмов. Первый программируемый компьютер — механический агрегат под названием Z3 — был создан уже в 1941 году[ЭНИАК — отнюдь не первый компьютер. Сам ЭНИАК был завершен в 1946 году, но в то время программа, по которой он действовал, была «зашита» в железо, и для перепрограммирования ЭНИАКа нужно было менять его схемы]. Идеальный компьютер очень прост (таково общее свойство большинства полезных математических моделей). Он представляет собой бесконечную в одну сторону (пусть справа) ленту, по которой бегает одна-единственная головка. В каждой ячейке ленты может стоять ноль, единица или не стоять ничего. На каждом шаге выполнения алгоритма головка может сдвинуться влево, сдвинуться вправо либо записать в ячейку, над которой она находится, ноль или единицу. Программа для такой машины — это сколь угодно большой, но конечный набор состояний, каждому из которых соответствует некоторое действие, а также следующее состояние. Есть два выделенных состояния — исходное, в котором начинается работа программы, и специальное состояние СТОП, которое соответствует выходу из программы. Например, вот простая программа:
состояние 0:
прочесть то, что находится под головкой: если 0, перейти в состояние 1; если 1, перейти в состояние 2; если пусто, перейти в состояние СТОП;
состояние 1:
записать в текущую ячейку 1 и перейти в состояние 3;
состояние 2:
записать в текущую ячейку 0 и перейти в состояние 3;
состояние 3:
сдвинуть головку вправо и перейти в состояние 0.
Она бит за битом инвертирует двоичную строку, записанную на ленте (считаем, что изначально головка находится в крайней левой ячейке, с которой начинается запись числа), а когда строка заканчивается, заканчивает работу и программа.
Эта модель вычислений, получившая название машины Тьюринга, стала общепринятой (хотя Пост придумал свою модель на год раньше). На первый взгляд такой простой объект кажется недостаточным для того, чтобы описать все многообразие компьютерных архитектур, — но пока не известно ни одного алгоритма, который нельзя было бы реализовать на машине Тьюринга. В логике и информатике широко известно нестрогое утверждение (так называемый тезис Черча), которое гласит, что любой объект, отвечающий нашему интуитивному понятию алгоритма, можно реализовать в виде программы на машине Тьюринга. Контрпримеров к этому утверждению пока не обнаружено, и оно считается верным — хотя доказать его, разумеется, невозможно.
Теперь нам нужно научиться оценивать скорость работы различных алгоритмов, сравнивать их друг с другом. Один и тот же алгоритм будет на «Пентиуме» работать несравненно быстрее, чем на машине Тьюринга. Более того, процессор современного компьютера может получить данные из любой ячейки памяти, просто «заказав» соответствующей шине адрес ячейки. А единственной головке машины Тьюринга, чтобы добраться до далеких данных, нужно шаг за шагом пройти всю ленту… Неужели эти изменения не влияют на теоретические оценки времени работы алгоритма?
Разумеется, влияют. Однако во многих принципиальных вопросах теории вычислений, к которым относится и обсуждаемая нами проблема P=?NP, принято считать эквивалентными по сложности такие алгоритмы, время выполнения которых отличается друг от друга полиномиально — то есть на величину, не превосходящую Cn
, где n — объем входной информации («длина входа»), C и d — константы[Отметим, что в теории вычислений невозможно оценивать работу алгоритма иначе, как на бесконечных сериях задач. Для этого используется язык «больших и малых О», пришедший сюда из матанализа. Например, если говорят, что алгоритм выполняется за время O(n•log n) на данном множестве задач, это означает, что существует некоторая константа C, единая для этого множества задач и такая, что алгоритм решает каждую из них не больше, чем за C•n•log n операций, где n — объем начальных данных задачи]. Неформально говоря, в рамках этой теории любые алгоритмы, работающие с «полиномиальной скоростью», считаются быстрыми (хотя на практике время их работы может быть неприемлемо большим). Класс задач, для которых существуют алгоритмы, решающие их за время, полиномиальное от размера входа, и есть тот самый класс P, о котором идет речь в формулировке нашей проблемы.
К классу P принадлежат очень многие известные задачи, — каждый, кто открывал учебники по программированию, помнит, сколько там алгоритмов, работающих за полиномиальное время. В статье «Теория и практика сложности» («КТ» #603) я уже писал о том, что Леонид Хачиян доказал, что в классе P лежит даже кажущаяся неприступно сложной задача линейного программирования.
Наверное, мало кто из людей, связанных с компьютерной индустрией, не слышал об этой задаче, занимающей центральное место в современной теоретической (и практической) информатике. За применениями ее возможного решения далеко ходить не нужно — они так разнообразны, что вряд ли мне удастся изложить их все. P и NP, за выяснение факта равенства или неравенства которых платят миллион — это так называемые сложностные классы алгоритмов. Понятие сложности алгоритма совсем не такое сложное, как некоторые алгоритмы. Попробую изложить его здесь более или менее строго, потратив на это константное время (сейчас поймете, что это такое) — как свое, так и читателей.
Предельно коротко и нестрого (зато интуитивно) классы P и NP можно описать так: P — это вычислительные задачи, которые легко решить; NP — задачи, для которых легко проверить, верно ли предполагаемое решение. Перейдем к более точным формулировкам.
Начнем с моделей вычислений. Математические модели компьютеров появились раньше, чем сами электронно-вычислительные машины, но задержка оказалась небольшой. В 1936 году Эмиль Пост (Emil Leon Post), а в 1937 году — Алан Тьюринг (Alan Turing) независимо друг от друга разработали теоретическую модель, которая легла в основу теории алгоритмов. Первый программируемый компьютер — механический агрегат под названием Z3 — был создан уже в 1941 году[ЭНИАК — отнюдь не первый компьютер. Сам ЭНИАК был завершен в 1946 году, но в то время программа, по которой он действовал, была «зашита» в железо, и для перепрограммирования ЭНИАКа нужно было менять его схемы]. Идеальный компьютер очень прост (таково общее свойство большинства полезных математических моделей). Он представляет собой бесконечную в одну сторону (пусть справа) ленту, по которой бегает одна-единственная головка. В каждой ячейке ленты может стоять ноль, единица или не стоять ничего. На каждом шаге выполнения алгоритма головка может сдвинуться влево, сдвинуться вправо либо записать в ячейку, над которой она находится, ноль или единицу. Программа для такой машины — это сколь угодно большой, но конечный набор состояний, каждому из которых соответствует некоторое действие, а также следующее состояние. Есть два выделенных состояния — исходное, в котором начинается работа программы, и специальное состояние СТОП, которое соответствует выходу из программы. Например, вот простая программа:
состояние 0:
прочесть то, что находится под головкой: если 0, перейти в состояние 1; если 1, перейти в состояние 2; если пусто, перейти в состояние СТОП;
состояние 1:
записать в текущую ячейку 1 и перейти в состояние 3;
состояние 2:
записать в текущую ячейку 0 и перейти в состояние 3;
состояние 3:
сдвинуть головку вправо и перейти в состояние 0.
Она бит за битом инвертирует двоичную строку, записанную на ленте (считаем, что изначально головка находится в крайней левой ячейке, с которой начинается запись числа), а когда строка заканчивается, заканчивает работу и программа.
Эта модель вычислений, получившая название машины Тьюринга, стала общепринятой (хотя Пост придумал свою модель на год раньше). На первый взгляд такой простой объект кажется недостаточным для того, чтобы описать все многообразие компьютерных архитектур, — но пока не известно ни одного алгоритма, который нельзя было бы реализовать на машине Тьюринга. В логике и информатике широко известно нестрогое утверждение (так называемый тезис Черча), которое гласит, что любой объект, отвечающий нашему интуитивному понятию алгоритма, можно реализовать в виде программы на машине Тьюринга. Контрпримеров к этому утверждению пока не обнаружено, и оно считается верным — хотя доказать его, разумеется, невозможно.
Теперь нам нужно научиться оценивать скорость работы различных алгоритмов, сравнивать их друг с другом. Один и тот же алгоритм будет на «Пентиуме» работать несравненно быстрее, чем на машине Тьюринга. Более того, процессор современного компьютера может получить данные из любой ячейки памяти, просто «заказав» соответствующей шине адрес ячейки. А единственной головке машины Тьюринга, чтобы добраться до далеких данных, нужно шаг за шагом пройти всю ленту… Неужели эти изменения не влияют на теоретические оценки времени работы алгоритма?
Разумеется, влияют. Однако во многих принципиальных вопросах теории вычислений, к которым относится и обсуждаемая нами проблема P=?NP, принято считать эквивалентными по сложности такие алгоритмы, время выполнения которых отличается друг от друга полиномиально — то есть на величину, не превосходящую Cn
, где n — объем входной информации («длина входа»), C и d — константы[Отметим, что в теории вычислений невозможно оценивать работу алгоритма иначе, как на бесконечных сериях задач. Для этого используется язык «больших и малых О», пришедший сюда из матанализа. Например, если говорят, что алгоритм выполняется за время O(n•log n) на данном множестве задач, это означает, что существует некоторая константа C, единая для этого множества задач и такая, что алгоритм решает каждую из них не больше, чем за C•n•log n операций, где n — объем начальных данных задачи]. Неформально говоря, в рамках этой теории любые алгоритмы, работающие с «полиномиальной скоростью», считаются быстрыми (хотя на практике время их работы может быть неприемлемо большим). Класс задач, для которых существуют алгоритмы, решающие их за время, полиномиальное от размера входа, и есть тот самый класс P, о котором идет речь в формулировке нашей проблемы.
К классу P принадлежат очень многие известные задачи, — каждый, кто открывал учебники по программированию, помнит, сколько там алгоритмов, работающих за полиномиальное время. В статье «Теория и практика сложности» («КТ» #603) я уже писал о том, что Леонид Хачиян доказал, что в классе P лежит даже кажущаяся неприступно сложной задача линейного программирования.