Лицензии ПО (MIT, GPL, Apache, CC)
| Тема | лицензирование программ и контента |
|---|---|
| Разрешительные | MIT, BSD, Apache 2.0, ISC |
| Копилефт | GPL, LGPL, AGPL, MPL 2.0 |
| Для контента | Creative Commons (CC BY, CC BY-SA, CC0), GFDL |
| Определения | Open Source Definition (OSI), Free Software Definition (FSF) |
| Идентификаторы | SPDX |
Лицензия на программное обеспечение — документ, в котором правообладатель определяет, что другим разрешено делать с программой или текстом: использовать, изменять, распространять и на каких условиях. Без лицензии действует авторское право по умолчанию, и опубликованный код формально нельзя ни копировать, ни менять. Открытые лицензии дают эти права всем, различаясь главным образом тем, требуют ли они сохранять открытость производных работ. Статья носит справочный характер и не является юридической консультацией.
Свободное и открытое ПО
Два близких определения задают рамки:
- Свободное ПО (Фонд свободного ПО, FSF, Ричард Столлман, 1980-е) — программа, дающая пользователю четыре свободы: запускать для любых целей, изучать и менять, распространять копии, распространять изменённые версии.[2]
- Открытое ПО (Open Source Initiative, OSI, 1998) — определение из десяти критериев, включая свободное распространение, доступность исходного кода и отсутствие дискриминации по сферам применения.[1]
Почти все популярные лицензии соответствуют обоим определениям. Лицензии, запрещающие коммерческое использование или конкурирующие облачные сервисы, к открытым не относятся, даже если исходный код опубликован.
Разрешительные лицензии
Разрешительные (пермиссивные) лицензии позволяют почти всё, включая включение кода в закрытые продукты, при условии сохранения уведомления об авторских правах и текста лицензии.
| Лицензия | Особенности | Примеры проектов |
|---|---|---|
| MIT | очень короткая, минимум условий | Node.js, React, Rails |
| BSD 2/3-Clause | как MIT; вариант 3-Clause запрещает использовать имя автора для рекламы | FreeBSD, многие научные библиотеки |
| Apache 2.0 | явная лицензия на патенты, прекращение прав при патентном иске, требование отмечать изменения и сохранять файл NOTICE[4] | Kubernetes, Android (большая часть), TensorFlow |
| ISC | эквивалент MIT в упрощённой формулировке | OpenBSD, npm-пакеты |
Копилефтные лицензии
Копилефт требует, чтобы производные работы распространялись на тех же условиях с открытым исходным кодом.
- GPL (GNU General Public License): версия 1 — 1989, версия 2 — 1991, версия 3 — 2007.[5] Распространяя программу, включающую GPL-код, нужно открыть исходники всей производной работы. Под GPLv2 выпускается ядро Linux.
- LGPL — «ослабленная» GPL для библиотек: их можно подключать из закрытых программ, но изменения самой библиотеки нужно открывать.
- AGPL — GPL с дополнительным условием: если изменённая программа доступна пользователям по сети (как веб-сервис), исходный код нужно предоставить и им.
- MPL 2.0 (Mozilla) — копилефт на уровне файлов: изменённые файлы остаются открытыми, а остальной код проекта может быть любым.
Совместимость
Код под разными лицензиями можно объединять не всегда. Разрешительный код (MIT, BSD) можно включать в GPL-проекты. Apache 2.0 совместима с GPLv3, но не с GPLv2 из-за патентных условий. Две разные копилефтные лицензии обычно несовместимы между собой.
Лицензии для документации и контента
Creative Commons (организация основана в 2001 году, первые лицензии — 2002) предлагает конструктор из условий:[6]
- BY — указывать автора;
- SA (ShareAlike) — производные работы под той же лицензией (копилефт для контента);
- NC — только некоммерческое использование;
- ND — без изменений.
Свободными считаются только CC BY, CC BY-SA и CC0 (отказ от прав, передача в общественное достояние). Под CC BY-SA публикуется Википедия, под CC BY-SA 2.5 — справочник MDN, под CC BY 4.0 — шпаргалки tldr-pages. Сама Creative Commons не рекомендует свои лицензии для программного кода.[7] Для документации также применяется GFDL (GNU Free Documentation License), например в ArchWiki.
Практика
- Указывайте лицензию в файле
LICENSEв корне репозитория и коротким идентификатором SPDX (MIT,Apache-2.0,GPL-3.0-or-later) в метаданных пакета, например в pyproject.toml.[3] - Используя чужой код или текст, сохраняйте уведомления об авторских правах и ссылку на оригинал — этого требует почти любая открытая лицензия.
- Подбирать лицензию для своего проекта помогает сайт choosealicense.com.[8]