Приложение А
Научитесь программированию за десять лет
Данная глава написана Петером Норвигом (Peter Norvig, © 2001 г.). Воспроизводится по разрешению. Оригинальную статью, включая гиперссылки, можно найти по адресу http://www.norvig.com/21-days.html. Мы включили ее, поскольку полагаем, что она содержит важную идею. Приведенная цитата является одной из наших давних любимых, и поскольку она применима к сути нашего приложения, мы ее также включили.
Почему каждый в такой спешке?
Зайдите в любой книжный магазин, и вы увидите «Научитесь Java за 7 дней» наряду с бесконечными вариациями, предлагающими научиться Visual Basic, Windows, Internet и т.д. за несколько дней или часов. Я произвел следующий расширенный поиск на Amazon.com:
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
и получил 248 попаданий. Первые 78 были компьютерными книгами (номер 79 был «Изучите Бенгали за 30 дней»). Я заменил «дни» ('days') на «часы» ('hours') и получил замечательным образом сходные результаты: еще 253 книг, из них 77 компьютерных, за которыми следовала под номером 78 «Научитесь грамматике и стилистике за 24 часа». Всего из верхних 200 книг 96% были компьютерные.
Вывод таков, что либо люди очень торопятся изучить компьютеры, либо эти компьютеры каким-то образом фантастически легче изучить, чем что-то еще. Книг о том, как изучить Бетховена, или квантовую физику, или даже научиться ухаживать за собакой за несколько дней, нет.
Давайте проанализируем, что может означать название наподобие «Изучите Паскаль за три дня»:
• Изучите: за 3 дня у вас не будет времени написать несколько значительных программ и научиться из них на своих успехах и неудачах. У вас не будет времени поработать с опытным программистом и понять, на что похожа жизнь в этом окружении. Короче, у вас не будет времени научиться многому. Поэтому можно говорить лишь о поверхностном знакомстве, а не глубоком понимании. Как сказал римский папа Александр, неглубокое знание является опасной вещью.
• Паскаль: за 3 дня вы смогли бы изучить синтаксис Паскаля (если вы уже знаете сходный язык), но не смогли бы много узнать о том, как использовать этот синтаксис. Короче, если бы вы были программистом на Бейсике, вы смогли бы писать программы в стиле Бейсика на Паскале, но не смогли бы изучить, для чего Паскаль в действительности подходит (или не подходит). В чем же суть? Алан Перлис (Alan Perlis) сказал однажды: «Язык, который не влияет на способ вашего мышления о программировании, не стоит того, чтобы его знали». Другими словами, вам приходится изучить крошечный кусок Паскаля (или, более вероятно, чего-то наподобие Visual Basic или JavaScript), поскольку вам нужно взаимодействовать с существующим инструментом для выполнения определенной задачи. Но тогда вы не обучаетесь программированию; вы учитесь выполнять эту задачу.
• За три дня: к сожалению, этого недостаточно, как показывает следующий раздел.
Научитесь программированию за десять лет
Ученые (Hayes, Bloom) показали, что развитие высокой квалификации в любой из широкого разнообразия областей, включая шахматы, сочинение музыки, рисование, игра на фортепьяно, плавание, теннис, исследования в нейропсихологии и топологии, занимают около десяти лет. По-видимому, в действительности не может быть сокращения: даже Моцарту, который был музыкально одаренным уже в 4 года, потребовалось еще 13 лет, прежде чем он начал создавать мировую классическую музыку. В другом жанре Битлз, казалось, вырвались на сцену, появившись в шоу Эда Салливана в 1964 г. Но они играли с 1957 года, и хотя они рано завоевали широкую популярность, их первый переломный успех, Сержант Пепперс, был выпущен в 1967 г. Сэмюэл Джонсон (Samuel Johnson) считал, что требуется более десяти лет: «Мастерство в любой отрасли достигается лишь работой в течение жизни; его нельзя купить по меньшей цене». А Чосер (Chaucer) жаловался: «Жизнь так коротка, а ремеслу так долго учиться».
Вот мой рецепт для успеха в программировании:
• Заинтересуйтесь программированием и сделайте что-нибудь, потому что это забавно. Убедитесь, что оно продолжает оставаться достаточно интересным, чтобы вы хотели прилагать усилия в течение десяти лет.
• Говорите с другими программистами; читайте другие программы. Это важнее, чем любая книга или учебный курс.
• Программируйте. Лучшей разновидностью обучения является обучение деланием. Говоря более технически, «максимальный уровень производительности индивидуума в данной области не достигается автоматически как функция расширения опыта, но его могут повысить даже очень опытные индивидуумы в результате обдуманных усилий по совершенствованию» и «наиболее эффективное обучение требует хорошо определенной задачи с соответствующим уровнем трудности для данного конкретного индивидуума, информационной обратной связи и возможностей повторения и исправления ошибок». Книга Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life (Практическое познание мышление, математика и совершенствование способностей в повседневной жизни) является интересным справочным пособием для этой точки зрения.
• Если хотите, проведите четыре года в колледже (или еще больше в аспирантуре). Это даст вам доступ к некоторым видам работ, требующим диплома, и это даст более глубокое понимание области, но если вам не нравится школа, вы можете (с некоторым упорством) получить аналогичный опыт на работе В любом случае, одного лишь изучения книг недостаточно. «Образование в компьютерных науках может сделать кого-нибудь искусным программистом не в большей степени, чем изучение кистей и красок может сделать кого-то искусным художником», — говорит Эрик Реймонд (Eric Raymond), автор The New Hacker's Dictionary (Словаря новых хакеров). Один из лучших программистов, которых я когда-либо принимал на работу, имел лишь среднее образование, он создал массу превосходных программ, у него есть своя группа новостей и через фондовые опционы, без сомнения, намного богаче, чем буду я когда-либо.
• Работайте над проектами с другими программистами. Будьте лучшим программистом в некоторых проектах; будьте худшим в некоторых других. Когда вы лучший, вы принимаетесь проверять свои способности возглавлять проект и вдохновлять других своим видением. Когда вы худший, вы изучаете то, что делают мастера, и вы изучаете, что они не любят делать (поскольку они заставляют делать это за себя вас).
• Работайте над проектами после других программистов. Погрузитесь в понимание программы, написанной кем-то еще. Посмотрите, чего стоит понять и исправить ее, когда рядом нет авторов программы. Подумайте над тем, как спроектировать свои программы, чтобы сделать их проще для тех, кто будет их сопровождать после вас.
• Изучите по крайней мере полдюжины языков программирования. Включите один язык, поддерживающий абстракции классов (подобно Java или С++), один, поддерживающий функциональные абстракции (подобно Lisp или ML), один, поддерживающий синтаксические абстракции (подобно Lisp), один, поддерживающий декларативные спецификации (подобно Prolog или шаблонам C++), один, поддерживающий сопрограммы (подобно Icon или Scheme), и одни, поддерживающий параллелизм (подобно Sisal).
• Помните, что в «компьютерных науках» есть «компьютер». Знайте, сколько времени ваш компьютер тратит на исполнение инструкции, получение слова из памяти (с попаданием в кэш и без попадания), чтение последовательных слов с диска и поиск нового положения на диске (Ответы ниже.)
• Погрузитесь в работу по стандартизации языка. Это может быть комитет ANSI С++, или это может быть принятием решения, должен ли ваш местный стиль программирования использовать 2 или 4 пробела в отступах. В любом случае, вы узнаете, что любят в языке другие люди, насколько глубоко они это чувствуют и, возможно, даже немного о том, почему они это чувствуют.
• Имейте здравый смысл, чтобы отделаться от работы по стандартизации языка как можно скорее.
Держа все это в уме, сомнительно, насколько далеко вы сможете уйти, обучаясь лишь по книгам. До рождения моего первого ребенка я прочел все книги How To (Как…), и до сих пор чувствую себя необразованным новичком. 30 месяцев спустя, когда ожидался мой второй ребенок, вернулся ли я к книгам, чтобы освежить их в памяти? Нет. Вместо этого я полагался на свой собственный опыт, который оказался для меня намного более полезным и обнадеживающим, чем тысячи страниц, написанных экспертами.
Фред Брукс (Fred Brooks) в своем эссе Никаких серебряных пуль (No Silver Bullets) определил план из трех частей для обнаружения великих проектировщиков программного обеспечения:
1. Систематически как можно раньше распознавать ведущих проектировщиков.
2. Назначить наставников по достижениям, ответственных за разработку перспективы и тщательно хранить архивы достижений.
3. Предоставлять растущим проектировщикам возможности для взаимодействия и стимулирования ими друг друга.
Это предполагает, что у некоторых людей уже есть качества, необходимые, чтобы стать великими проектировщиками; задача заключается в том, чтобы соответствующим образом их выманить. Алан Перлис (Alan Perlis) выразился более лаконично- «Каждого можно научить ваять: Микеланджело пришлось бы учить, как не делать это. Так же и с великими программистами».
Поэтому вперед, купите эту книгу по Java; возможно, вы получите от нее какую- нибудь пользу. Но вы не измените свою жизнь или свою действительную общую квалификацию как программиста за 24 часа, дня или даже месяцев.
Ссылки
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
Ответы
Время выполнения различных операций на типичном ПК 1 ГГц летом 2001 г.:
исполнение одной инструкции 1 нс = (1/1000 000 000) сек
выборка слова из кэша L1 2 нс
выборка слова из основной памяти 10 нс
выборка смежного слова с диска 200 нс
выборка слова из нового места на диске (поиск) 8 000 000 нс = 8 мс
Сноски
Эта страница доступна также в переводе на японский язык благодаря Yasushi Murakawa и в переводе на испанский язык благодаря Carlos Rueda.
T. Capey указывает, что страница Complete Problem Solver на Amazon теперь содержит книги Teach Yourself Bengali in 21 days и Teach Yourself Grammar and Style под рубрикой «Клиенты, которые купили эту книгу, купили также и эти книги». Я догадываюсь, что большая часть людей, посмотревших на ту книгу, пришли с этой страницы.
Приложение В
Лицензия Caldera для старой Unix
[194]
CALDERA
240 West Center Street
Orem, Utah 84057
801-765-4999 Fax 801-765-4481
23 января 2002 г.
Дорогие энтузиасты UNIX®,
Caldera International, Inc. настоящим предоставляет безвозмездную лицензию, которая включает права на использование, модификацию и распространение этого названного исходного кода, включая создание производных двоичных изделий из исходного кода. Исходный код, для которого Caldera International, Inc. передает права, ограничены следующими операционными системами UNIX, которые работают на 16-разрядном процессоре PDP-11 и ранних версиях 32-разрядной операционной системы UNIX, со специальным исключением UNIX System III и UNIX System V и операционных систем-наследников:
32-разрядной 32V UNIX,
16-разрядной UNIX версий 1, 2, 3, 4, 5, 6, 7.
Caldera International, Inc. не дает никаких гарантий или поручительств, что какой-нибудь исходный код доступен от Caldera International, Inc.
Следующее уведомление об авторских правах применяется к файлам исходного кода, для которых предоставляется данная лицензия.
Copyright © Caldera International Inc. 2001–2002. Все права сохранены. Разрешается распространение и использование в исходной и двоичной форме, с модификациями или без них, при соблюдении следующих условий:
При распространении исходного кода и документации должно быть сохранено вышеприведенное уведомление об авторских правах, данный список условий и следующий отказ от ответственности. При распространении в двоичном виде вышеприведенное уведомление об авторских правах, данный список условий и следующий отказ от ответственности должны быть воспроизведены в документации и/или в других материалах, предоставляемых при распространении.
Все рекламные материалы, упоминающие особенности или использование данного программного обеспечения, должны отображать следующее признание:
Этот продукт включает программное обеспечение, разработанное или принадлежащее Caldera International, Inc.
Ни название Caldera International, Inc., ни названия других внесших вклад участников не могут использоваться для поддержки или продвижения продуктов, производных отданного программного обеспечения, без особого предварительного письменного разрешения.
ИСПОЛЬЗОВАНИЕ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПРЕДУСМОТРЕНО ПО ЛИЦЕНЗИИ CALDERA INTERNATIONAL, INC. И ДРУГИХ ВНЕСШИХ ВКЛАД УЧАСТНИКОВ «КАК ЕСТЬ» И БЕЗ ВСЯКИХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ ПРИГОДНОСТИ ДЛЯ ПРОДАЖИ ИЛИ ПРИМЕНИМОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. НИ В КОЕМ СЛУЧАЕ CALDERA INTERNATIONAL, INC. НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ШТРАФНОЙ ИЛИ ЯВЛЯЮЩИЙСЯ СЛЕДСТВИЕМ УЩЕРБ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПРИОБРЕТЕНИЕМ ИЛИ ЗАМЕНОЙ ТОВАРОВ; ПОТЕРЮ ЦЕННОСТИ, ДАННЫХ, УПУЩЕННУЮ ВЫГОДУ ИЛИ ПРИОСТАНОВКУ БИЗНЕСА), КАК БЫ ОН НИ БЫЛ ВЫЗВАН И В СООТВЕТСТВИИ С КАКИМИ БЫ ТО НИ БЫЛО ПРЕДПОЛОЖЕНИЯМИ, БУДЬ ТО В КОНТРАКТЕ, НЕПОСРЕДСТВЕННОЙ ОТВЕТСТВЕННОСТИ ИЛИ ГРАЖДАНСКОМ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГОЕ), ВОЗНИКШИЕ ЛЮБЫМ СПОСОБОМ ВСЛЕДСТВИЕ ИСПОЛЬЗОВАНИЯ ДАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ В СЛУЧАЕ ПРЕДУПРЕЖДЕНИЯ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.
Приложение С
Общедоступная лицензия GNU
[195]
Версия 2, июнь 1991 г.
Copyright © 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111, USA
Разрешается копировать и распространять дословные копии данного лицензионного документа, но не разрешается его изменять.
Преамбула
Лицензии большинства программных продуктов составлены так, чтобы отобрать у вас право совместно использовать и изменять продукт. По контрасту, Общедоступная лицензия GNU (GNU General Public License), напротив, подразумевает вашу свободу в совместном использовании и изменении свободного программного обеспечения — чтобы гарантировать, что программное обеспечение является свободным для всех своих пользователей. Данная Общедоступная лицензия применяется к большей части программного обеспечения Фонда независимых программ (Free Software Foundation) и к любой другой программе, авторы которой передают ее на использование с данной лицензией. (Некоторое другое программное обеспечение Фонду независимых программ защищается вместо этого Общедоступной библиотечной лицензией GNU (GNU Library General Public License).) Вы также можете использовать ее для своих программ.
Когда мы говорим о независимом программном обеспечении, мы имеем в виду свободу, а не цену. Наши Общедоступные лицензии разработаны так, чтобы гарантировать вам свободу распространять копии независимого программного обеспечения (и назначать за это цену, если хотите), получать исходный код, если хотите, изменять программное обеспечение или его части в новых независимых программах; а также гарантировать, что вы будете знать обо всех этих вещах.
Чтобы защитить ваши права, нам необходимо предусмотреть ограничения, которые запрещают кому бы то ни было отказывать вам в этих правах или просить вас от них отказаться. Эти ограничения преобразуются а определенные ваши обязанности, если вы распространяете копии программного обеспечения или модифицируете его.
Например, если вы распространяете копии таких программ, вне зависимости от того, бесплатно или за плату, вы обязаны дать получателям все права, которые есть у вас. Вы должны также обеспечить для них получение или возможность получения исходного кода. И вы должны довести до их сведения эти положения, чтобы они знали о своих правах.
Мы защищаем ваши права а два этапа: (1) обеспечивая авторское право на программное обеспечение и (2) предоставляя вам эту лицензию, которая дает вам законное разрешение копировать, распространять и/или модифицировать программное обеспечение.
Также, для защиты каждого автора и нашей собственной, мы хотим удостовериться в том, что каждый понимает, что на это независимое программное обеспечение нет гарантий. Если программное обеспечение модифицируется кем-либо еще и распространяется дальше, мы хотим, чтобы его получатели знали, что то, что они получают, не является оригиналом, поэтому любые проблемы, привнесенные другими, не должны отражаться на репутации автора оригинального продукта.
Наконец, любая независимая программа постоянно подвергается угрозе со стороны патентов на программное обеспечение. Мы хотим избежать опасности, когда распространители независимой программы получают отдельные патентные права, фактически превращая программу в патентованную. Чтобы предотвратить это, мы ясно дали понять, что любой патент должен предусматривать свободное его использование всеми или не регистрироваться вообще.
Далее следуют точные праве и обязанности при копировании, распространении и модификации.
Права и обязанности при копировании, распространении и модификации
0. Данная лицензия распространяется на любую программу или другой продукт, который содержит размещенное владельцем авторских прав уведомление, заявляющее, что этот продукт может распространяться в соответствии с условиями данной Общедоступной лицензии. Используемый далее термин «Программа» относится к любым таким программе или продукту, а «продукт, основанный на Программе» означает либо саму Программу, либо любой производный продукт, защищаемый законом об авторском праве: то есть продукт, содержащий Программу или часть ее, воспроизведенный точно или с модификациями и/или переведенный на другой язык. (В дальнейшем перевод без ограничений включается в термин «модификация».) К каждому обладателю лицензии обращение следует как «вы».
Другая деятельность, отличная от копирования, распространения и модификации, не охватывается данной Лицензией; она выходит за рамки ее действия. Акт запуска Программы на выполнение не ограничивается, а результаты работы Программы попадают под действие Лицензии лишь в том случае, если их содержание составляет продукт на основе Программы (независимо от того, было ли это сделано путем запуска Программы). Правомочность этого положения зависит от того, что делает Программа.
1. Вы можете копировать и распространять дословные копии исходного кода Программы в том виде, как вы его получили, с помощью любого средства при условии, что вы открыто и соответствующим образом опубликуете в каждой копни соответствующее заявление об авторских правах и отказе от гарантий; сохраните без изменений все заявления, ссылающиеся на данную Лицензию и на отсутствие каких-либо гарантий, и предоставите всем остальным получателям Программы вместе с самой Программой копию данной Лицензии.
Вы можете назначить плату за акт физического копирования, вы можете также по своему усмотрению предоставить гарантию на платной основе.
2. Вы вправе модифицировать свою копию или копии Программы или любую их часть, создавая тем самым продукт, основанный на Программе, и копировать и распространять такие модификации или продукты на условиях Параграфа 1, приведенного выше, при условии, что вы будете также следовать всем нижеприведенным требованиям:
a. Модифицированные файлы должны иметь заметные предупреждения о том, что вы изменили файлы, с указанием даты изменений.
b. Любой продукт, который вы распространяете или публикуете, который целиком или частично является производным от Программы или любой ее части, должен быть целиком бесплатно лицензирован для всех третьих сторон в соответствии с условиями данной Лицензии.
c. Если модифицированная программа обычно интерактивно принимает команды при работе, вы должны обеспечить при ее запуске стандартным способом для такого интерактивного использования выведение на печать или отображение на экране сообщения, включающего соответствующее заявление об авторских правах и заявление об отсутствии гарантий (либо, в противном случае, заявляющее о предоставлении гарантии вами) и о том, что пользователи могут далее распространять программу на данных условиях, и сообщающее пользователю, как можно просмотреть копню данной Лицензии. (Исключение: если сама Программа интерактивная, но обычно не выводит подобного сообщения, от вашего продукта, основанного на Программе, не требуется выводить это сообщение).
Эти требования применяются к модифицированному продукту в целом. Если идентифицируемые разделы этого продукта не являются производными от Программы и могут с основанием рассматриваться независимыми и отдельными продуктами сами по себе, тогда данная лицензия и ее условия неприменимы к этим разделам при распространении их в качестве отдельных продуктов. Но когда вы распространяете те же разделы в виде целого, являющегося продуктом, основанным на Программе, распространение этого целого должно соответствовать положениям данной Лицензии, положения которой для обладателей лицензии распространяется на все целое и, таким образом, на каждую отдельную часть независимо от того, кто ее написал.
Таким образом, цель данного раздела состоит не в том, чтобы заявить свои права или оспорить ваши права на продукт, написанный исключительно вами; целью скорее является использование права контролировать распространение производных или совместных продуктов, основанных на Программе.
В дополнение, простое объединение другого продукта, не основанного на Программе, с Программой (или продуктом, основанным на Программе) на одном носителе информации или среде передачи данных не включает другой продукт в сферу применения данной Лицензии.
3. Вы вправе копировать и распространять Программу (или продукт, основанный на ней, в соответствии с Параграфом 2) в виде объектного кода или исполняемой программы, при выполнении условий, оговоренных в Параграфах 1 и 2, обеспечив также соблюдение одного из следующих требований:
a. Сопроводив ее соответствующим полным исходным кодом в электронной форме, который должен распространяться в соответствии с вышеприведенными условиями Параграфов 1 и 2, на носителях, обычно используемых для обмена программами; или
b. Сопроводив ее письменным предложением, действительным по крайней мере в течение трех лет, на предоставление любой третьей стороне по цене, не превышающей стоимость затрат на физическое распространение исходного кода, полной копии соответствующего исходного кода в электронном виде для распространения в соответствии с вышеприведенными условиями Параграфов 1 и 2, на носителях, обычно используемых для обмена программами; или
c. Сопроводив ее сведениями, которые вы получили в качестве предложения распространения соответствующего исходного кода. (Данный вариант допустим лишь для некоммерческого распространения и лишь в том случае, если вы получили программу в виде объектного кода или исполняемого модуля с данным предложением, в соответствии с вышеприведенным Подпунктом b.)
Исходный код для продукта означает предпочтительную форму продукта для внесения изменений. Для продукта исполняемого модуля полный исходный код означает весь исходный код для всех модулей, который в нем содержится, плюс любые связанные с ним файлы определения интерфейсов, плюс сценарии, используемые для управления компиляцией и установки исполняемого файла. Однако, в виде особого исключения, распространяемый исходный код не нуждается во включении чего-либо, что обычно распространяется (либо в виде исходного кода, либо в бинарной форме) с главными компонентами (компилятором, ядром и т.д.) операционной системы, на которой исполняемый модуль запускается, если только этот компонент сам не сопровождает исполняемый модуль.
Если распространение исполняемого или объектного кода осуществляется путем предложения доступа к копированию из определенного места, в таком случае предложение эквивалентного доступа для копирования исходного кода из того же источника рассматривается как распространение исходного кода, даже если третья сторона не принуждается к копированию исходного кода вместе с объектным кодом.
4. Вы не вправе копировать, изменять, выдавать сублицензии или распространять Программу на иных условиях, чем предусмотрено настоящей Лицензией. Любая попытка копировать, изменять, выдавать сублицензии или распространять Программу иным способом является не имеющей юридической силы и ведет к автоматическому прекращению ваших прав, предусмотренных данной Лицензией. Однако стороны, получившие от вас копии или права на условиях данной Лицензии, сохранят свои лицензии до тех пор, пока эти стороны будут полностью соблюдать условия данной Лицензии.
5. От вас не требуется признавать данную Лицензию, поскольку вы не подписывали ее. Однако, ничто иное не дает вам прав на изменение или распространение Программы или производных от нее продуктов. Подобные действия запрещены законом, если вы не признаете данную Лицензию. Следовательно, фактом изменения или распространения Программы (или любого продукта на основе Программы) вы заявляете о своем признании данной Лицензии и всех содержащихся в ней требований и условий по копированию, распространению или изменению Программы или продуктов, основанных на ней.
6. Каждый раз при распространении Программы (или любого продукта, основанного на Программе), получатель автоматически становится обладателем лицензии от оригинального владельца авторских прав на копирование, распространение или изменение Программы в соответствии с данными требованиями и условиями. Вы не вправе налагать дополнительные ограничения на реализации предоставляемых здесь прав получателя. Вы не несете ответственности за обеспечение соблюдения третьей стороной данной Лицензии.
7. Если в результате судебного разбирательства или заявления о нарушении патентных прав, или по любой иной причине (не ограничиваясь вопросами патентов) на вас наложены ограничения (по предписанию суда, по соглашению или иные), которые противоречат условиям настоящей Лицензии, они не освобождают вас от условий данной Лицензии. Если вы не можете распространять Программу таким образом, чтобы одновременно выполнять свои обязательства в соответствии с настоящей Лицензией и с любыми другими относящимися к делу обязательствами, вы, как следствие, вовсе лишаетесь права распространять Программу. Например, если патентная лицензия не допускает безвозмездное распространение Программы всеми теми, кто прямо или косвенно получит от вас копии, единственным способом, с помощью которого вы можете удовлетворить и патентную лицензию, и данную Лицензию, будет полное воздержание от распространения Программы.
Если любая часть данного параграфа считается недействительной или не могущей быть выполненной в каких-либо конкретных обстоятельствах, должна применяться оставшаяся часть параграфа, а параграф в целом должен применяться в других условиях.
Целью данного параграфа не является склонить вас к нарушению каких-либо заявлений о патентных или иных правах собственности или оспорить любые такие заявления; единственная цель данного параграфа заключается в защите целостности системы распространения свободного программного обеспечения, которая реализуется практикой общедоступной лицензии. Многие люди сделали щедрый вклад в широкий спектр программного обеспечения, распространяемого посредством этой системы, в надежде на последовательное применение этой системы; делом автора/дарителя является решение, нужно ли распространять программу через любую другую систему, а обладатель лицензии не может повлиять на этот выбор.
Этот параграф нацелен на прояснение того, что подразумевается выводом оставшейся части настоящей Лицензии.
8. Если распространение и/или использование Программы в определенных странах ограничено либо патентами, либо охраняемыми авторским правом интерфейсами, ординальный владелец авторских прав, помещающий Программу под сферу влияния данной Лицензии, может добавить явные географические ограничения на распространение, исключающие эти страны, таким образом, чтобы распространение было разрешено лишь в не исключенных странах. В таком случае, данная Лицензия включает в себя это ограничение, как если бы оно было написано в тексте самой данной Лицензии.
9. Фонд свободного программного обеспечения время от времени может публиковать пересмотренные и/или новые версии Общедоступной Лицензии. Такие новые версии будут сходны по духу с настоящей версией, но могут отличаться в деталях для учета новых проблем или интересов.
Каждая версия получает отличительный номер версии. Если в Программе указан номер версии данной Лицензии, которая применяется к ней, и «любая последующая версия», вы имеете возможность соблюдать условия либо данной версии, либо любой последующей версии, опубликованной Фондом свободного программного обеспечения. Если в Программе не указан номер версии данной Лицензии, вы вправе выбрать любую версию, когда-либо публиковавшуюся Фондом свободного программного обеспечения.
10. Если вы хотите включить части Программы в другие свободные программы с иными условиями их распространения, напишите автору с просьбой о разрешении. Для программного обеспечения, авторским правом на которое обладает Фонд свободного программного обеспечения, напишите в Фонд свободного программного обеспечения, для этого мы иногда делаем исключения. Наше решение будет определяться двумя целями, сохранение свободного статуса всех производных от нашего свободного программного обеспечения и продвижение совместного и повторного использования программного обеспечения вообще.
Отказ от гарантий
11. ПОСКОЛЬКУ ДАННАЯ ПРОГРАММА ЛИЦЕНЗИРУЕТСЯ БЕСПЛАТНО, ДЛЯ НЕЕ НЕ ПРЕДОСТАВЛЯЕТСЯ НИКАКИХ ГАРАНТИЙ, В ТОЙ СТЕПЕНИ, НАСКОЛЬКО ЭТО ПРИМЕНИМО ПО ЗАКОНУ. ЕСЛИ ПИСЬМЕННО НЕ УКАЗАНО ИНОЕ, ВЛАДЕЛЬЦЫ АВТОРСКОГО ПРАВА И/ИЛИ ДРУГИЕ СТОРОНЫ ПРЕДОСТАВЛЯЮТ ПРОГРАММУ «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ КАКОГО-ЛИБО РОДА, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЛ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ПОЛЕЗНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. ВЕСЬ РИСК, КАСАЮЩИЙСЯ КАЧЕСТВА И ПРОИЗВОДИТЕЛЬНОСТИ ПРОГРАММЫ, ЛОЖИТСЯ НА ВАС. ЕСЛИ ПРОГРАММА ОКАЖЕТСЯ С НЕДОСТАТКАМИ, ВЫ БЕРЕТЕ НА СЕБЯ РАСХОДЫ ПО ВСЕМУ НЕОБХОДИМОМУ ОБСЛУЖИВАНИЮ, ВОССТАНОВЛЕНИЮ ИЛИ ИСПРАВЛЕНИЮ.
12. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ, ЕСЛИ ТОЛЬКО ЭТО НЕ ТРЕБУЕТСЯ ПО СООТВЕТСТВУЮЩЕМУ ЗАКОНУ ИЛИ НЕ ОГОВОРЕНО ПО ПИСЬМЕННОМУ СОГЛАШЕНИЮ, НИ ОДИН ИЗ ВЛАДЕЛЬЦЕВ АВТОРСКИХ ПРАВ ИЛИ ЛЮБАЯ ДРУГАЯ СТОРОНА, КОТОРАЯ МОЖЕТ МОДИФИЦИРОВАТЬ И/ИЛИ РАСПРОСТРАНИТЬ ПРОГРАММУ НА ОГОВОРЕННЫХ ВЫШЕ УСЛОВИЯХ, НЕ БУДЕТ ОТВЕЧАТЬ ЗА ПРИЧИНЕННЫЙ ВАМ УЩЕРБ, ВКЛЮЧАЯ ЛЮБОЙ ОБЩИЙ, ОСОБЫЙ, СЛУЧАЙНЫЙ ИЛИ КОСВЕННЫЙ УЩЕРБ, ПОНЕСЕННЫЙ ОТ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМ, ПОТЕРИ ДАННЫХ ИЛИ НЕТОЧНЫЕ ОБРАБОТКИ ДАННЫХ ИЛИ ПОТЕРИ, КОТОРЫЕ ПОНЕСЛИ ВЫ ИЛИ ТРЕТЬИ ЛИЦА; ИЛИ НЕСПОСОБНОСТЬ ПРОГРАММЫ РАБОТАТЬ С ЛЮБЫМИ ДРУГИМИ ПРОГРАММАМИ), ДАЖЕ ЕСЛИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ ИЛИ ИНАЯ СТОРОНА БЫЛИ ПРЕДУПРЕЖДЕНЫ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.
КОНЕЦ ОПИСАНИЯ ПРАВ И ОБЯЗАННОСТЕЙ
Как применить эти условия договора к своим новым программам
Если вы разрабатываете новую программу и хотите, чтобы она принесла максимально большую пользу широкому кругу людей, лучшим способом достижения этого является включение ее в состав свободного программного обеспечения, которое каждый может распространять и изменять в соответствии с данными условиями.
Чтобы это сделать, добавьте к программе следующие уведомления. Надежнее всего добавить их в начало каждого исходного файла, чтобы наиболее эффективно сообщить об отказе от гарантий; и в каждом файле должна быть по крайней мере строка с «авторскими правами» и указанием на то, где можно найти полное уведомление.
одна строка с названием программы и описанием того, что она делает
Copyright (С) год имя автора
Эта программа является свободным программным продуктом; вы можете
распространять и/или изменять ее на условиях Общедоступной
лицензии GNU в том виде, как это опубликовано Фондом свободного
программного обеспечения; либо версии 2 Лицензии, либо
(по вашему выбору) любой последующей версии.
Данная программа распространяется в надежде, что она будет полезной,
но БЕЗ ВСЯКИХ ГАРАНТИЙ; в том числе без подразумеваемых гарантий
ПОЛЕЗНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Дополнительные
подробности см. в Общедоступной лицензии GNU.
Вместе с данной программой вы должны были получить копию
Общедоступной лицензии GNU; если вы ее не получили, напишите
в Фонд свободного программного обеспечения:
Free Software Foundation, Inc., 59 Temple Place,
Suite 330, Boston, MA 20111, USA.
Добавьте также сведения о том, как связаться с вами по электронной или обычной почте.
Если программа интерактивная, вставьте в ее вывод при запуске краткое уведомление, подобное данному:
Gnomovision version 69, Copyright (С) год имя_автора
Gnomovision поставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; чтобы получить
подробности, наберите 'show w'. Это свободный программный продукт,
и вы можете распространять его при определенных условиях;
наберите 'show c', чтобы получить дополнительные сведения.
Гипотетические команды 'show w' и 'show c' должны отображать соответствующие части Общедоступной лицензии. Конечно, используемые вами команды могут называться как-нибудь иначе, а не 'show w' и 'show c'; они могут быть даже щелчками мышью или пунктами меню — всем, что лучше подходит вашей программе.
Вам следует также получить от вашего нанимателя (если вы работаете программистом) или учебного заведения, если оно имеется, заявление об «отказе от авторских прав» для программы, если это необходимо. Вот образец; измените имена:
Yoyodyne, Inc., настоящим отказывается от всех авторских прав
на программу 'Gnomovision' (которая работает с компиляторами),
написанной James Hacker.
подпись Ty Coon, 1 апреля 1989
Ty Coon, вице-президент
Данная Общедоступная лицензия не разрешает включать вашу программу в частные программы. Если ваша программа представляет собой библиотеку процедур, вы можете счесть более полезным разрешить компоновку частных приложений с данной библиотекой. Если это то, что вам нужно, используйте вместо данной Лицензии Малую общедоступную библиотечную лицензию GNU.
Пример использования
Данный раздел не является частью GPL. Здесь мы показываем комментарий с заявлением об авторских правах из программы GNU env:
/* env - run a program in a modified environment
Copyright (C) 1986, 1991-2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
Это обычное использование. Оно содержит следующие, в сущности, стереотипные элементы:
• Одну строку комментария с названием и описанием программы. В более крупных программах здесь может быть название и описание файла внутри программы.
• Заявление об авторских правах.
• Два параграфа с объяснением и отказом от гарантий.
• Где получить копию GPL.