Раздел 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; если пусто, перейти в состояние СТОП;