Содержание

Комментарии в HTML.

Когда вы будете писать html-код, может понадобиться:

1) Сделать пометки в коде, по которым можно позже вспомнить, зачем нужен тот или иной фрагмент кода.

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

Либо, вам нужно сделать пометку, для чего нужен тот или иной тэг.

И.т.д. ситуаций может быть масса.

Делая такие заметки в коде, вы без труда можете вспомнить многие моменты, которые могут забываться с течением времени.

2) Вам может также понадобиться оставить информацию в коде о том, кто является создателем этой страницы, когда она создана и.т.д.

Все эти задачи можно решить с помощью комментариев HTML.

Комментарий – это  конструкция в коде, которая будет видна, если просматривать исходный html-код, но будет не видна при просмотре страницы в браузере.

Синтаксис у комментариев в html следующий:

<!-- Текст комментария -->

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

Рассмотрим HTML-документ со следующим содержимым:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>
<!--Пример комментария HTML. Этот текст будет невидим в браузере.-->
<p>Пример текста в абзаце</p>
</body>
</html>

Если вы будете просматривать такой HTML-файл в браузере, то все, что вы увидите, будет текст, который находится внутри абзаца.

Текст комментария на странице никак не отображается, но при просмотре исходного кода документа, комментарии видны и с ними можно работать.

HTML Комментарии



Когда вы создаете большие сайты, то со временем можете забыть, что именно делает та или иная часть кода страницы. И сколь хорошо бы вы ни знали код страницы на момент его написания, если вам придется вернуться к нему спустя какое-то время (или кому-либо еще понадобится просмотреть его), то именно комментарии помогут быстро разобраться с кодом. Комментарии могут располагаться в любом месте страницы, потому что не отображаются браузером. Информация в комментариях не имеет специального значения и не воспринимается как НТМL-код. Комментарии используются чаще для пояснений, например коrдa над кодом работают несколько человек или когдa необходимо временно исключить некий фрагмент кода из обработки, не удаляя ero совсем, то можно заключить такой фрагмент в комментарий, после чего он будет проигнорирован браузером.

Комментарии в HTML имеют следующий синтаксис:

<!-- Это комментарий -->

Восклицательный знак после утловой скобки означает, что это уже не НТМL-код. Текст, заключенный между тегами <!— и —> , не отображается веб-браузером. Заметьте, что это нестандартная пара тегов, так как открывающий тег не имеет закрывающей угловой скобки, а в закрывающем теге отсутствует открывающая угловая скобка.

Комментариями можно пользоваться для того, чтобы отметить ключевые моменты в НТМL-коде, и в дальнейшем легче было в нем ориентироваться и вам, и тем, кто после вас будет редактировать код. Кроме того, можно комментировать части HTML-кода для предотвращения их отображения. В следующем примере вы увидите закомментированную гиперссылку:

Пример HTML: Попробуй сам
<!-- Начало введения -->
    <h2>Базовый HTML</h2>
    <h3>Основные понятия</h3>
<!-- Окончание введения -->
<!-- Начало основного текста -->
   <p>HTML расшифровывается как Hyper Text Markup Language...</p>
<!-- Окончание основного текста -->
<!-- <а href="mailto : iп[email protected]">Cвязaтьcя</a> -->

Хотя комментарии не видны посетителям в основном окне браузера, любой желающий сможет увидеть их, просмотрев исходный код веб-страницы. Поэтому прежде чем оставлять некоторые комментарии в своем коде, подумайте, стоит ли это делать.

К тому-же удалив лишние комментарии вы, хоть и незначительно, уменьшите объем веб-документа.

Условные комментарии

Условные комментарии позволяют задавать блоки кода, которые будут выполняться только в указанной версии браузера Internet Explorer. В остальных же версиях браузера Internet Explorer, а также в других браузерах их содержимое будет считаться обычным комментарием.

Условные комментарии в HTML имеют следующий синтаксис:

<!--[if Условие IE Версия]>Какой-то текст<![endif]-->

Как не трудно заметить, все содержимое тега расположено внутри обычного HTML-комментария. В необязательном параметре «Условие» могут быть указаны следующие операторы:

  • lt — меньше чем;
  • lte — меньше или равно;
  • gt — больше чем;
  • gte — больше или равно;
  • ! — не равно.

В необязательном параметре «Версия» указывается номер версии браузера Internet Explorer.

Приведем несколько примеров:

<!--[if IE]>Какой-то код<![endif]--> — выполнять содержимое комментария,
если браузером является любая версия Internet Explorer; <!--[if IE 9]>Какой-то код<![endif]--> ‰ — выполнять содержимое комментария,
если браузером является версия Internet Explorer 9; <!--[if lt IE 8]>Какой-то код<![endif]-->‰ — выполнять содержимое комментария,
если в качестве браузера выступает Internet Explorer меньшей версии, чем 8; <!--[if lte IE 8]>Какой-то код<![endif]-->‰ — выполнять содержимое комментария,
если в качестве браузера выступает Internet Explorer версии, меньшей или равной указанной; <!--[if gt IE 9]>Какой-то код<![endif]-->‰ — выполнять содержимое комментария,
если в качестве браузера выступает Internet Explorer большей версии, чем указана; <!--[if gte IE 7]>Какой-то код<![endif]-->‰ — выполнять содержимое комментария,
если в качестве браузера выступает Internet Explorer версии, большей или равной указанной.

Задачи

Итоговое задание

[19-20]

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

Пришло время повторить изученное и выполнить два несложных задания:

Комментарий

Используя тег комментария сделайте так, чтобы предложение: «Я стал невидимым» осталось в HTML-коде, но не отображалось браузером.

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Комментарий</title>  
 </head>
 <body>
  <p>Я одел шапку-невидимку.</p>
  Я стал невидимым
 </body>
</html>
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
 <title>Комментарий</title>  
 </head>
 <body>
  <p>Я одел шапку-невидимку.
</p> <!--Я стал невидимым--> </body> </html>

Без комментариев

Сделайте так, чтобы предложение в коде стало отображаться браузером.

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Без комментариев</title>  
 </head>
 <body>
  <!--<p>Характеристикой быстроты служит физическая величина — скорость.</p>-->
 </body>
</html>
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Без комментариев</title>  
 </head>
 <body>
  <p>Характеристикой быстроты служит физическая величина — скорость.</p>
 </body>
</html>






Учебник HTML 5. Статья «Комментарии и якоря»

Комментарии в HTML коде используются для временного отключения кода (как правило, просто удалить код неудобно по той причине, что возможно его придется восстанавливать) и в качестве подсказки для себя, либо для лиц, которые будут разбираться в Вашем коде. Текст внутри комментария не отображается браузером на странице.


Комментарии можно использовать в любом месте страницы,

кроме тега <title>, который обеспечивает название для документа.


Ниже представлен пример использования тега комментария внутри HTML страницы:

<!DOCTYPE html>
<html>
	<head>
		<title>Пример использования тега комментария</title>
	</head>
	<body>
		Видимое содержимое страницы.
		<!-- Ваш комментарий, текст внутри которого не отображается браузером на странице. --> 
	</body>
</html>

Условные комментарии

Условные комментарии, используются для написания специального кода, предназначенного для конкретного браузера (Internet Explorer). Остальные браузеры этот код игнорируют как обычный комментарий.

Например:

<!--[if IE 7]>
Код HTML 
<![endif]-->

Код выполняется только тогда, когда совпадает заданное условие. В данном случае если браузер Internet Explorer 7, то необходимо выполнить код, который мы поместим внутри тега.

Другие примеры:
<!--[if IE]> Инструкции для всех Internet Explorer <![endif]-->
<!--[if lte IE 6]> Инструкции для всех IE меньше или равно 6<![endif]-->
<!--[if gte IE 7]> Инструкции для всех IE старше или равно 7<![endif]-->

Значение операторов:

ОператорЗначение
ltМеньше чем.
lteМеньше или равно.
gtБольше чем.
gteБольше или равно.
& Логическое И. Предназначено для объединения нескольких условий. Возвращает true (истину), если все условия выполняются.
! Логическое НЕ. Условие истинно, если условие следующее за ! не выполняется.
| Логическое ИЛИ. Возвращает true (истину), если хотя бы одно из условий выполняется.
( ) Группировка дополнительных условий (создание сложных запросов с логическими операторами).

HTML5 Shiv

Хочу обратить Ваше внимание на то, что в Internet Explorer 8 и более ранних версиях поддержка элементов HTML 5 отсутствует. Несмотря на то, что доля Internet Explorer этих версий смело приближается к 0.1% к концу 2016 года, некоторые заказчики требуют проводить разработку с учётом поддержки данных браузеров.

Для того, чтобы ранние версии Internet Explorer распознавали теги HTML 5, был написан плагин HTML5 Shiv (скрипт на языке программирования Javascript). Чтобы обеспечить поддержку этих браузеров, разместите перед закрывающим тегом </head> на каждой странице Вашего сайта следующий код*:

<!DOCTYPE html>
<html>
	<head>
		<title>Пример подключения HTML5 Shiv для IE</title>
		<!--[if lt IE 9]>
			<script src = "//cdnjs. cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js"></script>
		<![endif]-->
	</head>
	<body>
		Видимое содержимое страницы.
	</body>
</html>

В этом примере мы создали условный комментарий, который предназначен для браузеров Internet Explorer, чья версия меньше чем девятая (if lt IE 9). Внутри комментария мы разместили скрипт, который подключается со стороннего ресурса (абсолютная ссылка).

Тег <script> используется для определения скрипта на стороне клиента (как правило на языке JavaScript). Элемент содержит текст скрипта, либо он указывает на внешний файл скрипта через атрибут src (по аналогии с элементом <img>). Если элемент ссылается на внешний скрипт, то в этом случае элемент должен быть пустым. Тег <script> обязательно должен иметь закрывающий тег </script> незавимсимо от того где скрипт содержится (внутри тега, или указан как URL адрес для внешнего скрипта).


* — В рамках изучения HTML и CSS, мы не будем рассматривать методы подключения скриптов к HTML документам. Пример носит образовательный характер с целью расширения вашего кругозора и понимания из чего состоит практически любая страница в сети.


HTML создание закладки (якоря)

HTML закладка или более распространенное их название якорь (англ. anchor) используются, чтобы позволить посетителям при клике на определенную ссылку перейти на заданную часть веб-страницы. Использование закладок уместно на тех сайтах, которые имеют длинные страницы для построения понятной навигации.

Давайте по порядку рассмотрим, что требуется для того, чтобы создать якорь:

  1. Для начала нам необходимо определиться куда мы хотим, чтобы наш пользователь перешёл, допустим это заголовочный элемент первого уровня (<h2>) в начале страницы.
  2. С использованием глобального атрибута id задаем уникальный идентификатор для элемента <h2>.
<h2 id = "totop">Комментарии и якоря</h2>

Обратите внимание на некоторые правила использования глобального атрибута id:

  • Используйте только буквы алфавита (A-Z, a-z), числа, дефисы, знаки подчеркивания.
  • Идентификатор не должен содержать каких-либо пробелов.
  • Идентификатор на странице используется только к одному элементу.
  • Идентификаторы чувствительны к регистру (vottakvot и VotTakVot разные идентификаторы).

Глобальный атрибут id будет более подробно рассмотрен при изучении CSS 3 в статье «Селекторы. Часть 1.».


  1. И нам осталось только добавить в адрес ссылки наименование нашего идентификатора, перед идентификатором обязательно необходимо указать символ решетки #:
<a href = "#totop">Перейти наверх страницы</a>

В результате чего при клике на ссылку посетитель автоматически перейдёт к той части страницы, которую мы задали, в браузере это будет выглядеть следующим образом:

Перейти наверх страницы

Но и это еще не всё, ссылку с якорем можно сделать как на другую страницу Вашего сайта, так и совершенно стороннего сайта (абсолютный адрес), при условии, что у элемента задан идентификатор (id). Пример перехода к заголовку первого уровня предыдущей статьи:

<a href = "tablici.php#totop">К началу предыдущей статьи</a> <!-- страница находится в той же папке, что и эта статья --> 

В результате чего при клике на ссылку посетитель автоматически перейдёт к началу предыдущей статьи:

К началу предыдущей статьи

Вопросы и задачи по теме

Перед тем как перейти к изучению следующей темы пройдите практическое задание:

  • Для выполнения задания вам понадобится скачать архив и скопировать содержимое архива в любую папку на вашем жестком диске:

  • Используя полученные знания составьте HTML страницу (index.html в архиве), которая содержит три якорные ссылки:
  1. Первая ссылка перемещает к первому абзацу на той же странице.
  2. Вторая ссылка перемещает ко второму абзацу на той же странице.
  3. Третяя ссылка перемещает к третьему абзацу, который находится на отдельной странице (practice_17_2. html в архиве).
  • Результат примера вы можете скачать после выполнения задачи для самопроверки:


Различные лицензии и комментарии к ним — Проект GNU программного обеспечения

Мы классифицируем лицензии по определенным ключевым критериям:

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

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

Если вы организовали новый проект и не вполне уверены в том, какой лицензией воспользоваться, то наши рекомендации подробно изложены в статье “Как выбрать лицензию для своей собственной работы” в форме простого и ясного руководства.

Если у вас есть вопросы по лицензиям свободных программ, вы можете написать нам по адресу <[email protected]>. Поскольку наши ресурсы ограничены, мы не отвечаем на вопросы, которые задаются для помощи в разработке и распространении несвободных программ, и вы, вероятно, получите ответ быстрее, если вы зададите конкретный вопрос, который еще не отражен здесь или в нашем списке вопросов и ответов. Мы приглашаем знающих добровольцев, которые хотели бы помочь отвечать на вопросы лицензирования.

Если вы подумываете о написании новой лицензии, свяжитесь, пожалуйста, с нами по адресу <[email protected]>. Рост числа различных лицензий свободных программ представляет сегодня серьезную проблему в сообществе свободного программного обеспечения, как для пользователей, так и для разработчиков. Мы сделаем все возможное, чтобы помочь вам найти существующую лицензию свободных программ, отвечающую вашим нуждам.

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

