Любой начинающий (да и не только начинающий) программист в процессе создания собственных приложений в определённый момент приходит к решению использовать стороннюю библиотеку в своём проекте. Так как существует множество вариантов лицензирования исходного кода (да и у Apple есть собственное лицензионное соглашение в отношении AppStore), нужно знать, какую библиотеку разработчик может использовать без зазрения совести, а с какой могут возникнуть юридические проблемы. Чтобы с новым приложением не случилась история, подобная шумихе вокруг VLC, надо быть осторожным в выборе сторонних библиотек и разбираться в способах их лицензирования.
Примечание: в тексте я буду использовать жаргонизм «линковка», так как он уже является устоявшимся, хотя у него есть нормальный перевод на русский язык — «связывание».
GNU GPL v2 / v3 (GNU General Public License)
При использовании исходного кода, распространяемого под лицензией GPL, продукт, который использует этот код, также должен распространяться под этой лицензией. GPL даёт право использовать, распространять, модифицировать исходный код при условии, что модификации будут опубликованы под этой же лицензией. GPL запрещает ограничивать перечисленные в ней свободы, что приводит к конфликту с лицензионным соглашением Apple. Как раз из-за этого и разгорелся весь сыр-бор с VLC. Одним из ограничений, прямо противоречащих GPL, является «ограничение в пять устройств», известное всем пользователям гаджетов от Apple. Здесь можно прочитать комментарии по поводу VLC, GPL и AppStore от одного из юристов FSF (Free Software Foundation) и подробнее узнать, почему GPL и публикация в AppStore несовместимы.
В конечном итоге мы пришли к тому, что использовать в своих проектах сторонние библиотеки, распространяемые под лицензиями GPL v2 и GPL v3, мы не можем.
New BSD License
Эта лицензия — просто подарок для разработчика. Единственное, что от нас требуется при её использовании, это указать автора библиотеки, которую мы включили в свой проект, и включить в уведомление отказ от гарантий. Отказ от гарантий — это предупреждение о том, что программа распространяется «как есть» (по-английски это звучит как «as is»), и её создатель не несёт ответственности за различные убытки, понесённые в результате её использования.
Говоря простыми словами, мы включаем библиотеку в свой проект, добавляем в программу окошко «О программе» и пишем в нём полный текст Новой Лицензии BSD с указанием использованной библиотеки и её автора. Использовать код, распространяемый под лицензией BSD, можно в коммерческих и проприетарных продуктах.
Кстати говоря, тексты как старой, так и новой лицензий BSD можно посмотреть на любом устройстве под управлением iOS. Откройте настройки, перейдите в пункт Основные → Об устройстве → Копирайт и поищите слова BSD Kernel (здесь будет текст оригинальной лицензии BSD) и json-framework (здесь будет текст новой лицензии BSD).
Модификации исходного кода, распространяемого под новой лицензией BSD, публиковать необязательно (в отличие от GPL).
MIT License
Данная лицензия почти идентична новой лицензии BSD за единственным исключением: в ней отсутствует пункт, запрещающий «использование доброго имени держателя авторских прав в рекламе». В остальном она аналогична новой лицензии BSD.
Вывод — исходный код, распространяемый под данной лицензией, можно спокойно использовать в своих проектах, но нужно указывать в окошке «О программе» автора (или авторов) этого кода.
Модификации исходного кода, распространяемого под лицензией MIT, публиковать необязательно (в отличие от GPL).
LGPL (GNU Lesser General Public License)
Данная лицензия была разработана как нечто среднее между жёсткой GPL и мягкими лицензиями BSD и MIT. Она позволяет линковать объекты, созданные при компиляции кода, распространяемого под лицензией LGPL, с несвободными программами. В приложениях для iOS возможна только статическая линковка.
В отношении iOS ограничение этой лицензии состоит в том, что разработчик должен собрать статическую библиотеку и только затем включить её в свой проект. При этом все файлы, необходимые для связывания библиотеки с приложением, должны быть предоставлены в свободный доступ. Обязательным является указание автора (или авторов) такого кода и уведомление о том, что библиотека, используемая в приложении, распространяется на условиях лицензии LGPL.
Лицензия LGPL довольно запутана, поэтому не совсем понятно, можно ли использовать такой код в коммерческих и проприетарных продуктах. Автор библиотеки libsnd в вопросе о её использовании в iOS как раз ссылался на пункт о необходимых для связывания файлах. Авторы библиотеки ios-ftp-server в описании к проекту прямо указывают на возможность использования своего продукта в приложениях для iOS без необходимости распространения конечной программы под лицензией LGPL.
Если вы решите использовать код под лицензией LGPL в своём продукте, лучше предварительно проконсультироваться с юристом.
Общественное достояние (Public Domain)
Лучшая лицензия (точнее, отсутствие таковой). С кодом, распространяемым под этими условиями, можно делать что угодно. Примером может служить проект CocoaAsyncSocket.
Код, который отдан в общественное достояние, можно использовать в проектах любого типа, при этом не обязательно указывать его оригинальных авторов.
Довольно часто библиотеки с открытым исходным кодом имеют двойное лицензирование. В таком случае можно выбрать подходящую для себя систему лицензирования и следовать её условиям.
19 комментариев
Форум →Что то я не пойму зачем здесь это написали…
@Mike, Как уже когда-то говорили, «для 2% читателей iPhones.ru».
@Никита Дёнин, Спасибо. Предлагаю тогда такие статьи так и начинать: Для 2% читателей iPhones.ru – Сторонние библиотеки и свободные лицензии. А то я открыл, загрузил… а тут..(
ТАк а кто говорил что анлок вышел?
Хороший пример информативной а главное полезной статьи. Спасибо.
Автору спасибо за познавательную статью!
@COBECTb, Надеюсь, она пригодится читателям.
@Никита Дёнин, Да, да, даже очень.
Отличная статья, спасибо
То, что доктор прописал! Спасибо огромное!
Есть еще фреймворки с лицензией Apache, например Three20.
@Garfeild, Есть, но я уж не стал совсем заморачиваться.
@Garfeild, и мне интересно
@Никита Горяинов, было бы очень здорово, если бы на iphones сделали карму как на хабре и не было бы обсиралова залесского на целую страницу!
@ivansunset, Появилась бы карма, появились бы и кармадрочеры. Да и минусование “все туда и я с ними” тоже немного поднадоели… Карму не надо, а вот рейтинг комментариев – шикарно было бы.
Огромное спасибо автору! Молодец, так держать! :)
Одного только не понял. При чем тут ограничение эппл в 5 устройств и GPL на VLC?
На сколько я знаю есть ограничение в 5 компов с айтюнс на одном аккаунте. А разве есть ограничение на количество синхронизируемых айфонов, айподов и айпадов на один аккаунт пользователя?
@artbasil, Там по ссылке подробно всё расписано, юрист FSF объяснял, в чём именно там проблема.
@artbasil, +1
Действительно не оч понятно.
Пример: я открываю кабак в некой няшной стране и ору на весь мир, что, мол, “все бухло у меня ваще забесплатно!”. Но, например, виза в этот рай стоит нехреновых 1000 уе. Те кто внутри – пють и радаваются. Те кто снаружи – поднимают вой: “а как же так, а пачиму так дорага к вам заехать, да эта абман блин!!!111”
Так что ли?
И я одеваю воскресные красные штаны и иду к местным законотворцам качать права “а ннуна.. меняйте-ка все бырренька, шоб всем по визе дазатак!!!!”
Смахивает на “в чужой монастырь, да со своим уставом”. С хрена ли монастырь Эппла должны заботить уставы чьих-то лицензий?
Очень полезная статья! Огромное спасибо автору! Давно хотел в этом разобраться, но все руки не доходили до чтения полных документов, а здесь все сжато и понятно.
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Параметры iPhone по IMEI не совпадают с фактическими. Что делать?
Как в iOS 16 изменить виджет аккумулятора. Выбираем нужный гаджет для отображения
Почему iPhone греется возле кнопки Home
Как на iPhone защитить приватные вкладки браузера при помощи Face ID или Touch ID
Как сбросить контрольные вопросы Apple ID?
Как включить звуковой сигнал при включении и отключении iPhone
Как настроить смещение времени на Apple Watch
Как в MacBook с процессором M1/M2 переназначить кнопку F4 со Spotlight на LaunchPad