Стандартная общественная лицензия GNU (GNU General Public License, GPL) версии 3 (#GNUGPL) (#GNUGPLv3)

Это последняя версия GNU GPL: лицензия свободных программ с авторским левом. Мы рекомендуем ее для большинства пакетов программ.

Обратите внимание, что GPLv3 сама по себе не совместима с GPLv2. Однако большинство программ, выпускаемых под GPLv2, позволяет вам также пользоваться условиями распространения более поздних версий GPL. В этом случае вы можете пользоваться этими программами на условиях GPLv3, чтобы получить желаемую комбинацию. Подробнее о совместимости между лицензиями GNU можно узнать в нашем списке вопросов и ответов.

Стандартная общественная лицензия GNU (GNU GPL) версии 2 (#GPLv2)

Это предыдущая версия GNU GPL: лицензия свободных программ с авторским левом. Для большинства программ мы рекомендуем последнюю версию.

Обратите внимание, что GPLv2 сама по себе не совместима с GPLv3. Однако большинство программ, выпускаемых под GPLv2, позволяет вам также пользоваться условиями распространения более поздних версий GPL. В этом случае вы можете пользоваться этими программами на условиях GPLv3, чтобы получить желаемую комбинацию. Подробнее о совместимости между лицензиями GNU можно узнать в нашем списке вопросов и ответов.

Меньшая стандартная общественная лицензия GNU (GNU Lesser General Public License, LGPL) версии 3 (#LGPL) (#LGPLv3)

Это последняя версия LGPL: лицензия свободных программ, но без сильного авторского лева, потому что она допускает компоновку с несвободными модулями. Она совместима с GPLv3. Мы рекомендуем ее только в особых обстоятельствах.

Обратите внимание, что LGPLv3 сама по себе не совместима с GPLv2. Однако большинство программ, выпускаемых под GPLv2, позволяет вам также пользоваться условиями распространения более поздних версий GPL. В этом случае вы можете пользоваться этими программами на условиях GPLv3, чтобы получить желаемую комбинацию. Подробнее о совместимости между лицензиями GNU можно узнать в нашем списке вопросов и ответов.

Меньшая стандартная общественная лицензия GNU (GNU LGPL) версии 2.1 (#LGPLv2.1)

Это предыдущая версия LGPL: лицензия свободных программ, но без сильного авторского лева, потому что она допускает компоновку с несвободными модулями. Она совместима с GPLv2 и GPLv3. Как правило, мы рекомендуем последнюю версию LGPL, и только в особых обстоятельствах. Подробнее о совместимости между LGPLv2.1 и другими лицензиями GNU можно узнать в нашем списке вопросов и ответов.

Стандартная общественная лицензия GNU Affero (GNU Affero General Public License, AGPL) версии 3 (#AGPL) (#AGPLv3.0)

Это лицензия свободных программ с авторским левом. Ее условия фактически состоят из условий GPLv3 с дополнительным параграфом в разделе 13, который позволяет пользователям, взаимодействующим с лицензируемой программой по сети, получать исходный текст этой программы. Мы рекомендуем разработчикам подумать о применении GNU AGPL для любых программ, которые обычно выполняются в сети.

Обратите внимание, что GNU AGPL не совместима с GPLv2. Она также формально не совместима с GPLv3 в узком смысле: вы не можете взять исходные тексты, выпущенные на условиях GNU AGPL, и передавать или изменять их, как вам угодно, на условиях GPLv3, и наоборот. Однако вам позволено комбинировать раздельные модули или файлы исходного текста, выпущенные под обеими этими лицензиями, в едином проекте, что предоставит многим программистам разрешение на все действия, нужные им для того, чтобы делать какие им угодно программы. Подробнее см. в разделе 13 обеих лицензий.

Неограничительная лицензия GNU (#GNUAllPermissive)

Это безвольная неограничительная лицензия свободных программ, совместимая с GNU GPL. Мы рекомендуем пакетам программ GNU применять ее для файлов README и других небольших вспомогательных файлов. Все разработчики вполне могут применять ее в подобных ситуациях.

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

Лицензия Apache, версия 2.0 (#apache2)

Это лицензия свободных программ, совместимая с версией 3 GNU GPL.

Обратите внимание, что эта лицензия не совместима с GPL версии 2, потому что в ней есть некоторые требования, которых нет в этой версии GPL. Они включают в себя определенные распоряжения относительно завершения действия и предосторожностей, связанных с патентами. Такие предосторожности — неплохая вещь, вот почему для содержательных работ мы рекомендуем лицензию Apache 2.0 прежде других безвольных неограничительных лицензий.

Художественная лицензия (Artistic License) 2.0 (#ArtisticLicense2)

Эта лицензия является лицензией свободных программ, совместимой с GPL благодаря возможности перелицензирования в разделе 4(c)(ii).

Разъясненная художественная лицензия (#ClarifiedArtistic)

Это лицензия свободных программ, совместимая с GPL. Это минимальный набор изменений, необходимый для исправления расплывчатости Художественной лицензии 1.0.

Лицензия базы данных Беркли (известная также как Лицензия программных продуктов Sleepycat) (Berkeley Database License, Sleepycat Software Product License) (#BerkeleyDB)

Это лицензия свободных программ, совместимая с GNU GPL.

Лицензия программ Boost (Boost Software License) (#boost)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Модифицированная лицензия BSD (#ModifiedBSD)

Это первоначальная лицензия BSD, модифицированная удалением пункта о рекламе. Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

На эту лицензию иногда ссылаются как на трехпунктную лицензию BSD.

Модифицированная лицензия BSD неплоха для безвольной неограничительной лицензии, хотя лицензия Apache 2.0 предпочтительнее. Однако рекомендовать применение “Лицензии BSD” рискованно даже для таких особых случаев, как небольшие программы, потому что ее легко можно спутать с первоначальной лицензией BSD; это привело бы к использованию первоначальной лицензии, а она не лишена недостатков. Чтобы избежать этого риска, вы можете предлагать вместо этого Лицензию X11. Лицензия X11 и Модифицированная лицензия BSD более или менее эквивалентны.

Однако лицензия Apache 2.0 для содержательных программ лучше, поскольку она предотвращает патентное предательство.

CeCILL версии 2 (#CeCILL)

CeCILL — лицензия свободных программ, явным образом совместимая с GNU GPL.

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

Раздел 9.4 CeCILL обязывает разработчиков программы к определенного рода сотрудничеству с пользователями, если кто-то угрожает программе с помощью патента. На это можно было бы смотреть как на проблему для разработчика; однако если вы уверены, что вы все равно хотите сотрудничать таким образом с пользователями, то для вас это не проблема.

Чистая лицензия BSD (Clear BSD License) (#clearbsd)

Это лицензия свободных программ, совместимая с GPLv2 и GPLv3. Она основана на Модифицированной лицензии BSD и добавляет условие, явно утверждающее, что она не предоставляет вам никаких патентных лицензий. Из-за этого условия мы рекомендуем вам быть осторожными при пользовании программами под этой лицензией; перед этим вам следует подумать, не захочет ли правообладатель преследовать вас за нарушение патента. Если разработчик отказывает пользователям в патентных лицензиях, чтобы заманить вас в ловушку, было бы мудро избегать этой программы.

Стандартная лицензия Cryptix (Cryptix General License) (#CryptixGeneralLicense)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL. Она почти идентична лицензии FreeBSD (называемой также “2-пунктной лицензией BSD”).

Версия 2.0 лицензии eCos (#eCos2.0)

Версия 2.0 лицензии eCos — совместимая с GPL лицензия свободных программ. Она состоит из GPL с исключением, позволяющим компоновать с программами не под GPL. Эта лицензия страдает теми же недостатками, что и LGPL.

Лицензия Образовательного сообщества (Educational Community License) 2.0 (#ECL2.0)

Это лицензия свободных программ, и она совместима с GPLv3. Она основана на Лицензии Apache 2.0; область действия патентной лицензии была изменена так, что когда сотрудник организации работает над проектом, от организации не требуется предоставлять лицензию на все свои патенты получателям. Эта патентная лицензия и пункт об освобождении от ответственности в разделе 9 делает эту лицензию несовместимой с GPLv2.

Лицензия Eiffel Forum, версия 2 (#Eiffel)

Это лицензия свободных программ, совместимая с GNU GPL. Предыдущие выпуски Лицензии Eiffel не совместимы с GPL.

Лицензия программ EU DataGrid (EU DataGrid Software License) (#EUDataGrid)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Лицензия Expat (#Expat)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Некоторые называют ее “Лицензией MIT”, но это выражение вносит путаницу, поскольку в MIT применяли для программ много разных лицензий. К неоднозначности приводит также то, что те же люди называют Лицензию X11 “Лицензией MIT,”, не различая их. Мы рекомендуем не пользоваться выражением “Лицензия MIT”.

Разница между Лицензией X11 и Лицензией Expat состоит в том, что Лицензия X11 содержит дополнительный параграф об употреблении названия Консорциума X. Это не очень важно, но это реальное отличие.

Для содержательных программ лучше применять лицензию Apache 2. 0, поскольку она исключает патентное предательство.

Лицензия FreeBSD (#FreeBSD)

Это первоначальная лицензия BSD, из которой удален пункт о рекламе и еще один пункт. (Иногда ее называют “двухпунктной лицензией BSD”.) Это безвольная неограничительная лицензия свободных программ, совместимая с GNU GPL.

Наши замечания о Модифицированной лицензии BSD применимы и к этой лицензии.

Лицензия проекта Freetype (#freetype)

Это лицензия свободных программ, совместимая с GNU GPLv3. В ней есть некоторые требования о ссылках на источник, которые делают ее несовместимой с GPLv2.

Историческое уведомление о разрешении с отказом от гарантий (#HPND)

Это безвольная неограничительная слабая лицензия свободных программ, она совместима с GPL. Она сходна с лицензией Python 1.6a2 и более ранних версий.

Лицензия библиотеки стандартных функций iMatix (#iMatix)

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

Лицензия imlib2 (#imlib)

Это лицензия свободных программ, совместимая с GNU GPL. Автор объяснил нам, что все варианты предоставления исходного текста, описанные в GPL, означают, что исходный текст был “сделан публично доступным” в их формулировке.

Лицензия Независимой группы JPEG (Independent JPEG Group License) (#ijg)

Это лицензия свободных программ, совместимая с GNU GPL. Авторы заверили нас, что разработчики, которые документируют изменения, как того требует GPL, также будут удовлетворять подобному требованию из этой лицензии.

Неформальная лицензия (#informal)

“Неформальная лицензия” означает заявление вроде “делайте с этим все, что хотите” или “вы можете перераспространять эту программу и изменять ее”.

В Соединенных Штатах эти лицензии предполагается толковать на основании того, что автор, по-видимому, подразумевает. Так что они, вероятно, означают то, что они означают с первого взгляда. Это делало бы их лицензиями свободных программ без авторского лева, совместимыми с GNU GPL. Однако неудачный выбор формулировки мог бы придать этому другой смысл.

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

Если вы хотите, чтобы ваша программа была свободной, не навлекайте на своих пользователей излишних неприятностей. Выберите и воспользуйтесь, пожалуйста, какой-нибудь известной лицензией свободных программ. Мы предлагаем рекомендации, которым советуем вам следовать.

Лицензия открытого исходного текста Intel (Intel Open Source License) (#intel)

Это лицензия свободных программ, совместимая с GNU GPL.

Лицензия ISC (#ISC)

Эту лицензию иногда также называют лицензией OpenBSD. Это безвольная неограничительная лицензия свободных программ, она совместима с GNU GPL.

В этой лицензии была неудачно выбранная формулировка: она предоставляла получателям “Разрешение применять, копировать, изменять и распространять эти программы. ..” Это примерно те же выражения, что в лицензии Pine, о которой Вашингтонский университет впоследствии заявил, что они запрещают людям распространять измененные версии программ.

В ISC нам сказали, что они не разделяют толкование Вашингтонского университета, и у нас есть все основания верить этому. Они также изменили лицензию, чтобы она выглядела как “Разрешение применять, копировать, изменять и/или распространять эти программы…”. Хотя употребление “и/или” не устраняет проблему полностью, нет оснований избегать программ, выпущенных под этой лицензией. Однако чтобы помочь гарантировать, что такие формулировки не создадут проблем в будущем, мы рекомендуем разработчикам выбирать для своих собственных работ другие лицензии. Лицензия FreeBSD примерно так же неограничительна и кратка. Однако если вам нужна безвольная неограничительная лицензия, мы рекомендуем лицензию Apache 2.0.

Общественная лицензия Mozilla (Mozilla Public License, MPL) версии 2.0 (#MPL-2.0)

Это лицензия свободных программ. Раздел 3.3 косвенно обеспечивает совместимость этой лицензии с GNU GPL версии 2.0, GNU LGPL версии 2.1, GNU AGPL версии 3 и всеми более поздними версиями этих лицензий. Когда вы получаете произведение под MPL 2.0, вы можете сделать “более крупное произведение”, в котором это произведение сочетается с произведением под этими лицензиями GNU. Когда вы это делаете, раздел 3.3 дает вам разрешение распространять произведение под MPL на условиях этих же лицензий GNU, с одним условием: вы должны гарантировать, что файлы, которые первоначально были под MPL, по-прежнему доступны также и на условиях MPL. Другими словами, когда вы таким образом комбинируете, файлы, которые первоначально были под MPL, останутся под несколькими лицензиями: MPL и лицензией (или лицензиями) GNU. Это приведет к тому, что на “более крупное произведение”, в целом, будет распространяться лицензия (или лицензии) GNU. У людей, получающих от вас это сочетание, будет возможность применять любые из файлов, на которые первоначально распространялась MPL, на условиях этой лицензии, или распространять “более крупное произведение” в целом или частично на условиях лицензий GNU без дальнейших ограничений.

Важно понимать, что требование распространять файлы на условиях MPL относится только к стороне, которая впервые создает и распространяет “более крупное произведение”. Если бы это относилось и к получателям, это было бы дальнейшим ограничением, несовместимым с GPL и AGPL. Тем не менее, когда вы вносите вклад в существующий проект, мы обычно рекомендуем вам сохранять свои изменения под той же самой лицензией, даже когда от вас этого не требуется. Если вы получили под лицензией GNU работу, некоторые файлы которой доступны также под MPL, вам следует удалять MPL с тех файлов, только когда есть веская причина, оправдывающая это.

Перед тем, как вы создадите таким образом “более крупное произведение”, проверьте лицензионные уведомления программ, распространяемых по MPL. Стороны, которые выпускают первоначальную работу под MPL 2.0, могут решить отказаться от этой совместимости, включив в лицензионные уведомления предложение, в котором сказано, что произведение “несовместимо со вторичными лицензиями”. Любые программы, включающие это уведомление, не совместимы с GPL или AGPL.

Программы под предыдущими версиями MPL можно обновить до версии 2.0, но любые программы, которые еще не доступны под одной из перечисленных лицензий GNU, должны быть помечены как “несовместимые со вторичными лицензиями”. Это значит, что программы, доступные только под предыдущими лицензиями MPL, все равно несовместимы с GPL и AGPL.

Лицензия открытого исходного текста NCSA/Иллинойсского университета (NCSA/University of Illinois Open Source License) (#NCSA)

Эта лицензия основана на условиях Лицензии Expat и Модифицированной лицензии BSD. Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Лицензия JavaScript компании Netscape (#NetscapeJavaScript)

Это дизъюнкция Общественной лицензии Netscape и GNU GPL. Поэтому это лицензия свободных программ, совместимая с GNU GPL, но без сильного авторского лева.

Лицензия OpenLDAP, версия 2.7 (#newOpenLDAP)

Это неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Лицензия Perl 5 и ниже (#PerlLicense)

Эта лицензия является дизъюнкцией Художественной лицензии 1.0 и GNU GPL — другими словами, вы можете выбрать любую из этих двух лицензий. Она удовлетворяет критериям лицензии свободных программ, но она может не быть настоящим авторским левом. Она совместима с GNU GPL, потому что GNU GPL — одна из альтернатив.

Мы рекомендуем применять ее для любых пакетов Perl 4 или Perl 5, которые вы пишете, чтобы поддержать однородность и единообразие при программировании на Perl. Мы настоятельно рекомендуем не применять ее вне Perl; лучше просто пользоваться GNU GPL.

Общественное достояние (#PublicDomain)

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

Если вы желаете поместить свою работу в общественное достояние, мы рекомендуем вам воспользоваться для этого формальными средствами. Мы просим людей, которые делают небольшие доработки для GNU, подписать документ с отказом от авторских прав; это одно из решений. Если вы работаете над проектом, в котором нет формальных правил, подобных этому, то лицензия CC0 — хорошее средство, которым может воспользоваться каждый. Она формально переводит работу в общественное достояние и предоставляет запасную лицензию для случаев, когда это юридически невозможно.

Лицензия Python 2.0.1, 2.1.1, и более новых версий (#Python)

Это лицензия свободных программ, совместимая с GNU GPL. Однако обратите внимание, пожалуйста, что промежуточные версии Python (от 1. 6b1 до 2.0 и 2.1) распространяются под другой лицензией (см. ниже).

Лицензия Python 1.6a2 и более ранних версий (#Python1.6a2)

Это лицензия свободных программ, совместимая с GNU GPL. Однако обратите внимание, пожалуйста, что более новые версии Python распространяются под другими лицензиями (см. выше и ниже).

Лицензия Ruby (#Ruby)

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

Лицензия B свободных программ SGI (SGI Free Software License B), версия 2.0 (#SGIFreeB)

Лицензия B свободных программ SGI версии 2.0 — лицензия свободных программ. Она по существу идентична Лицензии X11, с возможным альтернативным способом оформления лицензионных уведомлений.

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

Авторско-правовая лицензия стандартного ML Нью-Джерси (Standard ML of New Jersey Copyright License) (#StandardMLofNJ)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Лицензионное соглашение на файлы данных и программы Unicode (Unicode, Inc. License Agreement for Data Files and Software) (#Unicode)

Это лицензия, которую организация Unicode применила для Базы данных символов Unicode — различных файлов данных, которые разработчики могут применять в помощь реализации стандарта Unicode в их собственных программах. Это безвольная неограничительная лицензия, совместимая со всеми версиями GNU GPL.

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

Пожалуйста, позаботьтесь о том, чтобы гарантировать, что на файлы, которыми вы пользуетесь, распространяется это лицензионное соглашение. Другие файлы, опубликованные организацией Unicode, распространяются по “Условиям пользования Unicode” — это другая, несвободная лицензия, которая находится на той же странице, но относится к другим файлам. Краткое пояснение в начале этого лицензионного соглашения уточняет, к каким файлам оно относится.

Пожалуйста, не пользуйтесь этим лицензионным соглашением для своих собственных программ. Если вы хотите применять для своего проекта безвольную неограничительную лицензию, воспользуйтесь, пожалуйста, Лицензией Expat для небольшой программы и лицензию Apache 2. 0 для содержательной программы. Они гораздо более распространены и широко известны в сообществе свободного программного обеспечения.

Универсальная неограничительная лицензия (Universal Permissive License, UPL) (#UPL)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL. Хотя лицензия предоставляет возможность лицензирования патентов вместе с программным произведением, однако мы все-таки рекомендуем лицензию Apache 2.0 для предохранения от патентного предательства, если вы собираетесь выпускать свою работу под безвольной лицензией.

Разлицензия (#Unlicense)

Разлицензия — это формула передачи в общественное достояние. Работа, выпускаемая под Разлицензией, передается в общественное достояние в той мере, в какой это только допускается законом, а также дополняется безвольной лицензией, которая помогает охватить все случаи, для которых формула не подходит. Как условия распространения работ в общественном достоянии, так и безвольная лицензия, предоставляемая Разлицензией, совместимы с GNU GPL.

Если вы хотите передать свою работу в общественное достояние, мы рекомендуем вам воспользоваться CC0. CC0 также предоставляет формулу передачи в общественное достояние с запасной лицензией, и она проработана подробнее и тщательнее, чем Разлицензия.

Лицензия Vim, версии 6.1 или более поздних (#Vim)

Это лицензия свободных программ, с частичным, но не настоящим авторским левом. Она совместима с GPL благодаря особому пункту о смене лицензии.

Уведомление о программах и лицензия W3C (W3C Software Notice and License) (#W3C)

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

Лицензия WebM (#WebM)

Реализация WebM компании Google распространяется под Модифицированной лицензией BSD. Google также предоставляет отдельную патентную лицензию (неудачно названную “Предоставлением дополнительных прав ИС”) для патентов, которыми обладает или которые контролирует Google и которые по необходимости затрагиваются их реализацией WebM. Программы под GPL могут распространяться в соответствии с условиями этой лицензии: она позволяет распространителям осуществлять все права, предоставляемые GPL, удовлетворяя в то же время всем ее условиям. Таким образом, все в лицензии WebM свободно и совместимо с GPL.

WTFPL, версия 2 (#WTFPL)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL.

Мы не рекомендуем эту лицензию. Если вам нужна безвольная неограничительная лицензия для небольшой программы, мы рекомендуем Лицензию X11. К более крупной программе, как правило, должно применяться авторское лево; но если вы твердо намерены пользоваться для нее безвольной неограничительной лицензией, мы рекомендуем лицензию Apache 2.0, поскольку она защищает пользователей от патентного предательства.

Лицензия библиотеки WxWidgets (#Wx)

Лицензия WxWidgets — совместимая с GPL лицензия свободных программ. Она состоит из Меньшей стандартной общественной лицензии GNU 2. 0 или любой более поздней версии с дополнительным разрешением, допускающим распространение программ, применяющих библиотеку, в двоичном виде, на условиях по выбору распространителя (в том числе несвободных). Это слабое авторское лево, так что мы рекомендуем ее только в особых обстоятельствах.

Лицензия библиотеки WxWindows (#Wxwind)

Более старое название лицензии библиотеки WxWidgets.

Лицензия X11 (#X11License)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с GNU GPL. Более старые версии XFree86 применяли эту же лицензию, и некоторые из современных вариантов XFree86 тоже пользуются ею. Более поздние версии XFree86 распространяются под Лицензией XFree86 1.1.

Некоторые называют ее “Лицензией MIT”, но это выражение вносит путаницу, поскольку в MIT применяли для программ много разных лицензий. К неоднозначности приводит также то, что те же люди называют Лицензию Expat “Лицензией MIT,”, не различая их. Мы рекомендуем не пользоваться выражением “Лицензия MIT”.

Разница между Лицензией X11 и Лицензией Expat состоит в том, что Лицензия X11 содержит дополнительный параграф об употреблении названия Консорциума X. Это не очень важно, но это реальное отличие.

Это прекрасная лицензия для небольшой программы. К более крупной программе, как правило, должно применяться авторское лево; но если вы твердо намерены пользоваться для нее безвольной неограничительной лицензией, мы рекомендуем лицензию Apache 2.0, поскольку она защищает пользователей от патентного предательства.

Лицензия XFree86 версии 1.1 (#XFree861.1License)

Это безвольная неограничительная лицензия свободных программ без авторского лева, совместимая с версией 3 GNU GPL.

Обратите внимание, что эта лицензия несовместима с версией 2 GPL из-за требований, которые распространяются на всю документацию в дистрибутиве, который содержит благодарности.

В настоящее время существует несколько вариантов XFree86, и только некоторые из них пользуются этой лицензией. Некоторые продолжают пользоваться Лицензией X11.

Лицензия ZLib (#ZLib)

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

Общественная лицензия Zope (Zope Public License), версии 2.0 и 2.1 (#Zope2.0)

Это безвольная неограничительная лицензия свободных программ без авторского лева, которая совместима с GNU GPL.

Стандартная общественная лицензия Affero (Affero General Public License), версия 1 (#AGPLv1.0)

Стандартная общественная лицензия Affero — лицензия свободных программ с авторским левом, несовместимая с GNU GPL. Она состоит из GNU GPL версии 2 с одним дополнительным разделом, который компания Affero добавила с одобрения ФСПО. Новый раздел, 2(d), охватывает распространение прикладных программ с помощью служб Интернета или других компьютерных сетей.

На смену этой лицензии пришла Стандартная общественная лицензия GNU Affero (AGPL) версии 3; пожалуйста, пользуйтесь последней.

Академическая свободная лицензия (Academic Free License), все версии до 3. 0 (#AcademicFreeLicense)

Академическая свободная лицензия — лицензия свободных программ без авторского лева, несовместимая с GNU GPL. Последние версии содержат контрактные пункты, сходные с условиями Лицензии открытых программ, и их следует избегать по тем же причинам.

Лицензия Apache, версия 1.1 (#apache1.1)

Это неограничительная лицензия свободных программ без авторского лева. В ней есть несколько требований, которые делают ее несовместимой с GNU GPL, таких, как далеко идущие запреты на употребление названий, связанных с Apache.

Лицензия Apache, версия 1.0 (#apache1)

Это безвольная неограничительная лицензия свободных программ без авторского лева с пунктом о рекламе. Это создает практические проблемы, подобные проблемам первоначальной лицензии BSD, в том числе несовместимость с GNU GPL.

Общественная лицензия исходных текстов Apple (Apple Public Source License, APSL), версия 2 (#apsl2)

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

Лицензия открытого исходного текста BitTorrent (BitTorrent Open Source License) (#bittorrent)

Это лицензия свободных программ, но несовместимая с GPL, по тем же причинам, что и Лицензия открытого исходного текста Jabber.

Первоначальная лицензия BSD (#OriginalBSD)

Эту лицензию иногда называют также четырехпунктной лицензией BSD.

Это безвольная неограничительная лицензия свободных программ без авторского лева с серьезным недостатком — “злостным пунктом BSD о рекламе”. Недостаток не критичен; то есть, он не делает программу несвободной. Но к практическим проблемам, включая несовместимость с GNU GPL, он приводит.

Мы настоятельно рекомендуем вам не применять первоначальную лицензию BSD для программ, которые вы пишете. Если вы хотите воспользоваться безвольной неограничительной лицензией свободных программ без авторского лева, гораздо лучше применить Модифицированную лицензию BSD, Лицензию X11 или Лицензию Expat. А для содержательной программы еще лучше воспользоваться лицензией Apache 2.0, потому что в ней предпринимаются определенные действия против патентного предательства.

Однако нет причин не пользоваться программами, которые были выпущены под первоначальной лицензией BSD.

CeCILL-B версии 1 (#CeCILL-B)

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

Пожалуйста, не выпускайте программы под этой лицензией.

CeCILL-C версии 1 (#CeCILL-C)

CeCILL-C — лицензия свободных программ со слабым авторским левом, несколько сходным с Меньшей стандартной общественной лицензией GNU. Она несовместима с GNU GPL, потому что в ней нет явного пункта о совместимости с GPL, который есть в простой CeCILL.

Пожалуйста, не выпускайте программы под этой лицензией.

Лицензия общей разработки и распространения (Common Development and Distribution License, CDDL), версия 1.0 (#CDDL)

Это лицензия свободных программ. В ней есть слабое пофайловое авторское лево (как в версии 1 Общественной лицензии Mozilla), что делает ее несовместимой с GNU GPL. Это значит, что по закону модуль под GPL и модуль под CDDL нельзя компоновать друг с другом. По этой причине мы настоятельно рекомендуем вам не применять CDDL.

В качестве примера, показывающего, почему вы не должны сочетать работы, лицензированые по CDDL, с работами, лицензированными по GPL, см. заявление ФСПО Интерпретация, охрана и модификация GPL в приложении к сочетанию Linux с ZFS.

Также в CDDL неудачно то, что она пользуется термином “ интеллектуальная собственность”.

Общепубличная лицензия с атрибуцией (Common Public Attribution License, CPAL) 1. 0 (#CPAL)

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

Общепубличная лицензия (Common Public License), версия 1.0 (#CommonPublicLicense10)

Это лицензия свободных программ. К сожалению, ее слабое авторское лево и пункт о выборе юрисдикции делают ее несовместимой с GNU GPL.

Общественная лицензия Condor (#Condor)

Новые версии Condor (начиная с 6.9.5) выпускаются под Лицензией Apache 2.0. Эта лицензия применяется только в более старых версиях Condor.

Общественная лицензия Condor — лицензия свободных программ. В ней есть пара требований, делающих ее несовместимой с GNU GPL, в том числе сильные ограничения на употребление названий, связанных с Condor. Кроме того, она требует от распространителей “заявить и гарантировать”, чтоони будут соблюдать экспортные законы США. (Если бы соблюдение было настоящим условием лицензии, то она не была бы лицензией свободных программ.)

Общественная лицензия Eclipse (Eclipse Public License), версия 1.0 (#EPL)

Общественная лицензия Eclipse сходна с Общепубличной лицензией, и наши комментарии к последней применимы и к этой лицензии. Единственное изменение состоит в том, что в лицензии Eclipse удалены более широкие оговорки о прекращении действия в случае патентных преследований, направленных конкретно против тех, кто дорабатывал программу под лицензией Eclipse.

Общественная лицензия Eclipse (Eclipse Public License), версия 2.0 (#EPL2)

С точки зрения совместимости с GPL Общественная лицензия Eclipse 2.0 по существу эквивалентна версии 1.0. Единственное изменение состоит в том, что она явно предлагает возможность назначения GNU GPL версии 2 или более поздней в качестве “вторичной лицензии” для определенной части программы.

Если первоначальный разработчик выпускает конкретную часть программы и назначает GNU GPL версии 2 или более поздней в качестве вторичной лицензии, это дает явную совместимость с этими версиями GPL для этой части программы. (Для пользователей это примерно эквивалентно выпуску этой части программы под двойной лицензией: EPL или GPL.) Однако EPL2 без этого назначения остается несовместимой с GPL.

Общественная лицензия Европейского союза (European Union Public License, EUPL), версия 1.1 (#EUPL-1.1)

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

EUPL допускает перелицензирование под GPLv2, потому что она перечислена в списке альтернативных лицензий, на которые могут перейти пользователи. Она также косвенно допускает перелицензирование под GPL версии 3, потому что есть способ перелицензировать под CeCILL версии 2, а CeCILL версии 2 предоставляет способ перелицензировать под любую версию GNU GPL.

Чтобы провести такое двухэтапное перелицензирование, вам нужно сначала написать часть программы, которую вы можете лицензировать по CeCILL версии 2, или найти подходящий модуль, уже доступный таким образом, и добавить его к программе. Добавление этой части к программе под EUPL создает основания перелицензировать программу под CeCILL версии 2. Затем вам нужно написать часть программы, которую вы можете лицензировать по GPLv3+, или найти подходящий модуль, уже доступный таким образом, и добавить его к программе. Добавление этой части к программе под CeCILL создает основания перелицензировать программу под GPLv3+.

Общественная лицензия Европейского союза (European Union Public License, EUPL), версия 1. 2 (#EUPL-1.2)

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

EUPL допускает перелицензирование под GPLv2 (только) и GPLv3 (только), потому что эти лицензии перечислены в списке альтернативных лицензий, на которые могут перейти пользователи. Она также косвенно допускает перелицензирование под GPL версии 3 или любой более поздней, потому что есть способ перелицензировать под CeCILL версии 2, а CeCILL версии 2 предоставляет способ перелицензировать под любую версию GNU GPL.

Чтобы провести такое двухэтапное перелицензирование, вам нужно сначала написать часть программы, которую вы можете лицензировать по CeCILL версии 2, или найти подходящий модуль, уже доступный таким образом, и добавить его к программе. Добавление этой части к программе под EUPL создает основания перелицензировать программу под CeCILL версии 2. Затем вам нужно написать часть программы, которую вы можете лицензировать по GPLv3+, или найти подходящий модуль, уже доступный таким образом, и добавить его к программе. Добавление этой части к программе под CeCILL создает основания перелицензировать программу под GPLv3+.

Лицензия FDK AAC Фраунгофера (#fdk)

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

В ней присутствует особого рода опасность, заключающаяся в параграфе, явно заявляющем, что лицензия не предоставляет никаких пантентных лицензий, и приглашающим покупать такие патенты. Из-за этого и из-за того, что автор лицензии — известный патентный агрессор, мы призываем быть осторожными при пользовании или перераспространении программ под этой лицензией: сперва следует подумать, не стремится ли лицензиар соблазнить вас нарушить патент. Если вы придете к заключению, что программа представляет приманку в патентной западне, то было бы мудрым избегать этой программы.

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

Лицензия gnuplot (#gnuplot)

Это лицензия свободных программ, несовместимая с GNU GPL.

Общественная лицензия IBM (IBM Public License) версия 1.0 (#IBMPL)

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

Лицензия открытого исходного текста Jabber (Jabber Open Source License), версия 1.0 (#josl)

Это лицензия свободных программ, несовместимая с GNU GPL. Она допускает перелицензирование под определенным классом лицензий — тех, которые содержат все требования лицензии Jabber. GPL не является членом этого класса, так что лицензия Jabber не допускает перелицензирования под GPL. Следовательно, она не совместима.

Общественная лицензия проекта LaTeX (LaTeX Project Public License) 1.3a (#LPPL-1.3a)

Мы не производили полного анализа этой лицензии, но это лицензия свободных программ с менее жесткими требованиями на распространение, чем LPPL 1.2 (описанная ниже). Она так же несовместима с GPL, потому что некоторые модифицированные версии должны включать копию немодифицированной версии или указатель на нее.

Общественная лицензия проекта LaTeX 1.2 (#LPPL-1.2)

Эта лицензия — неполное описание условий распространения LaTeX. Те условия, которые описаны в этом документе, представляют собой лицензию свободных программ, но несовместимую с GPL, потому что в ней есть много требований, которых нет в GPL.

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

Причина, по которой это требование приемлемо для LaTeX, состоит в том, что в TeX есть средство, позволяющее переназначать имена файлов — указывать “использовать файл bar, когда требуется файл foo”. Благодаря этому средству такое требование становится просто неприятным; без этого средства то же самое требование было бы серьезным препятствием, и нам пришлось бы заключить, что программа несвободна.

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

В LPPL говорится, что у некоторых файлов в определенных версиях LaTeX могут быть дополнительные ограничения, что могло бы сделать их несвободными. По этой причине изготовление версии LaTeX, которая является пакетом свободных программ, может потребовать некоторой тщательной проверки.

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

Пожалуйста, не применяйте эту лицензию ни для каких других проектов.

Замечание: эти комментарии относятся к версии 1.2 (3 сентября 1999 года) LPPL.

Общественная лицензия Lucent, версия 1.02 (Lucent Public License, лицензия Plan 9) (#lucent102)

Это лицензия свободных программ, но она несовместима с GNU GPL, из-за пункта о выборе юрисдикции. Мы рекомендуем вам не применять эту лицензию для новых программ, которые вы пишете, но вполне допустимо использовать и улучшать программы Plan 9, выпущенные под этой лицензией.

Общественная лицензия Microsoft (Microsoft Public License, Ms-PL) (#ms-pl)

Это лицензия свободных программ; в ней есть авторское лево, которое не сильно, но делает лицензию несовместимой с GNU GPL. По этой причине мы настоятельно рекомендуем не применять Ms-PL.

Взаимная лицензия Microsoft (Microsoft Reciprocal License, Ms-RL) (#ms-rl)

Это лицензия свободных программ. Она основана на Общественной лицензии Microsoft и содержит дополнительный пункт, чтобы чуть-чуть усилить авторское лево. Она также несовместима с GNU GPL, и по этой причине мы настоятельно рекомендуем не применять Ms-RL.

Общественная лицензия Mozilla (Mozilla Public License, MPL) версии 1.1 (#MPL)

Это лицензия свободных программ без сильного авторского лева; в отличие от Лицензии X11, в ней есть некие сложные ограничения, которые делают ее несовместимой с GNU GPL. То есть, по закону модуль под GPL и модуль под MPL нельзя компоновать друг с другом. По этой причине мы настоятельно рекомендуем вам не применять MPL 1.1.

Однако в MPL 1.1 есть указание (в разделе 13), позволяющее программе (или ее части) предложить на выбор также другую лицензию. Если часть программы допускает в качестве альтернативы GNU GPL или любую другую совместимую с GPL лицензию, то лицензия этой части программы совместима с GPL.

В MPL версии 2.0 был проведен ряд улучшений, в том числе совместимость с GPL по умолчанию. Подробности см. пункте об MPL 2.0.

Лицензия открытого исходного текста граждан сети (Netizen Open Source License, NOSL), версия 1.0 (#NOSL)

Это лицензия свободных программ, которая по существу не отличается от версии 1.1 Общественной лицензии Mozilla. Как и в MPL, в NOSL есть некие сложные ограничения, которые делают ее несовместимой с GNU GPL. То есть, по закону модуль под GPL и модуль под NOSL нельзя компоновать друг с другом. По этой причине мы настоятельно рекомендуем вам не применять NOSL.

Общественная лицензия Netscape (Netscape Public License, NPL), версии 1. 0 и 1.1 (#NPL)

Это лицензия свободных программ без сильного авторского лева, несовместимая с GNU GPL. Она состоит из версии 1.1 Общественной лицензии Mozilla с дополнительным пунктом, в котором компании Netscape разрешается использовать ваши исходные тексты даже в несвободных версиях программы. Конечно, они не дают вам разрешения использовать их исходные тексты аналогичным образом. Мы настоятельно рекомендуем вам не применять NPL.

Лицензия открытого исходного текста Nokia (Nokia Open Source License) (#Nokia)

Она сходна с версией 1 Общественной лицензии Mozilla: это лицензия свободных программ, несовместимая с GNU GPL.

Старая лицензия OpenLDAP, версия 2.3 (#oldOpenLDAP)

Это неограничительная лицензия свободных программ без авторского лева; у нее есть несколько требований (в разделах 4 и 5), которые делают ее несовместимой с GNU GPL. Обратите внимание, что у последней версии OpenLDAP лицензия другая, она совместима с GNU GPL.

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

Лицензия открытых программ (Open Software License, OSL), все версии до 3.0 (#OSL)

Лицензия открытых программ является лицензией свободных программ. Она несовместима с GNU GPL в нескольких аспектах.

В последних версиях Лицензии открытых программ есть условие, по которому от распространителей требуется попытаться получить явное согласие на лицензию. Это значит, что распространение программ под OSL через обычные сайты FTP, пересылка изменений по обычным спискам рассылки или хранение программ в обычной системе контроля версий может расцениваться как нарушение лицензии и основание для отзыва у вас лицензии. Таким образом, Лицензия открытых программ сильно затрудняет разработку программ, применяющих обычные средства разработки свободных программ. По этой причине, а также из-за того, что она несовместима с GPL, мы рекомендуем не применять никаких версий OSL ни для каких программ.

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

Лицензия OpenSSL (#OpenSSL)

Лицензия OpenSSL является конъюнкцией двух лицензий, одна из них называется “лицензией OpenSSL”, другая — лицензией SSLeay. Вы должны следовать обеим. Сочетание приводит к лицензии свободных программ с авторским левом, которая несовместима с GNU GPL. В ней также есть пункт о рекламе, как в первоначальной лицензии BSD и в лицензии Apache 1.

Мы рекомендуем применять GNUTLS вместо OpenSSL в программах, которые вы пишете. Однако нет причин не пользоваться OpenSSL и приложениями, которые работают с OpenSSL.

Лицензия Phorum, версия 2.0 (#Phorum)

Это лицензия свободных программ, но она несовместима с GPL. Раздел 5 делает ее несовместимой с GPL.

Лицензия PHP, версия 3.01 (#PHP-3.01)

Эта лицензия используется в большей части PHP4. Это лицензия свободных программ без авторского лева. Она несовместима с GNU GPL, потому что в ней есть сильные ограничения на употребление “PHP” в названиях производных продуктов.

Мы рекомендуем вам не применять эту лицензию ни для чего, кроме дополнений PHP.

Лицензия Python от 1.6b1 до 2.0 и 2.1 (#PythonOld)

Это лицензия свободных программ, но она несовместима с GNU GPL. Главная несовместимость заключается в том, что эта лицензия Python подчинена юрисдикции штата Вирджинии (США), а GPL не допускает этого.

Общественная лицензия Q (Q Public License, QPL), версия 1.0 (#QPL)

Это лицензия свободных программ без авторского лева, которая несовместима с GNU GPL. Она также приводит к серьезным практическим неудобствам, потому что измененные исходные тексты можно распространять только как файлы изменений.

Мы рекомендуем вам избегать применения QPL для всего, что вы пишете, и пользоваться программами под QPL только тогда, когда это совершенно необходимо. Однако это больше не относится к самой библиотеке Qt, поскольку Qt сейчас выпускается также под GNU GPL.

Поскольку QPL несовместима с GNU GPL, вы не можете взять программу под GPL и программу под QPL и скомпоновать их вместе каким бы то ни было образом.

Однако если вы написали программу, которая пользуется библиотекой под QPL (под названием FOO), и хотите выпустить свою программу под GNU GPL, вы легко можете сделать это. Вы можете разрешить конфликт для своей программы, добавив к ней такое замечание:

  As a special exception, you have permission to link this program
  with the FOO library and distribute executables, as long as you
  follow the requirements of the GNU GPL in regard to all of the
  software in the executable aside from FOO.

  (Как особое исключение, у вас есть разрешение компоновать эту программу
  с библиотекой FOO и распространять исполняемые файлы до тех пор, пока вы
  следуете требованиям GNU GPL по отношению ко всем программам в составе
  исполняемого файла, за исключением FOO. )

По закону вы можете делать это, если вы являетесь правообладателем этой программы. Добавьте это в файлы исходных текстов после замечания, в котором говорится о том, что программа распространяется по GNU GPL.

Общественная лицензия исходных текстов RealNetworks (RealNetworks Public Source License, RPSL), версия 1.0 (#RPSL)

RPSL — лицензия свободных программ, несовместимая с GPL по ряду причин: она требует, чтобы производные произведения выпускались на условиях RPSL, и обязывает проводить все судебные разбирательства в Сиэтле (штат Вашингтон).

Лицензия исходных текстов промышленных стандартов Sun (Sun Industry Standards Source License) 1.1 (#SISSL)

Это лицензия свободных программ без сильного авторского лева, несовместимая с GNU GPL из-за деталей, а не каких-то серьезных расхождений.

Общественная лицензия Sun (#SPL)

Это по существу то же самое, что версия 1 Общественной лицензии Mozilla: лицензия свободных программ, несовместимая с GNU GPL. Пожалуйста, не путайте ее с Лицензией открытого текста сообщества Sun, которая не является лицензией свободных программ.

Лицензия xinetd (#xinetd)

Это лицензия свободных программ с авторским левом, несовместимая с GNU GPL. Она несовместима потому, что налагает дополнительные ограничения на перераспространение измененных версий, что противоречит требованиям о перераспространении из GPL.

Общественная лицензия Yahoo! (Yahoo! Public License) 1.1 (#Yahoo)

Это лицензия свободных программ. В ней есть авторское лево, подобное авторскому леву в Общественной лицензии Mozilla. В ней есть также пункт о выборе юрисдикции в разделе 7. Обе этих особенности делают лицензию несовместимой с GPL. В лицензии также употребляется, к сожалению, термин “интеллектуальная собственность”.

Лицензия Zend, версия 2.0 (#Zend)

Эта лицензия используется для части PHP4. Это лицензия свободных программ без авторского лева, несовместимая с GNU GPL, у нее есть практические проблемы, подобные проблемам первоначальной лицензии BSD.

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

Общественная лицензия Zimbra (Zimbra Public License) 1.3 (#Zimbra)

Эта лицензия идентична Общественной лицензии Yahoo! 1.1, за исключением того, что эта лицензия предоставляется компанией VMWare, а не Yahoo!. Наши комментарии к той лицензии применимы и здесь; это несовместимая с GPL лицензия свободных программ с частичным авторским левом.

Общественная лицензия Zope (Zope Public License), версия 1.0 (#Zope)

Это безвольная и довольно неограничительная лицензия свободных программ без авторского лева с практическими проблемами, подобными проблемам первоначальной лицензии BSD, в число которых входит несовместимость с GNU GPL.

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

Версия 2.0 Общественной лицензии Zope совместима с GPL.

Следующие лицензии не являются лицензиями свободных программ. Они автоматически несовместимы с GNU GPL.

Разумеется, мы настоятельно рекомендуем вам избегать применения лицензий несвободных программ и несвободных программ вообще.

Для нас нет никакой возможности перечислить здесь все известные лицензии несвободных программ; в конце концов, у каждой компании, занимающейся несвободными программами, есть своя собственная лицензия. Здесь наше внимание сосредоточено на лицензиях, которые часто по ошибке принимают за лицензии свободных программ, но фактически они таковыми не являются.

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

Без лицензии (#NoLicense)

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

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

Чтобы программа была свободной, ее правообладатели должны явно предоставить пользователям четыре существенных свободы. Документ, с помощью которого они это делают, называется лицензией свободных программ. Для этого-то и служат лицензии свободных программ.

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

Программы, написанные сотрудниками государственных органов США, представляют особое исключение, поскольку законы об авторском праве США явно помещают их в общественное достояние; но это не относится к произведениям, написанным компанией за плату от государства. Это не относится также к другим странам, во многих из которых государству позволено обладать авторскими правами на государственные произведения.

Свободная общественная лицензия Aladdin (Aladdin Free Public License) (#Aladdin)

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

Лицензия Anti-996 (#Anti-996)

Это не лицензия свободных программ. Она налагает ограничения на свободу выполнять программу в любых целях.

Пожалуйста, не применяйте эту лицензию для своих программ. Мы будем избегать применения программ под этой лицензией, как и всех других несвободных программ.

Антикапиталистическая лицензия программ (Anti-Capitalist Software License) (#anticapitalist)

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

Общественная лицензия исходных текстов Apple (Apple Public Source License, APSL), версия 1.x (#apsl1)

Версии 1.0, 1.1 и 1.2 не являются лицензиями свободных программ. Пожалуйста, не пользуйтесь этими лицензиями, и мы настоятельно рекомендуем вам избегать любых программ, выпущенных под этими лицензиями. Версия 2.0 APSL является лицензией свободных программ.

Художественная лицензия (Artistic License) 1.0 (#ArtisticLicense)

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

Общественная лицензия AT&T (AT&T Public License) (#ATTPublicLicense)

Общественная лицензия AT&T — несвободная лицензия. У нее есть несколько проблем:

  • Патентная лицензия отменяется любым изменением лицензируемых программ, как бы мало это изменение ни было.
  • Вы должны требовать письменного согласия, когда распространяете исходные тексты или поправки к ним.
  • Она требует оповещать AT&T, если вы распространяете изменение.
  • Действие вашей лицензии может быть прекращено без вашей вины, по условиям раздела 8/3.
  • Она делает соблюдение законов по контролю экспорта условием лицензии.
  • Некоторые версии лицензии требуют от вас предоставления поддержки.
  • В некоторых версиях лицензии сказано, что вам нельзя продавать копии программ дороже, чем за стоимость распространения.

У лицензии есть две злостных черты:

  • В ней есть очень широкая обратная лицензия, предоставляемая компании AT&T, выходящая далеко за применение ваших исходных текстов и даже ваших текстов с изменениями.
  • Она утверждает, что для того, чтобы делать ссылку на сайт AT&T, необходимо разрешение AT&T. Само по себе это не является практической проблемой, поскольку в лицензии сказано, что она дает разрешение на такую ссылку. (Как бы то ни было, людям не следует делать ссылки на сайты о несвободных программах.) Но таких заявлений ни делать, ни передавать не следует.
Открытая лицензия проекта Code (Code Project Open License), версия 1.02 (#cpol)

Открытая лицензия проекта Code не является лицензией свободных программ. Раздел 5.6 ограничивает то, как вы можете использовать произведение. В разделе 5.4 запрещается коммерческое распространение программы самой по себе — и в зависимости от того, как вы истолкуете раздел 3.4, у вас вообще может не быть разрешения распространять программу саму по себе.

Параграф обобществления (Commons Clause) (#comclause)

“Параграф обобществления” представляет лицензию несвободных программ, поскольку запрещает продажу копий программы и даже работу с программой при реализации любой коммерческой услуги. Добавляя оскорбление к несправедливости, она выворачивает наизнанку слова “обобществление” и “продажа”.

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

Лицензионное соглашение Репозитория цифровых объектов CNRI (#DOR)

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

Общественная лицензия eCos (eCos Public License), версия 1.1 (#eCos11)

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

Сейчас eCos доступна на условиях GNU GPL с дополнительным разрешением компоновать с несвободными программами.

Гиппократическая лицензия 1.1 (#hippocratic)

Это не лицензия свободных программ, потому что она налагает ограничения на то, для каких работ пользователи могут применять эти программы. Это отказывает им в свободе 0. Этот пункт раньше был озаглавлен “Прежде всего не навреди”.

Стандартная общественная лицензия для компьютерных программ общественной администрации (#GPL-PA)

GPL-PA (оригинальное название которой на португальском — “Licença Pública Geral para Administração Pública”) несвободна по нескольким причинам:

  • Она разрешает применение только в “обычных обстоятельствах”.
  • Она не допускает распространения исходных текстов без двоичных файлов.
  • Ее разрешения истекают через 50 лет.
Лицензионное соглашение программ с улучшенным исходным текстом Hacktivismo (Hacktivismo Enhanced-Source Software License Agreement, HESSLA) (#HESSLA)

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

Лицензия исходного текста сообщества Jahia (Jahia Community Source License) (#Jahia)

Лицензия исходного текста сообщества Jahia не является лицензией свободных программ. Применение исходного текста ограничено исследовательскими целями.

Лицензия JSON (#JSON)

Это лицензия первоначальной реализации формата обмена данными JSON. Эта лицензия принимает за основу Лицензию Expat, но добавляет пункт, требующий: “Программы должны использоваться для Добра, а не для Зла”. Это является ограничением на применение и, следовательно, противоречит свободе 0. Возможно, это ограничение не поддается защите в суде, но мы не можем заранее предполагать этого. Таким образом, лицензия несвободна.

Лицензия ksh93 (#ksh93)

Раньше ksh93 поставляли с оригинальной лицензией, которая не была лицензией свободных программ. Одной из причин этого было то, что она требовала, чтобы все изменения высылались разработчику.

Лицензия Lha (#Lha)

Лицензия lha должна расцениваться как несвободная, потому что она так туманна, что нельзя понять, что вам разрешается.

Лицензия Microsoft на разделяемый исходный текст CLI, C# и Jscript (Microsoft’s Shared Source CLI, C#, and Jscript License) (#Ms-SS)

Эта лицензия не допускает коммерческого распространения и допускает коммерческое использование только в определенных обстоятельствах.

У Microsoft есть другие лицензии, которые она определяет как “лицензии разделяемого исходного текста”; в некоторых из них ограничения другие.

Соглашение на открытый исходный текст NASA (NASA Open Source Agreement) (#NASA)

Соглашение открытого исходного текста NASA, версия 1.3, не является лицензией свободных программ, потому что в нее входит требование того, чтобы изменения были вашим “оригинальным творением”. Развитие свободных программ зависит от возможности сочетания исходных текстов третьих сторон, а лицензия NASA этого не допускает.

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

Лицензия Oculus Rift SDK (#OculusRiftSDK)

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

  • Нельзя распространять ничто меньшее, чем вся программа libOVR.
  • Права на распространение могут быть прерваны на неясных условиях.
  • Те, кто делает измененные версии, должны высылать их в Oculus по требованию.
  • Использование допускается только с их продуктом.
  • Новые версии лицензии полностью заменяют старые версии; это значит, что уже выданные разрешения могут быть отозваны.
Могут быть дополнительные критические недостатки; после того как мы нашли их в таком количестве, мы отказались от дальнейшего анализа.
Открытая общественная лицензия (Open Public License) (#OpenPublicL)

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

Лицензия неиерархического производства (Peer-Production License) (#PPL)

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

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

Персональная публичная лицензия версии 3a (#PPL3a)

Персональная публичная лицензия версии 3a представляет лицензию несвободных программ, поскольку отказывает пользователям (организациям, государствам, предприятиям) в четырех свободах.

Лицензия PINE (#PINE)

Лицензия PINE не является лицензией свободных программ, потому что она по большей части запрещает распространение измененных версий. Она также ограничивает носители, которые можно применять для продажи копий.

Пожалуйста, обратите внимание, что программа Alpine, пришедшая на смену Pine, выпускается под версией 2.0 Лицензии Apache.

Старая лицензия Plan9 (#Plan9)

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

В сентябре 2002 года было замечено, что опубликованная лицензия Plan 9 была изменена добавлением дополнительных ограничений, хотя заявленная дата осталась 09/20/00. Однако последующее изменение в лицензии сделало Plan 9 пакетом свободных программ.

Взаимная общественная лицензия (Reciprocal Public License) (#RPL)

Взаимная общественная лицензия не свободна из-за трех проблем. 1.  Она ограничивает плату, взимаемую за первоначальную копию. 2. Она требует уведомлять первоначального разработчика при публикации измененной версии. 3. Она требует публикации любой измененной версии, используемой в организации, даже когда она используется частным порядком.

Лицензия Scilab (#Scilab)

Это не лицензия свободных программ, потому что она не допускает коммерческого распространения измененной версии. К счастью, начиная с версии 5.5.0, программы Scilab свободны и выпускаются под CeCILL версии 2.

Лицензия Scratch 1.4 (#Scratch)

Это не лицензия свободных программ, потому что она не допускает коммерческого перераспространения. Кроме того, условие 4 существенно ограничивает функциональность измененных версий.

Новые версии программ Scratch распространяются по GNU GPL, но некоторые из этих новых версий мы не рекомендуем, потому что для них нужна несвободная программа Adobe Air.

Лицензия “Простых машин” (Simple Machines License) (#SML)

Несмотря на название, это лицензия программ, и она не свободна по нескольким причинам:

  • Перед распространением программ вы должны получить разрешение правообладателя.
  • Вам нельзя продавать копии программ.
  • Может выйти так, что действие вашей лицензии прекратится, если вы получили программы от кого-то, кто не выполнил условий лицензии.
Старая лицензия Squeak (#Squeak)

Первоначальная лицензия Squeak, применительно к программам, не является лицензией свободных программ, потому что она требует, чтобы все пользователи в каких бы то ни было странах подчинялись законам США по контролю экспорта. Применительно к шрифтам она также не допускает модификаций.

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

Последние версии Squeak (начиная с 4.0) выпускаются под Лицензией типа Expat, а некоторые секции исходных текстов — под Лицензией Apache 2.0.

(#SunCommunitySourceLicense)

Это не лицензия свободных программ; ей не хватает таких существенных свобод, как право публикации измененных версий. Пожалуйста, не применяйте эту лицензию, и мы настоятельно рекомендуем вам избегать любых программ, выпущенных под этой лицензией.

Лицензия исходного текста Sun Solaris (фондового выпуска) (Sun Solaris Source Code (Foundation Release) License), версия 1.1 (#SunSolarisSourceCode)

Это не лицензия свободных программ. Лицензия запрещает перераспространение, коммерческое применение программ и может быть отозвана.

Общественная лицензия Sybase Open Watcom (Sybase Open Watcom Public License), версия 1.0 (#Watcom)

Это не лицензия свободных программ. Она требует, чтобы вы общедоступно публиковали исходный текст всякий раз, когда вы “вводите в эксплуатацию” программы, на которые она распространяется, а “введение в эксплуатацию” определено так, что включает в себя много разновидностей применения частным порядком.

Лицензия “открытого исходного текста” SystemC (SystemC “Open Source” License), версия 3.0 (#SystemC-3.0)

Эта лицензия требует, чтобы все получатели активно помогали правообладателю отстаивать его товарные знаки. Это слишком жесткое условие, налагаемое на права пользователя, поэтому лицензия не свободна. У нее есть также другие практические проблемы: некоторые требования туманны, и в ней употребляется термин “интеллектуальная собственность”.

Несмотря на название, не ясно, может ли эта лицензия считаться лицензией “открытого исходного текста”. Однако наше суждение на этом не основывается.

Лицензия Truecrypt 3.0 (#Truecrypt-3.0)

Эта лицензия несвободна по нескольким причинам. В ней сказано, что если вы не понимаете лицензию, вы не можете пользоваться программой. Лицензия налагает условия на разрешение другим пользоваться вашей копией. Она налагает условия на другие программы, которые “зависят от” Truecrypt. Условие о товарных знаках распространяется на “сопутствующие материалы”.

В лицензии есть и другие моменты, которые, вероятно, неприемлемы, и неуверенность в них заставила нас задержать публикацию нашей оценки. Сейчас мы опубликовали ее, чтобы объяснить, почему мы не скорбим о кончине Truecrypt. Есть свободные программы, выполняющие ту же задачу.

Общественная лицензия Фонда исследований Университета Юты (University of Utah Research Foundation Public License) (#UtahPublicLicense)

Общественная лицензия Фонда исследований Университета Юты не свободна, потому что она не допускает коммерческого перераспространения. Она также претендует на то, чтобы ограничивать коммерческое выполнение программ и даже коммерческие консультации по программе. Возможно, эти ограничения не имеют юридической силы в рамках авторского права США, но они могли бы иметь ее в некоторых странах; возмутительно уже само заявление об этих ограничениях.

Применение этой лицензии Университетом Юты служит примером опасной тенденции университетов ограничивать знание вместо того, чтобы нести его в общество.

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

Чем раньше вы поднимете этот вопрос, тем лучше.

Лицензия YaST (#YaST)

Это не лицензия свободных программ. Лицензия запрещает распространение за плату, а это делает невозможным вхождение программы в состав многих сборников свободных программ на компакт-дисках, которые продаются предприятиями и организациями.

В разделе 2a может быть другая проблема, но там, кажется, пропущено слово, так что трудно быть уверенным в том, какое значение в действительности подразумевалось.

(Сами программы YaST больше не пользуются несвободной лицензией YaST; к счастью, теперь это свободные программы, выпускаемые под GNU GPL.)

Следующие лицензии не удовлетворяют критериям лицензий свободной документации:

Стандартная общественная лицензия GNU (#GPLOther)

GNU GPL можно применять для данных общего характера, которые не являются программами, постольку, поскольку можно определить, к чему в данном конкретном случае относится определение “исходного текста”. Оказывается, что DSL (см. ниже) тоже требует, чтобы вы определили, что такое “исходный текст”, пользуясь примерно тем же определением, что и GPL.

CC0 (#CC0)

CC0 — формула передачи в общественное достояние, составленная организацией Creative Commons. Работа, выпущенная под CC0, передается в общественное достояние в той мере, в какой это только допускается законом. Если это по какой-то причине невозможно, CC0 предусматривает безвольную неограничительную лицензию как запасной вариант. Как условия распространения работ в общественном достоянии, так и безвольная лицензия, предоставляемая CC0, совместимы с GNU GPL.

Если вы хотите передать свою непрограммную работу в общественное достояние, мы рекомендуем вам воспользоваться CC0. Для работ-программ она не рекомендуется, поскольку в CC0 есть условие, в котором явно сказано, что она не предоставляет никаких патентных лицензий.

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

Лицензия Creative Commons Attribution 4.0 (она же — CC BY) (#ccby)

Это свободная лицензия без авторского лева, она хороша для художественных, развлекательных и образовательных произведений. Она совместима со всеми версиями GNU GPL; однако, как и все лицензии Creative Commons, ее не следует применять для программ.

(#which-cc) Creative Commons издает много очень разных лицензий. Следовательно, говорить, что произведение “использует лицензию Creative Commons” значит оставлять без ответа принципиальные вопросы о лицензировании произведения. Когда вы видите в произведении такое заявление, попросите, пожалуйста, автора изменить произведение так, чтобы оно четко и ясно указывало, какую из лицензий Creative Commons оно использует. И если кто-то предлагает “применять лицензию Creative Commons” для определенного произведения, то перед тем, как продолжать любое обсуждение, совершенно необходимо спросить: “Какую из лицензий Creative Commons?”

Перечисленные ниже лицензии относятся не к художественному решению, а к его выражению в виде файла. Насколько нам известно, на реализацию решения всегда распространяется авторское право. Юридический статус художественного решения сложен и различается от одной юрисдикции к другой.

Работы, которые выражают чье-то мнение — мемуары, комментарии и так далее — имеют принципиально другое назначение, чем такие произведения практического применения, как программы и документация. Поэтому мы ожидаем, что в отношении их получателям будет предоставляться другой набор разрешений: только разрешение воспроизводить и распространять работу без изменений. Ричард Столмен часто обсуждает это в своих выступлениях.

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

Электрические схемы предназначены для практического применения, так что их чертежи должны нести свободную лицензию. Мы рекомендуем выпускать их под Стандартной общественной лицензией GNU версии 3 или более поздней. Версия 3 была составлена для таких применений.

Планы объектов для трехмерных принтеров, предназначенные для практического применения, также должны быть свободны. Мы рекомендуем GNU GPL или те из лицензий Creative Commons, которые свободны: CC-BY, CC-BY-SA или CC0.

Планы декоративных объектов для трехмерных принтеров представляют собой художественные произведения; для них подходят любые лицензии Creative Commons.

Jinja2 — Основы Веб-программирования

from models import ARTICLES

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))


class BaseBlog(object):

    def __init__(self, environ, start_response):
        self.environ = environ
        self.start = start_response


class BaseArticle(BaseBlog):

    def __init__(self, *args):
        super(BaseArticle, self).__init__(*args)
        article_id = self.environ['wsgiorg.routing_args'][1]['id']
        (self.index,
         self.article) = next(((i, art) for i, art in enumerate(ARTICLES)
                               if art['id'] == int(article_id)),
                              (None, None))


class BlogIndex(BaseBlog):

    def __iter__(self):
        self. start('200 OK', [('Content-Type', 'text/html')])
        yield str.encode(
            env.get_template('index.html').render(articles=ARTICLES)
        )


class BlogCreate(BaseBlog):

    def __iter__(self):
        if self.environ['REQUEST_METHOD'].upper() == 'POST':
            from urllib.parse import parse_qs
            values = parse_qs(self.environ['wsgi.input'].read())
            max_id = max([art['id'] for art in ARTICLES])
            ARTICLES.append(
                {'id': max_id+1,
                 'title': values[b'title'].pop().decode(),
                 'content': values[b'content'].pop().decode()
                 }
            )
            self.start('302 Found',
                       [('Content-Type', 'text/html'),
                        ('Location', '/')])
            return

        self.start('200 OK', [('Content-Type', 'text/html')])
        yield str.encode(
            env.get_template('create.html').render(article=None)
        )


class BlogRead(BaseArticle):

    def __iter__(self):
        if not self. article:
            self.start('404 Not Found', [('content-type', 'text/plain')])
            yield b'not found'
            return

        self.start('200 OK', [('Content-Type', 'text/html')])
        yield str.encode(
            env.get_template('read.html').render(article=self.article)
        )


class BlogUpdate(BaseArticle):

    def __iter__(self):
        if self.environ['REQUEST_METHOD'].upper() == 'POST':
            from urllib.parse import parse_qs
            values = parse_qs(self.environ['wsgi.input'].read())
            self.article['title'] = values[b'title'].pop().decode()
            self.article['content'] = values[b'content'].pop().decode()
            self.start('302 Found',
                       [('Content-Type', 'text/html'),
                        ('Location', '/')])
            return
        self.start('200 OK', [('Content-Type', 'text/html')])
        yield str.encode(
            env.get_template('create.html').render(article=self.article)
        )


class BlogDelete(BaseArticle):

    def __iter__(self):
        self. start('302 Found',  # '301 Moved Permanently',
                   [('Content-Type', 'text/html'),
                    ('Location', '/')])
        ARTICLES.pop(self.index)
        yield b''

Шаблоны > Комментарии

{author}

Имя человека, оставившего комментарий

{mail}

е-mail человека, оставившего комментарий

{date}

Дата публикации комментария, формат вывода даты настраивается в настройках системы

{comment}

Текст комментария

{comment limit=»X»}

Выводит текст комментария без HTML форматирования, при этом сам текст комментария сокращается до указанного «x» количества символов.

{comment-id}

Идентификационный номер комментария

{ip}

IP адрес человека, оставившего комментарий, просмотр доступен только администраторам сайта

[com-edit] и [/com-edit]

Ссылка на редактирование комментария только если это разрешено

[com-del] и [/com-del]

Ссылка на удаление комментария только если это разрешено

{news_title}

Выводит ссылку на новость при просмотре последних комментариев, при выводе комментариев в новости тег вырезается

{news-title}

Выводит HTML безопасный заголовок новости, которой принадлежит данный комментарий, при просмотре последних комментариев. При выводе комментариев в новости тег вырезается. Данный тег будет полезен при использовании пользовательского вывода комментариев и при показе последних комментариев.

{news-link}

Выводит URL новости, которой принадлежит данный комментарий, при просмотре последних комментариев. При выводе комментариев в новости тег вырезается. Данный тег будет полезен при использовании пользовательского вывода комментариев и при показе последних комментариев.

{foto}

Выводит ссылку на фотографию

{fullname}

Выводит полное имя пользователя

{land}

Выводит место жительства

[signature] и [/signature]

Выводит текст заключенный в теги, если пользователь задал подпись в профиле

{signature}

Выводит подпись пользователя

{registration}

Выводит дату регистрации на сайте

{lastdate}

Выводит дату последнего посещения сайта пользователя.

[fast] [/fast]

Быстрое цитирование комментариев

{group-icon}

Выводит иконку группы участника

{group-name}

Выводит имя группы участника

{news-num}

Выводит количество новостей участника

{comm-num}

Выводит количество комментариев участника

{date=формат даты}

Выводит дату в заданном в теге формате. Тем самым вы можете выводить не только дату целиком но и ее отдельные части. Формат даты задается задается согласно формату принятому в PHP. Например тег {date=d} выведет день месяца публикации новости или комментария, а тег {date=F} выведет название месяца, а тег {date=d-m-Y H:i} выведет полную дату и время

{login}

Выводит логин автора комментария без каких либо ссылок и меню

[profile] текст [/profile]

Выводит текст заключенный в теге в виде ссылки на профиль пользователя оставившего комментарий

{mass-action}

Устанавливает возможность массовой отметки комментариев для выполнения массовых действий на сайте

[complaint]

текст

[/complaint]

Выводят текст, указанных в тегах в виде ссылки на написание жалобы, на комментарий.

[xfgiven_x]

[xfvalue_x]

[/xfgiven_x]

Выводится дополнительное поле «x», если поле не пустое

[xfnotgiven_x]

текст

[/xfnotgiven_x]

Выводится текст, указанный в них, если дополнительное поле пользователя не было задано, где X это имя дополнительного поля профиля пользователя

[xfvalue_x]

Значение дополнительного поля «x», где «x» название дополнительного поля

[fullname]

текст [/fullname]

Выводится текст заключенный в них только если полное имя пользователя задано

[not-fullname]

текст [/not-fullname]

Выводится текст, заданный в них только если полное имя пользователя не задано

[land] текст [/land]

Выводится текст заключенный в них только если местожительство пользователя было им задано

[not-land] текст [/not-land]

Выводится текст, заданный в них только если местожительство пользователя не было им указано

[news-num]

текст

[/news-num]

Выводится текст, заключенный в них если у данного пользователя есть опубликованные новости на сайте

[not-news-num]

текст

[/not-news-num]

Выводится текст заключенных в них если у данного пользователя нет новостей на сайте

[comm-num]

текст [/comm-num]

Выводится текст, заключенный в них если у данного пользователя есть опубликованные комментарии на сайте

[not-comm-num]

текст [/not-comm-num]

Выводится текст заключенных в них если у данного пользователя нет комментариев на сайте

[online] текст [/online]

Выводят текст если пользователь онлайн (20 минут с момента последнего посещения пользователем сайта)

[offline] текст [/offline]

Выводят текст если пользователь оффлайн

[spam] Спамер [/spam]

Выводят текст, указанных в них, в виде ссылки, при нажатии на которую происходит отметка посетителя, оставившего комментарий, как «спамера»

 

[declination=X] текст [/declination]

Выводит склонения слов относительно чисел. В качестве параметров тега вместо X передается число, а вместо «текст» передается корень слова с окончаниями. Окончания слова перечисляются при помощи символа «|». Данный тег полезно использовать с другими тегами, выводящими например количество просмотров новости или количество комментариев. Например [declination={comments-num}]комментари|й|я|ев[/declination] в зависимости от количества комментариев будет выводить: «комментарий», «комментария», «комментариев»

[commentsgroup=1,2,3]

текст

[/commentsgroup]

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

[not-commentsgroup=1,2,3]

текст

[/not-commentsgroup]

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

 

[commentscount=x]

текст

[/commentscount]

Выводят текст указанный в тегах если показывается X комментарий, где X это число показываемого на странице комментария. Например [commentscount=1] текст [/commentscount] покажет текст при показе первого по счету на странице комментария. Данный тег полезен для вебмастеров, которые хотят например регулировать где им показывать рекламу на сайте между комментариями. Например, добавленный в самый конец шаблона код [commentscount=1,10] рекламный код [/commentscount], будет показывать рекламу после первого и десятого комментария.

[not-commentscount=X]

текст

[/not-commentscount]

Выводят текст заключенный в данные теги при показе любых по счету комментариев, кроме указанных X комментариях. Данный тег будет полезен, если вы хотите выводить какие-либо элементы оформления во всех по счету комментариях, кроме вышеуказанных. Например, что-либо не показывать в первом по списку комментарии.

[rating-type-1] текст [/rating-type-1]

Выводят текст, заключенный в них, если в настройках скрипта включено использование первого типа рейтинга ‘Оценка’.

[rating-type-2] текст [/rating-type-2]

Выводят текст, заключенный в них, если в настройках скрипта включено использование второго типа рейтинга ‘Только Нравится’.

[rating-type-3] текст [/rating-type-3]

Выводят текст, заключенный в них, если в настройках скрипта включено использование третьего типа рейтинга ‘Нравится’ или ‘Не нравится’.

[rating-type-4] текст [/rating-type-4]

Выводят текст, заключенный в теге, в случае если в настройках включено использование четвертого типа рейтинга ‘Нравится’ и ‘Не нравится’.

[rating-minus] текст [/rating-minus]

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

[rating-plus] текст [/rating-plus]

Выводят текст, заключенных в них, в виде ссылки для увеличения рейтинга комментария, выводится данная ссылка только если используется второй и третий тип рейтинга.

{rating}

Выводит выставленный для комментария рейтинг.

{likes}

Выводит количество лайков

{dislikes}

Выводит количество дизлайков

{vote-num}

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

{ratingscore}

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

[reply] текст [/reply]

Выводят текст в них, в виде ссылки на открытие всплывающего окна для ответа на комментарий, в случае если включена поддержка древовидных комментариев, а в случае если она отключена вставляет логин выбранного комментатора в форму добавления комментариев

[treecomments]

текст

[/treecomments]

Выводят текст, заключенных в них, в случае если включены древовидные комментарии в настройках скрипта.

[not-treecomments]

текст

[/not-treecomments]

Выводят текст, заключенный в них, в случае если древовидные комментарии отключены.

[rootcomments] текст [/rootcomments]

Выводят текст, заключенных в них, в случае если комментарий является основным родительским к новости, а не является ответом на какой-либо другой комментарий.

[childrencomments] текст [/childrencomments]

Выводят текст, заключенных в них, в случае если комментарий является ответом на другой комментарий.

{replycount}

Выводит количество имеющихся ответов на данный комментарий

[comments-author]

текст

[/comments-author]

Выводят текст, заключенный в них, если пользователь, просматривающий страницу сайта, является автором данного комментария

[not-comments-author]

текст

[/not-comments-author]

Выводят текст, заключенный в них, если пользователь, просматривающий страницу сайта, не является автором данного комментария

[news-author] текст [/news-author]

Выводят текст, заключенный в них, если комментарий принадлежит автору данной новости

[not-news-author]

текст

[/not-news-author]

Выводят текст, заключенный в них, если комментарий не принадлежит автору данной новости

[positive-comment]

текст

[/positive-comment]

Выводят текст, заключенный в них, если комментарий имеет позитивный рейтинг

[negative-comment]

текст

[/negative-comment]

Выводят текст, заключенный в них, если комментарий имеет негативный рейтинг

[neutral-comment]

текст

[/neutral-comment]

Выводят текст, заключенный в них, если комментарий имеет нейтральный рейтинг

[catlist=1,2. …] текст [/catlist]

Выводит текст в теге, если новость принадлежит указанным категориям

[not-catlist=1,2….] текст [/not-catlist]

Выводит текст в теге, если новость не принадлежит указанным категориям.

{banner_X}

Выводит рекламу из модуля рекламных материалов в админпанели. Где X это имя рекламного баннера

Туториал по HTML препроцессору Pug (Jade) · GitHub

Pug — это препроцессор HTML и шаблонизатор, который был написан на JavaScript для Node.js.

Содержание:
  1. Теги
  2. Текст
  3. Атрибуты
  4. Констуркция Switch Case
  5. Циклы
  6. Вставка JavaScript кода
  7. Комментарии
  8. Условия
  9. Тип документа
  10. Инклюды (Includes)
  11. Наследование шаблонов
  12. Интерполяция переменных
  13. Миксины
  14. Многострочный ассоциативный массив

Официальная документация по Pug

Теги

В Pug нет закрывающих тегов, вместо этого он использует строгую табуляцию (или отступы) для определения вложености тегов. Для закрытия тегов в конце необходимо добавить символ /: foo(bar='baz')/

Pug

ul
  li Item A
  li Item B
  li Item C

HTML

<ul>
  <li>Item A</li>
  <li>Item B</li>
  <li>Item C</li>
</ul>

Текст

Непосредственно в Pug можно вставлять элементы в HTML синтаксисе

Pug

p This is plain old <em>text</em> content.

HTML

<p>This is plain old <em>text</em> content.</p>

Pug

p
  | The pipe always goes at the beginning of its own line,
  | not counting indentation.

HTML

<p>The pipe always goes at the beginning of its own line, not counting indentation.</p>

Атрибуты

В Pug можно встраивать JavaScript код, благодаря чему возможны конструкции показанные ниже.

Pug

a(href='google.com') Google
|
|
a(class='button' href='google.com') Google
|
|
a(class='button', href='google. com') Google

HTML

<a href="google.com">Google</a>
<a href="google.com">Google</a>
<a href="google.com">Google</a>

Pug

- var authenticated = true
body(class=authenticated ? 'authed' : 'anon')

HTML

<body></body>

Pug

input(
  type='checkbox'
  name='agreement'
  checked
)

HTML

<input type="checkbox" name="agreement" checked="checked" />

Pug

- var url = 'pug-test.html';
a(href='/' + url) Link
|
|
- url = 'https://example.com/'
a(href=url) Another link

HTML

<a href="/pug-test.html">Link</a>
<a href="https://example.com/">Another link</a>

Pug

- var classes = ['foo', 'bar', 'baz']
a(class=classes)
|
|
//- the class attribute may also be repeated to merge arrays
a.bang(class=classes class=['bing'])

HTML

<a></a>
<a></a>

Констуркция Switch Case

Pug поддерживает switch case, которая представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.

Pug

- var friends = 10
case friends
  when 0
    p you have no friends
  when 1
    p you have a friend
  default
    p you have #{friends} friends

HTML

<p>you have 10 friends</p>

Циклы

Pug

ul
  each val, index in ['zero', 'one', 'two']
    li= index + ': ' + val

HTML

<ul>
  <li>0: zero</li>
  <li>1: one</li>
  <li>2: two</li>
</ul>

Pug

- var values = [];
ul
  each val in values
    li= val
  else
    li There are no values

HTML

<ul>
  <li>There are no values</li>
</ul>

Pug

- var n = 0;
ul
  while n < 4
    li= n++

HTML

<ul>
  <li>0</li>
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>

Вставка JavaScript кода

Pug поддерживает вставку частей JavaScript кода в шаблоны.

Не буфферизированный код начинается с символа -
Pug

- for (var x = 0; x < 3; x++)
  li item

HTML

<li>item</li>
<li>item</li>
<li>item</li>

Буфферизированный код начинается с символа =
Pug

p
  = 'This code is <escaped>!'

HTML

<p>This code is &lt;escaped&gt;!</p>

Комментарии

Существуют различные комментариев: те, которые будут отображаться после компиляции, и те, которые пропадут.

Pug

// just some paragraphs
//- will not output within markup
p foo
p bar

HTML

<!-- just some paragraphs-->
<p>foo</p>
<p>bar</p>

Pug

body
  //-
    Comments for your template writers.
    Use as much text as you want.
  //
    Comments for your HTML readers.
    Use as much text as you want.

HTML

<body>
  <!--Comments for your HTML readers.
Use as much text as you want.-->
</body>

Условия

Pug

- var user = { description: 'foo bar baz' }
- var authorised = false
#user
  if user.description
    h3.green Description
    p.description= user.description
  else if authorised
    h3.blue Description
    p.description.
      User has no description,
      why not add one...
  else
    h3.red Description
    p.description User has no description

HTML

<div>
  <h3>Description</h3>
  <p>foo bar baz</p>
</div>

Тип документа

Pug

HTML

Инклюды (Includes)

Pug имеет возможность вставки содержимого одного файла в другой файл Pug.

Pug

//- index.pug
doctype html
html
  head
    style
      include style.css
  body
    h2 My Site
    p Welcome to my super lame site.
    script
      include script.js

CSS

/* style.css */
h2 {
  color: red;
}

JavaScript

// script.js
console.log('You are awesome');

HTML

<!DOCTYPE html>
<html>
<head>
  <style>
    /* style.css */
    h2 {
      color: red;
    }
  </style>
</head>
<body>
  <h2>My Site</h2>
  <p>Welcome to my super lame site.</p>
  <script>
    // script.js
    console.log('You are awesome');
  </script>
</body>
</html>

Наследование шаблонов

Pug поддерживает наследование шаблонов. Наследование шаблонов работает через ключевые слова block и extend. В шаблоне block — обычный блок Pug, который может заменить дочерний шаблон. Этот процесс является рекурсивным.

Pug

//- base.pug
html
  head
    title My Site 
    block scripts
      script(src='/jquery.js')
  body
    block content
    block foot
      #footer
        p some footer content
        
//- home.pug
extends base.pug
- var title = 'Animals'
- var pets = ['cat', 'dog']
block content
  h2= title // - or #{title} without =
  each petName in pets
    p= petName // -or #{petName} without =

HTML

<!DOCTYPE html>
<html>
<head>
  <title>My site</title>
  <script src='/jquery.js'></script>
</head>
<body>
  <h2>Animals</h2>
  <p>cat</p>
  <p>dog</p>
  <div>
    <p>some footer content</p>
  </div>
</body>
</html>

Интерполяция переменных

Pug предоставляет различные способы вывода переменных.

Pug

- var title = "On Dogs: Man's Best Friend";
- var author = "enlore";
- var theGreat = "<span>escape!</span>";

h2= title
p Written with love by #{author}
p This will be safe: !{theGreat}

HTML

<h2>On Dogs: Man's Best Friend</h2>
<p>Written with love by enlore</p>
<p>This will be safe: <span>escape!</span></p>

Миксины

Поддержка миксинов позволяет создавать переиспользуемые блоки.

Pug

//- Declaration
mixin pet(name)
  li.pet= name
//- use
ul
  +pet('cat')
  +pet('dog')
  +pet('pig')

HTML

<ul>
  <li>cat</li>
  <li>dog</li>
  <li>pig</li>
</ul>

Pug

mixin article(title)
  .article
    .article-wrapper
      h2= title
      if block
        block
      else
        p No content provided

+article('Hello world')

+article('Hello world')
  p This is my
  p Amazing article

HTML

<div>
  <div>
    <h2>Hello world</h2>
    <p>No content provided</p>
  </div>
</div>
<div>
  <div>
    <h2>Hello world</h2>
    <p>This is my</p>
    <p>Amazing article</p>
  </div>
</div>

Pug

mixin link(href, name)
  //- attributes == {class: "btn"}
  a(class!=attributes.class href=href)= name

+link('/foo', 'foo')(class="btn")

HTML

<a href="/foo">foo</a>

Многострочный ассоциативный массив

Pug

-
  var priceItem = [
    {include: filterInc, parameter : "Розовый фильтр"},
    {include: smileInc, parameter : "Смайлики"},
    {include: commentInc, parameter : "Комментарии"}
  ]

HTML-комментариев

HTML-комментариев


Поскольку HTML официально является приложением SGML, синтаксис комментариев, используемый в документах HTML, фактически является синтаксисом комментариев SGML. К сожалению, сначала этот синтаксис немного неясен.

Определение комментария SGML в основном выглядит следующим образом:

Объявление комментария начинается с , за которым следует ноль или дополнительные комментарии, а затем > . Комментарий Начинается и заканчивается на "" и не содержит ни одного слова « - ».
Это означает, что все нижеприведенные комментарии являются допустимыми SGML:
Обратите внимание, что «пустой» тег комментария, состоящий всего из символов «», должен всегда иметь число, кратное четырем " - ", чтобы быть допустимым. (И да, также является официальным комментарием - это пустой комментарий).

Не все парсеры HTML понимают это правильно. Например, « hello -> "является официальным комментарием, что можно проверить с помощью правило выше. Это тег комментария с двумя комментариями; первый пуст а второй содержит "> привет". Если вы попробуете в браузере, вы обнаружите, что текст отображается на экране.

Для этого есть две возможные причины:

  1. Браузер видит символ ">" и думает, что комментарий заканчивается Там.
  2. Браузер видит текст « -> » и думает, что на этом комментарий заканчивается.
Также есть проблема с последовательностью « - ». У некоторых людей есть привычка использовать такие вещи, как " " как разделители в их источник. К сожалению, в большинстве случаев число « - » символы не делится на четыре. Это означает, что браузер, который пытается пробовать чтобы сделать это правильно, на самом деле получится неправильно здесь и на самом деле скрыть остальную часть документа.

По этой причине используйте следующее простое правило для составления действительных и принятые комментарии:

Комментарий HTML начинается с « », заканчивается на « -> » и не содержит « - » или «> » в любом месте комментарий.

HTML3.2Ссылка ~ ElementsbyFunction ~ Элементы в алфавитном порядке


Главная, Форумы, Справка, Инструменты, FAQs, Статьи, Дизайн, Ссылки

Copyright © 1996 - 2006. Все права защищены.

Насколько хороши ваши комментарии HTML и CSS?

Одна из вещей, которую вы обычно изучаете, когда начинаете изучать основы HTML или CSS, - это как писать комментарии в коде. Однако многие веб-разработчики до сих пор не используют комментарии в своих интересах.Мы можем широко использовать комментарии в HTML и CSS, но если они написаны правильно и намеренно, они действительно могут улучшить наш рабочий процесс.

Когда вы начинаете работать в новой компании, просмотр руководств или многих страниц документации может быть сложной задачей. Все компании разные - это означает, что кодовые базы, количество унаследованного кода, разработка фреймворков и количество модульного кода могут быть разными.

Нам часто говорят, что «хороший код не нуждается в комментариях», но обнаруживаете ли вы, что когда-нибудь ходите по кругу, полностью теряясь и ища документацию из-за отсутствия комментариев?

Два факта о коде Комментарии

  1. Комментарии игнорируются браузером.
  2. Комментарии удаляются во время минификации.

Основываясь на этих двух фактах, мы знаем, что комментарии на самом деле не предназначены для машин - они предназначены для чтения людьми.

Почему код комментариев важен

Когда вы работаете на фрилансе и работаете над сольным проектом, или когда вы единственный разработчик, который будет смотреть на ваш код, легко сделать это по-своему и делать комментарии по своему усмотрению или, возможно, не оставлять комментарии вообще. Но часто разработчики говорят, что они оглядываются на свой собственный код и задаются вопросом: «О чем я думал?» или изо всех сил пытаются понять этот код, который они написали.

Комментарии могут помочь сохранить последовательность. Если у вас есть последовательные, хорошо написанные комментарии к тому, что вы создаете, вы, скорее всего, будете каждый раз строить одно и то же.

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

Комментарии также могут помочь с исправлениями или быстрыми исправлениями. Комментарии могут помочь здесь тремя способами. Они могут помочь разработчикам понять код, если им нужно сделать быстрое исправление (особенно разработчики, не входящие в команду внешнего интерфейса, которые могут помочь), они могут помочь, отметив, где эти исправления необходимы, и могут показать, где быстрые исправления были применены и должны быть удалены в какой-то момент.

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

Комментарии способствуют более эффективному сотрудничеству. Если вы знаете все тонкости проекта или кодовой базы, у вас больше шансов выполнить отдельные части быстрее, что улучшит рабочие процессы.

Комментарии помогают многим людям. Они не только помогают себе, но и могут помочь другим людям в вашей команде.Прошли те времена, когда мы видели комментарии вроде DO NOT STEAL MY CODE в исходном коде людей. Раньше мы очень защищали наш код, не желая делиться нашими «секретами», но теперь мы живем в мире, где люди делятся кодом, вместе работают над проектами и сотрудничают. Когда речь заходит о веб-проектах, мы не стесняемся упоминать Гарри Робертса, Криса Койера или Джонатана Снука. С этим сдвигом в сотрудничестве мы также должны принять во внимание нашу практику комментирования и помочь нашим коллегам.

Чего следует избегать, когда дело доходит до комментариев

Не комментируйте абсолютно все

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

Возможно, именно здесь и возникла концепция «хороший код не требует комментариев».Не следует полностью избегать комментариев, их следует использовать только при необходимости.

Не говорите слишком многословно

Я лично виноват в том, что написал несколько довольно длинных комментариев в моем CSS, потому что мне нравится объяснять и документировать вещи. Однако вам не следует писать романы - длинные комментарии так же больно читать, как и писать. Если можете быть краткими, сделайте это. Иногда при именовании классов CSS дается следующий совет:

Делайте имена классов как можно короче, но настолько длинными, насколько это необходимо.

То же самое и с комментариями. Любые комментарии, которые вы пишете, полезно перечитывать, чтобы убедиться, что вы сами их понимаете. Представьте, что вы новичок в коде и читаете комментарии в качестве руководства.

Не тратьте слишком много времени на написание комментариев

Однажды я увидел файл в проекте, над которым я работал, в котором сверху была строка:

 
  

Не нужно тратить много времени на написание комментариев. Обычно достаточно нескольких слов.Если вы тратите слишком много времени, пытаясь прокомментировать свой код, чтобы убедиться, что кто-то другой его поймет, учтите, что части вашего кода могут действительно нуждаться в рефакторинге.

Некоторые примеры того, когда использовать комментарии

Объяснение назначения псевдоэлемента

В этом примере показан псевдоэлемент с заполненным значением содержимого .

  .post__comment-container :: after {
  цвет фона: # f9f9f9;
  граница: 1px solid #dedede;
  радиус границы: 0. 25em;
  цвет: # 888;
  content: «Автор сообщения»;
  дисплей: встроенный блок;
  размер шрифта: 0,7 бэр;
  маржа слева: 0,5 бэр;
  набивка: 0,2 бэр, 0,45 бэр;
  вертикальное выравнивание: по центру;
}  

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

 

.post__comment-container :: after {
  цвет фона: # f9f9f9;
  граница: 1px solid #dedede;
  радиус границы: 0.25em;
  цвет: # 888;
  content: «Автор сообщения»;
  дисплей: встроенный блок;
  размер шрифта: 0,7 бэр;
  маржа слева: 0,5 бэр;
  набивка: 0,2 бэр, 0,45 бэр;
  вертикальное выравнивание: по центру;
}  

Объяснение вложенного блока кода

Хотя использование семантических классов определенно помогает в максимально возможной степени, не всегда может быть понятно, почему блок CSS будет вложенным при использовании препроцессора:

  . c-segment-controls.is-active {
  .c-segment-controls__panel {
    цвет фона: #fafafa;
    граница: 1px solid #aaa;
    непрозрачность: 1;
    переход: непрозрачность 0.5s легкость;
  }
}  

Шести слов достаточно для комментария, чтобы указать, что делает этот блок кода, позволяя кому-то просмотреть документ и либо остановиться, либо пропустить вперед.

  .c-segment-controls.is-active {

  

  .c-segment-controls__panel {
    цвет фона: #fafafa;
    граница: 1px solid #aaa;
    непрозрачность: 1;
    переход: непрозрачность 0,5 с легкость;
  }
}  

Чтобы объяснить, почему может потребоваться код

! Important

Мы часто видим ! Important и предполагаем, что смотрим на устаревший код или грязный взлом:

 .c-accordion-container.ng-hide {
  отображение: блок! важно;
}  

При ближайшем рассмотрении мы просто переопределяем поведение фреймворка по умолчанию.

 

.c-accordion-container.ng-hide {
  отображение: блок! важно;
}  

Чтобы объяснить, почему блок кода был закомментирован, а не просто удален

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

 

  

Но если мы удалим его, кто-то вообще может даже не знать о его существовании.Было бы неплохо оставить это здесь:

 



  

Прочие виды документации

Документация действительно важна и не ограничивается только комментариями в коде. Когда мы закончим с задачей, мы можем получить ее на экспертную оценку.

Сообщения о фиксации

При использовании контроля версий (например, Git) мы можем взять то, что мы знаем о написании полезных комментариев в коде, и применить это к нашим сообщениям о фиксации.

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

  совершить 2faa2
    протереть
совершить 591ad
    пытался исправить какую-то странную коробку
совершить af830
    заставил треугольник работать
совершить bd02a
    рефакторинг
совершить bed4b
    исправление навигации
совершить 22fe0
    упс  

Лучше всего описать с помощью глагола задачу, выполненную в коммите.Различные второстепенные задачи будут распределены по разным коммитам.

  совершить 2faa2
    Добавление корпуса компонента формы
совершить 591ad
    Устранение проблемы с размером коробки
совершить af830
    Реализация треугольника для всплывающей подсказки
совершить bd02a
    Элемент списка рефакторинга для меньших окон просмотра
совершить bed4b
    Исправление проблемы с плавающей точкой навигации
совершить 22fe0
    Исправление опечаток в названиях классов  
У

Karma есть довольно простое руководство по написанию лучших коммитов, тогда как у Chris Beams есть очень подробное руководство. Дэвид Демари даже написал статью под названием «Искусство совершения». Сообщения коммитов определенно заслуживают внимания.

Запросы на извлечение

После того, как вы написали несколько коммитов, вы обычно создаете пул-реквест, чтобы один из ваших партнеров мог посмотреть. Я видел слишком много запросов на вытягивание, в которых очень мало деталей или вообще нет описания:

Когда вы пишете пул-реквест, вы обычно ожидаете, что кто-то проверит ваш код. Чтобы помочь этому человеку и облегчить процесс, вы должны написать описание того, что включает в себя запрос на вытягивание.Это мой мысленный список:

  • Номер билета, номер задачи или номер проблемы
  • Кратко опишите задачу
  • Укажите, какие типы файлов я изменил
  • Если это была ошибка, укажите, какой была ошибка до и после изменений.
  • Опишите ожидаемое поведение после изменений (должно ли оно быть таким же?)
  • Перечислите все шаги, которые необходимо предпринять для проверки изменений в браузере или в коде.
  • Обратите внимание на все, что следует игнорировать, например, на ошибку, исправленную в другой ветке
  • При необходимости добавьте скриншоты интерфейса

Этот пример относительно прост, и вам определенно не нужно включать все в приведенный выше список, если в этом нет необходимости:

Заключение

Хотя я привел несколько примеров того, куда следует включать комментарии и некоторые предложения о том, чего следует избегать, жестких правил о том, как форматировать комментарии в вашем коде, нет.Количество строк, слов или то, какую информацию включать, зависит от вас или может быть решено вами и вашими коллегами. Пока вы сохраняете единообразие формата, он будет поддерживать порядок и побуждать других людей, работающих с кодом, делать то же самое.

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

Соблюдаете ли вы какие-либо инструкции по комментированию кода? Или, может быть, вы работаете в компании, у которой есть другая, но эффективная документация?

HTML - Комментарии | html Учебник

Введение

Подобно другим языкам программирования, разметки и разметки, комментарии в HTML предоставляют другим разработчикам информацию, специфичную для разработки, не затрагивая пользовательский интерфейс.Однако, в отличие от других языков, комментарии HTML можно использовать для указания элементов HTML только для Internet Explorer. В этом разделе объясняется, как писать HTML-комментарии и их функциональные приложения.

Синтаксис

Все, что начинается с и заканчивается -> , является комментарием. Комментарии не могут содержать два соседних тире ( - ) и должны заканчиваться ровно двумя тире (т.е.е. ---> неверно).

Комментарии не видны на веб-странице и не могут быть стилизованы с помощью CSS. Они могут использоваться разработчиком страницы для создания заметок в HTML или для скрытия определенного содержимого во время разработки.

Для динамических или интерактивных страниц скрытие и отображение содержимого выполняется с помощью JavaScript и CSS, а не с помощью комментариев HTML.

JavaScript может использоваться для получения содержимого узлов комментариев HTML, и эти узлы могут динамически создаваться, добавляться и удаляться из документа, но это не повлияет на способ отображения страницы.

Поскольку комментарии HTML являются частью исходного кода страницы, они загружаются в браузер вместе с остальной частью страницы. Исходный код обычно можно просмотреть с помощью пункта меню веб-браузера «Просмотр исходного кода» или «Просмотр исходного кода страницы».

HTML-комментариев можно использовать для того, чтобы оставлять заметки для себя или других разработчиков о конкретном месте кода. Их можно инициировать с помощью и завершить с помощью -> , например:

  
  

Их можно встроить в другой контент:

   

Эта часть будет отображаться

.

Они также могут занимать несколько строк для предоставления дополнительной информации:

  
  

Однако они не могут появиться в другом теге HTML, например:

  

> Это не сработает

Это создает недопустимый HTML-код, так как весь блок

будет считаться одним начальным тегом h2 с некоторой другой недопустимой информацией, содержащейся в нем, за которой следует один > закрывающая скобка, которая ничего не делает.

Для совместимости с инструментами, которые пытаются анализировать HTML как XML или SGML, тело вашего комментария не должно содержать двух дефисов .

Условные комментарии можно использовать для настройки кода для разных версий Microsoft Internet Explorer. Например, могут быть предоставлены различные классы HTML, теги скриптов или таблицы стилей. Условные комментарии поддерживаются в Internet Explorer версий 5–9. Более старые и новые версии Internet Explorer, а также все браузеры, отличные от IE, считаются «нижнего уровня» и обрабатывают условные комментарии как обычные комментарии HTML.

Уровень скрыт ниже

Комментарии, скрытые на нижнем уровне, работают за счет инкапсуляции всего содержимого внутри того, что выглядит как обычный комментарий HTML. Только IE с 5 по 9 будет по-прежнему читать его как условный комментарий, и они будут соответственно скрывать или отображать контент. В других браузерах контент будет скрыт.

  
  Обнаружено в IE 5–9. Закомментировано и скрыто во всех других браузерах.



  Выявлено только в указанных версиях IE 5-9 (здесь IE менее 8).


  Выявлено ни в каких браузерах. Эквивалентен обычному комментарию HTML.



  

Раскрытие на нижнем уровне

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

   ->
  HTML внутри этого комментария отображается в IE 5-9 и во всех других браузерах.


 ->
  Это проявляется в указанных версиях IE 5-9 и во всех других браузерах.


 ->
  Это не раскрывается в IE 5-9.  Это все еще отображается в других браузерах.

  

Встроенные элементы отображения, обычно такие как span или a , будут включать до одного символа пробела до и после них в документе.Чтобы избежать очень длинных строк в разметке (которые трудно читать) и непреднамеренных пробелов (влияющих на форматирование), пробелы можно закомментировать.

  
 Надеюсь, после этого не будет лишних пробелов!   
  

Попробуйте без комментария между встроенными элементами, и между ними будет один пробел.Иногда желательно использовать пробел.

Пример кода:

  
 Надеюсь, после этого не будет лишних пробелов!   

Надеюсь, после этого не останется лишних пробелов!

Выход:



Почему следует избегать комментариев в формате HTML

Некоторые веб-разработчики предпочитают использовать комментарии в формате HTML документировать свой код, другим он не нравится и не используют. Какие реальные преимущества использования HTML-комментариев для веб-приложения на практике? Является стоит ли вообще использовать комментарии?

Что такое HTML-комментарий?

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


 

Почему разработчики используют комментарии HTML?

  • увеличивает читаемость кода
  • помогает другим людям понять ваш код
  • для отладки
  • обозначает закрывающий тег

Каковы недостатки HTML-комментариев?

  • ухудшает UX - даже не видно, Комментарии HTML являются частью дерева DOM и увеличивают количество DOM элементы.Это, в свою очередь, влияет на скорость и отзывчивость , также приводит к медленному CSS селекторы и манипуляции с DOM.
  • вредит SEO - широкое использование HTML комментарии увеличивают размер страницы в байтах, что влияет на время загрузки , которое является рейтингом фактор в поисковой выдаче. Кроме того, ухудшает соотношение текста к HTML .
  • потеря полосы пропускания - больше байтов ведет к большему трафику.
Заключение

В общем, комментарии HTML совершенно нормально. Но я видел сайты с комментариями HTML обозначает закрывающие теги, которые приводит к значительному увеличению размера страницы до 30%. Итак, если вы стремитесь иметь быстрое и отзывчивое веб-приложение и получить оценку "А" за веб-производительность , а также занять лучшее место в SERP - я настоятельно рекомендую держаться подальше от широкого использования комментариев.

См. Также

Поделиться этим постом

Поделитесь своими мыслями о HTML-комментариях оставив комментарий ниже.Было бы здорово поделиться этой статьей. Спасибо чтение.

Инструмент для извлечения комментариев HTML / Javascript / CSS - онлайн-инструмент

Поиск инструмента

HTML Комментарии

Инструмент для автоматического чтения и извлечения комментариев HTML из исходного кода или веб-страницы (включая комментарии Javascript / CSS)

Результаты

HTML-комментарии - dCode

Тег (ы): Информатика

Поделиться

dCode и другие

dCode является бесплатным, а его инструменты - ценная помощь в играх, математике, геокэшинге, головоломках и задачах, которые нужно решать каждый день!
Предложение? обратная связь? Жук ? идея ? Запись в dCode !

Инструмент для автоматического чтения и извлечения комментариев HTML из исходного кода или веб-страницы (включая комментарии Javascript / CSS)

Ответы на вопросы

Что такое комментарий HTML?

Комментарий в HTML - это сообщение, указанное между тегами , которое предназначено для читателя исходного кода HTML веб-страницы.

Пример: Комментарий HTML ->

Что такое комментарий Javascript?

Комментарий Javascript - это сообщение, указанное между символами '/ *' и '* /' или следующее за символами // в исходном коде на Javascript.

Пример: / * Комментарий Javascript 1 * /

Пример: // Комментарий Javascript 2

Что такое комментарий CSS?

Комментарий CSS - это сообщение, указанное между символами «/ *» и «* /» в исходном коде таблицы стилей.

Пример: / * Комментарий CSS * /

Зачем читать или извлекать комментарии?

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

Комментарии могут быть способом оставить скрытое сообщение, потому что они не видны на веб-странице, по крайней мере, не видны без доступа к исходному коду.

Задайте новый вопрос

Исходный код

dCode сохраняет за собой право собственности на исходный код онлайн-инструмента «Комментарии в формате HTML».За исключением явной лицензии с открытым исходным кодом (обозначенной CC / Creative Commons / free), любой алгоритм, апплет или фрагмент (преобразователь, решатель, шифрование / дешифрование, кодирование / декодирование, шифрование / дешифрование, переводчик) или любая функция (преобразование, решение, дешифрование / encrypt, decipher / cipher, decode / encode, translate), написанные на любом информатическом языке (PHP, Java, C #, Python, Javascript, Matlab и т. д.), доступ к данным, скриптам, копипасту или API не будет бесплатным , то же самое для комментариев HTML скачать для автономного использования на ПК, планшете, iPhone или Android!

Нужна помощь?

Пожалуйста, заходите в наше сообщество Discord, чтобы получить помощь!

Вопросы / комментарии

Сводка

Инструменты аналогичные

Поддержка

Форум / Справка

Ключевые слова

комментарий, исходный код, код, html, javascript, css

Ссылки


Источник: https: // www. dcode.fr/html-comments

© 2021 dCode - Идеальный «инструментарий» для решения любых игр / загадок / геокэшинга / CTF.

Как писать комментарии в формате HTML: Пошаговое руководство

Чтобы писать комментарии в формате HTML, поместите и ---> в любом конце комментария . Комментарии HTML - это примечания для упорядочивания HTML-кода, которые браузер игнорирует.


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

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

В этом руководстве мы собираемся изучить, как писать комментарии в HTML. Мы начнем с того, что посмотрим, почему комментарии используются в программировании.Затем мы рассмотрим два основных типа комментариев: однострочные и многострочные.

Почему разработчики пишут комментарии?

В HTML комментарии игнорируются браузером и удаляются при компиляции и минификации кода. Итак, зачем мы пишем комментарии?

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

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

Комментарии предоставляют разработчикам ряд преимуществ. Во-первых, как мы уже обсуждали, комментарии облегчают понимание вашего кода. Если вы пишете комментарии к своему коду, и вам, и другим людям, читающим ваш код, будет легче отслеживать, что происходит в определенных точках кода.

Во-вторых, комментарии позволяют разработчикам объяснить причины, по которым они принимают решения по программе. Это может быть полезно как в том случае, если программа перестает работать и требует исправления ошибки, так и когда разработчику требуется дополнительная ясность в отношении того, почему для решения проблемы был использован определенный подход. Комментарии также могут помочь ускорить процесс разработки, потому что вам будет легче понять ваш код.

HTML-комментарий

Комментарии в HTML-документах заключены в специальные стрелки и отделены от остальной части программы.Комментарии не отображаются в браузере. Вот синтаксис для основного тега комментария HTML:

  

Когда наша веб-страница открыта, этот код не будет отображаться на нашей веб-странице. Вместо этого код появится в нашем исходном коде, чтобы мы могли его прочитать.

Приведенный выше пример представляет собой однострочный комментарий, что означает, что его текст будет отображаться только в одной строке. Этот тип комментария полезен, если ваш комментарий будет коротким. Однако, если вы собираетесь написать длинный комментарий, вам нужно использовать многострочный комментарий.

Синтаксис многострочных комментариев такой же, как и однострочных комментариев, с той лишь разницей, что комментарий закрывается на новой строке. Вот синтаксис многострочного тега комментария:

  
---> 

Использование комментариев HTML

Теперь, когда вы знаете, как писать комментарии в HTML, вы можете задаться вопросом: когда мне следует добавлять комментарии в свой код? Хотя не существует строгих правил, когда следует использовать комментарии - и у каждого разработчика и команды есть свои предпочтения, - есть несколько моментов, которые следует учитывать.

Обычно должны использоваться комментарии:

  • Для описания предполагаемого результата кода.
  • Чтобы объяснить, почему был написан код.
  • Чтобы прояснить сложную строку или строки кода.

Конечно, есть и другие ситуации, когда вы можете захотеть добавить комментарии к своему коду, но это наиболее распространенные.

Кроме того, вы также можете использовать комментарии HTML, чтобы комментировать блоки тегов HTML. Это позволяет вам сохранить строку кода в вашей программе, но указать браузеру игнорировать ее при отображении веб-страницы HTML.

Комментирование кода вашей программы - обычное дело во время отладки. Это связано с тем, что во время отладки вам необходимо найти причину проблемы и реализовать решение, и может быть полезно указать программе игнорировать код без полного удаления кода из вашей программы. Вот пример использования комментариев HTML для комментирования кода:

 

Это пример абзаца.

Это еще один пример абзаца.

--->

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

HTML-комментарии, хотя и полезны, должны использоваться только тогда, когда они добавят ценности программе. Нет необходимости добавлять комментарии для объяснения каждой функции в программе или для подробного объяснения тем. Вот несколько советов, которые следует учитывать при написании комментариев в формате HTML:

  • Не переформулируйте существующий код. Комментарии предназначены для объяснения ваших намерений или логики программы. Вы не должны использовать комментарии, чтобы указать на английском, что уже написано в коде.
  • Не пишите подробных комментариев.Разработчики часто склонны писать длинные комментарии, объясняющие сложные процедуры. Однако, хотя длинные комментарии иногда полезны, вы должны использовать их экономно. Вместо этого, если есть функция, которую нужно подробно объяснить, вы можете создать запись в документации.
  • Не все объясняйте. Комментарии используются для разъяснения программы, и их слишком много может отвлекать от основного кода. Если что-то очевидно, комментарий не нужен.

Заключение

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

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

Теперь вы знаете, как писать комментарии в HTML как эксперт!

Скрытие / отображение элементов с помощью комментариев HTML - Центр знаний

Комментирование элементов полезно, когда вы не хотите что-то полностью удалять.Использование комментариев HTML позволит вам добавлять или удалять функции. Преимущество использования комментариев состоит в том, что вы можете раскомментировать HTML, чтобы вернуть функцию.

Вы войдете в HTML-редактор вашей темы любой страницы и просто воспользуетесь следующим:

Например, на странице сведений о продукте код слияния $$ CAPTION $$ закомментирован. Это скрывает его на странице, но вы можете раскомментировать его, чтобы использовать функцию на сайте.

Устранение неполадок путем удаления комментариев

Не можете найти то, что ищете, или настройки позволяют отображать это, а оно не отображается? Одна вещь, на которую следует обратить внимание, - это редактор HTML в теме, вы можете узнать, был ли этот элемент закомментирован или нет.

Например, миниатюры категорий в нашей теме не отображаются.

Итак, чтобы еще раз проверить, мы перейдем к Темам> Редактировать тему> [Активная тема]

Затем Страницы> Категория> Редактор HTML .

Отсюда мы видим, что эскизы не отображаются, потому что они были закомментированы.

Мы удалили теги и теперь они отображаются!

Запрещение рендеринга комментариев на странице

Если вы не хотите, чтобы ваши комментарии сами отображались на странице, вы можете создать комментарий в следующем формате: '[ac]' является специальным для AmeriCommerce синтаксис, который вообще остановит отображение комментария на этой странице.

Дополнительная полезная помощь:
Интернет-магазины AmeriCommerce Справочные статьи по тематике и дизайну сайтов
Сообщество Интернет-магазинов AmeriCommerce

Советы и уловки с CSS на w3schools.com
Советы и уловки с HTML на w3schools.com

Примечание: Модификация темы включает в себя любое изменение значений по умолчанию в HTML или CSS любой темы или виджета.Служба поддержки может направить вас на нужную страницу, чтобы внести изменения или сбросить виджет, HTML или CSS страницы до значений по умолчанию. Это отменит любые настройки, которые могут быть на месте. Перед созданием или изменением темы с помощью HTML и CSS рекомендуется иметь под рукой резервную копию.

Хотя модификация темы выходит за рамки того, с чем разрешена поддержка, если вам нужна помощь с внесением изменений в тему, наш отдел внедрения готов внести эти модификации с почасовой оплатой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *