Открытое ПО в мобильной разработке: разница между лицензиями MIT, Apache и GPL
MIT — самая популярная разрешительная лицензия на GitHub, и это не удивительно: она максимально простая и не создаёт барьеров для коммерческого использования.
Ратмир Чеботарев·Обновлено: 14 июля 2026 г.·14 мин

Многие мобильные разработчики именно так и живут: тянут npm install some-cool-lib, не глядя на LICENSE, и радостно пишут код дальше. А потом удивляются, когда юрист присылает письмо счастья, когда в релизном цикле всплывает внезапная претензия по атрибуции или когда выясняется, что библиотеку нельзя было просто так упаковать в закрытое приложение.
Лицензия — это не формальность и не строчка в README, которую лень прочитать. Это юридический контракт, написанный на юридическом языке, с последствиями в проде. Особенно в мобильной разработке, где над кодом стоит ещё и посредник в виде Apple или Google со своими правилами дистрибуции. Сравнение лицензий open source для мобильных приложений — не академическое упражнение, а вполне прикладная работа: какую зависимость можно брать в коммерческий продукт, какую нужно вынести за периметр, а какую лучше вообще не трогать без юриста.
Разберём три самые узнаваемые лицензии — MIT, Apache 2.0 и GPL — через призму мобильной практики: что они разрешают, где прячутся риски открытых лицензий для разработчика и почему выбор open source лицензии иногда важнее, чем выбор очередного state-management фреймворка.
MIT: минимализм без явного патентного гранта
MIT — это короткий текст, который можно прочитать за время кофе-брейка. Лицензия разрешительная, permissive, то есть максимально лояльная к тому, что ты делаешь с кодом: используй, модифицируй, продавай, встраивай куда угодно. Единственное встречное требование — сохрани уведомление об авторских правах и сам текст лицензии. Всё. Никаких условий про открытие исходников, никаких ограничений на коммерческое использование, никакой философской войны вокруг свободы ПО.
Для мобильного разработчика MIT выглядит почти идеальным вариантом. Захотел использовать чью-то утилиту в iOS-приложении — пожалуйста, только не выбрасывай LICENSE и copyright notice. Скомпилировал, залил в App Store, заработал денег — лицензия не против. Закрыл исходники своего приложения — лицензия не против. Продал приложение за приличные деньги — лицензия всё ещё не против.
Именно поэтому MIT так любят в npm-, Swift-, Kotlin- и Flutter-экосистемах. Она не пытается управлять твоей бизнес-моделью. Автор библиотеки как будто говорит: «Бери, только не делай вид, что написал это сам». Для небольших утилит, UI-компонентов, SDK-обвязок и внутренних инструментов это нормальная, взрослая договорённость.
Но в этой простоте есть неприятная пустота: MIT обычно не содержит явного патентного гранта. То есть тебе дали авторское разрешение на использование кода, но в тексте лицензии прямо не сказано, что правообладатель предоставляет ещё и лицензию на патенты, которые могут быть реализованы в этом коде. Это не значит, что каждый MIT-компонент — мина. В большинстве мобильных библиотек патентный риск невелик: форматирование дат, обёртка над API, простая анимация, сетевой клиент. Но когда речь идёт о коде вокруг медиакодеков, криптографии, распознавания, сжатия, платежей или низкоуровневых алгоритмов, вопрос уже не выглядит декоративным.
Разница между MIT и Apache 2.0 как раз здесь становится практической. MIT даёт очень широкое разрешение по авторским правам, но не проговаривает патентную часть так явно, как Apache 2.0. В спокойной среде это может никогда не всплыть. В корпоративном продукте, который проходит due diligence перед инвестраундом или покупкой, всплывает почти всегда: юристам нужно не «ну библиотека же open source», а понятный ответ, какие права компания получила и какие обязательства на себя взяла.
MIT — это контракт на доверии и минимуме формальностей. Удобно, быстро, почти без трения — но патентную часть он оставляет менее определённой, чем Apache 2.0.
Отсюда нормальная инженерная логика. Для прототипа, внутреннего инструмента, небольшой утилиты или приложения без патентно-чувствительной начинки MIT подходит отлично. Для энтерпрайз-продукта, SDK для клиентов или библиотеки, которую будут встраивать десятки команд, её минимализм уже приходится компенсировать процессом: инвентаризацией зависимостей, проверкой происхождения кода, юридическим ревью спорных компонентов.
Ещё один бытовой момент: MIT не требует открывать твой код, но и не мешает другим использовать открытый код по-своему. Если ты выпустил библиотеку под MIT, кто-то может форкнуть её, встроить в закрытый продукт или даже распространять свою модифицированную версию под более жёсткими условиями в той части, где это не нарушает исходную лицензию. Заставить тебя открыть собственный закрытый продукт такой форк сам по себе не может. Но ощущение «я отдал код в мир, а мир сделал с ним что хотел» — это не баг MIT, а её смысл.
Apache 2.0: патентная страховка и бюрократия
Apache 2.0 — это ответ на вопрос «а что, если кто-то всё-таки предъявит патент?». Лицензия включает явный патентный грант: контрибьюторы предоставляют право использовать патенты, которые необходимы для использования их вклада в код. Но с условием: если ты сам начинаешь патентную атаку против проекта или его участников по поводу этого кода, патентная лицензия для тебя прекращается. В мире IP это не романтика, а сдерживание.
Для мобильной разработки Apache 2.0 часто выглядит как более корпоративная версия MIT. Android, множество библиотек от Google и Apache Software Foundation, инфраструктурный код, SDK, инструменты сборки — значительная часть этого мира живёт под Apache 2.0. Причина понятна: крупные компании не любят неопределённость. Им нужно, чтобы open source можно было безопасно встраивать в коммерческие продукты, передавать клиентам, показывать аудиторам и не объяснять каждый раз, что «мы надеемся, патентов тут нет».
Но за патентный щит приходится платить дисциплиной. Apache 2.0 требует сохранить текст лицензии, уведомления об авторских правах, NOTICE-файлы там, где они есть, и явно отметить изменения в модифицированных файлах. Это уже не «положили один LICENSE в папку и забыли». Это процесс.
В мобильном приложении процесс быстро становится неприятно конкретным. У тебя есть зависимости из Gradle, Swift Package Manager, CocoaPods, бинарные фреймворки, транзитивные пакеты, куски JavaScript в React Native или Dart-пакеты во Flutter. У каждого — своя лицензия, свои copyright notice, иногда свой NOTICE. В какой-то момент экран «Open Source Licenses» в настройках приложения перестаёт быть красивой заботой о пользователе и становится юридическим артефактом, который должен собираться воспроизводимо.
В Android-экосистеме это частично автоматизируют Gradle-плагины для сбора лицензий. В iOS есть похожие инструменты вокруг CocoaPods и SPM. Но автоматизация не отменяет проверки. Она хорошо собирает очевидное и плохо отвечает на вопрос, что делать с бинарным SDK, где лицензия лежит в PDF в архиве, а NOTICE не подтянулся. Она не знает, кто руками скопировал файл из GitHub Gist. Она не угадывает, что разработчик заменил исходник и забыл отметить изменение.
Совместимость — отдельная песня. Apache 2.0 совместима с GPLv3: код под Apache 2.0 можно включить в GPLv3-проект. С GPLv2 без специальной оговорки всё сложнее: патентные положения Apache 2.0 не ложатся на старую конструкцию GPLv2. Поэтому смесь лицензий в одном мобильном продукте — это не «ну оно же собирается». Собирается многое. Юридически распространяется не всё.
Если упростить до инженерной таблицы, картина такая:
| Параметр | MIT | Apache 2.0 | GPL |
|---|---|---|---|
| Тип | Разрешительная | Разрешительная с явным патентным грантом | Копилефт |
| Коммерческое использование | Разрешено | Разрешено | Разрешено, но с обязательствами по исходникам |
| Открытие кода приложения | Не требуется | Не требуется | Обычно требуется для производной работы |
| Патентная часть | Не прописана явно | Прописана явно | Зависит от версии, в GPLv3 сильнее |
| Атрибуция | Минимальная | LICENSE, NOTICE, отметки изменений | Текст лицензии, исходники, права получателей |
| Типичная боль в мобильной разработке | Забыли положить лицензию, недооценили патенты | Не собрали NOTICE, потеряли атрибуцию | Конфликт с закрытой дистрибуцией и сторами |
Apache 2.0 — это MIT с юридическим щитом и заметно более требовательной бухгалтерией. Не страшно, если процесс есть. Больно, если его вспоминают за ночь до релиза.
Для библиотеки, SDK или мобильной платформенной обвязки Apache 2.0 часто выглядит здравым выбором. Она не заставляет пользователей открывать свои приложения, но даёт им больше уверенности в патентной части. Для продуктовой команды это особенно важно, если код будут встраивать партнёры: им нужно не только «можно использовать», но и «можно объяснить своему юротделу, почему можно».
Ловушка копилефта: почему GPL пугает мобильных разработчиков
GPL — это уже другая философия. Тут нет permissive-подхода в стиле «делай что хочешь, только сохрани notice». GPL говорит: если ты распространяешь производную работу на основе GPL-кода, получатель должен получить те же свободы — доступ к исходникам, право модифицировать, право распространять дальше. Это называется strong copyleft. В разговорной среде его часто называют «вирусным», хотя слово грубоватое: GPL ничего не «заражает» магически, она просто привязывает условия распространения производной работы к свободе исходного кода.
Использование GPL в коммерческих приложениях — тема, вокруг которой в мобильном комьюнити ломают копья давно. Страх понятен: большинство коммерческих мобильных продуктов живут за счёт закрытого кода. Это интеллектуальная собственность, конкурентное преимущество, иногда главный актив компании. GPL не запрещает зарабатывать деньги, но требует не закрывать производную работу от пользователей. Для венчурного стартапа, банка, маркетплейса или SaaS-компании это часто неприемлемо.
Здесь важно не путать три вещи.
Первая: GPL не запрещает коммерцию. GPL-софт можно продавать, можно брать деньги за поддержку, сборку, хостинг, бренд, интеграцию. Свободное ПО — не синоним бесплатного.
Вторая: GPL не требует открывать весь код компании просто потому, что где-то в инфраструктуре используется GPL-инструмент. Если сборочный сервер запускает GPL-утилиту, это не делает приложение GPL-продуктом. Если разработчик пользуется GPL-редактором, исходники проекта не становятся открытыми.
Третья: риск появляется там, где GPL-код включается в распространяемый продукт или образует с ним производную работу. В мобильной разработке это обычно библиотека, нативный модуль, статически слинкованный компонент, медиадвижок, криптографическая реализация, офлайн-движок или кусок SDK, который уезжает пользователю внутри приложения.
В GPLv2 и GPLv3 по-разному устроены детали, но общий принцип один: нельзя добавить поверх GPL ограничения, которые отнимают у пользователя права, выданные лицензией. GPLv3 дополнительно усилила патентную часть и ввела требования вокруг installation information — информации, необходимой для установки модифицированной версии на пользовательское устройство в определённых сценариях. Для мобильных платформ это особенно болезненно: экосистема может быть технически и организационно закрыта, подпись приложений контролируется платформой, а пользователь не всегда может заменить компонент так, как GPL предполагает в своём идеальном мире.
Риски открытых лицензий для разработчика в случае с GPL редко проявляются в момент pod install или gradle sync. Проблемы начинаются позже: перед релизом в enterprise-канал, при продаже компании, при аудите инвестора, при публикации исходников части проекта, при жалобе правообладателя. Самый плохой сценарий — обнаружить GPL-компонент не в прототипе, а в приложении с большой пользовательской базой, где его нельзя быстро заменить без переписывания существенного слоя.
GPL — это не запрет бизнеса. Это запрет закрыть от пользователей то, что по условиям лицензии должно остаться свободным.
Именно поэтому в мобильной разработке GPL чаще живёт либо в полностью открытых приложениях, либо в проектах, где правообладатель контролирует весь стек, либо в схемах двойного лицензирования. В закрытый коммерческий продукт её тянут только при ясном понимании последствий. «Библиотека хорошая, альтернатив нет, потом разберёмся» — плохой план. Потом обычно дороже.
Конфликт GPL и App Store: урок VLC и GNU Go
В 2010 году Apple удалила GNU Go из App Store. В 2011 году похожая история произошла с VLC. В обоих случаях в центре конфликта были претензии вокруг GPL и условий распространения через App Store. Важно проговорить аккуратно: это были не мистические автоматические блокировки «за GPL», а конкретные ситуации, где правообладатели или участники проекта указывали на несовместимость условий лицензии с правилами платформенной дистрибуции.
Суть конфликта неприятная, но логичная. App Store накладывает собственные правила: подпись, контроль распространения, условия использования магазина, ограничения платформы, DRM-механизмы в некоторых сценариях. GPL, со своей стороны, запрещает добавлять ограничения на права, которые она предоставляет получателям программы. Когда эти два набора правил сталкиваются, получается юридическая зона турбулентности.
История с VLC показательна. VLC — известный медиаплеер с открытым исходным кодом, исторически связанный с GPL-лицензированием. Когда iOS-версия попала в App Store, участники проекта обратили внимание на конфликт между правилами магазина и условиями GPL. В результате приложение было удалено. Позже VLC для iOS вернулся уже в другой организационной и лицензионной конфигурации, при участии правообладателей, которые могли управлять условиями публикации гораздо осознаннее.
GNU Go — похожий урок, только менее медийный. Программа под GPL оказалась в App Store, а затем возникла претензия, что дистрибуция через магазин добавляет ограничения, несовместимые с лицензией. Apple в таких ситуациях не становится арбитром идеологии свободного ПО. Платформа реагирует на жалобу, свои правила и риски. Итог для бизнеса может быть неприятным: приложение могут снять, релиз могут задержать, аккаунт может получить претензию, команда может срочно искать замену компоненту. Но это не автоматическая судьба любого GPL-кода в App Store, а зависящий от обстоятельств риск.
Вот здесь часто начинается путаница. В App Store существуют приложения с открытым исходным кодом, есть проекты, связанные с GPL-семейством лицензий, есть продукты, где код открыт, а публикация контролируется правообладателем. Это возможно, когда у команды есть права, когда лицензия применена осознанно, когда схема дистрибуции не конфликтует с обязательствами или когда используется другая лицензия для мобильной поставки. Проблема не в слове GPL как таковом. Проблема в том, что закрытая платформенная дистрибуция плохо сочетается с лицензией, запрещающей дополнительные ограничения для получателя.
Для iOS-разработчика практический вывод простой: GPL-компонент в приложении, которое пойдёт в App Store, нельзя считать обычной зависимостью. Его нужно вынести на отдельный юридический разбор. Кто правообладатель? Какая версия GPL? Есть ли коммерческая лицензия? Как компонент линковался? Распространяется ли он вместе с приложением? Можно ли заменить его альтернативой под MIT, BSD или Apache 2.0? Что будет, если поступит жалоба?
GPL встречает iOS не на уровне компилятора, а на уровне правил распространения. Код может собраться идеально — и всё равно оказаться проблемой для публикации.
На Android ситуация обычно гибче: есть альтернативные магазины, sideloading, больше вариантов распространения. Но это не отменяет GPL. Если ты распространяешь приложение с GPL-компонентом, обязательства по лицензии никуда не исчезают. Просто конфликт с единственным закрытым каналом дистрибуции не так остро упирается в одну кнопку «удалить из магазина».
Стратегия выбора: двойное лицензирование и взрослая гигиена зависимостей
Выбор open source лицензии для мобильного проекта — не идеологический жест, а инженерное решение с юридическим хвостом. Если проект маленький, библиотека вспомогательная, патентная поверхность минимальная, а команда хочет максимальной простоты — MIT нормален. Если код будут встраивать другие компании, если важна патентная определённость, если продукт идёт в enterprise — Apache 2.0 часто выглядит сильнее. Если хочется сохранить код свободным и заставить производные работы оставаться свободными — GPL честно делает именно это, но для коммерческой мобильной разработки цена такого выбора может быть высокой.
Несколько практических ориентиров без религиозного дыма.
MIT берём, когда пишем прототип, MVP, небольшую библиотеку, внутренний инструмент или компонент, который хочется максимально легко распространять. Она хороша там, где важны скорость, низкий порог входа и минимум бюрократии. Но если код касается патентно-чувствительной области, одной простоты MIT мало: нужен хотя бы базовый аудит рисков.
Apache 2.0 берём, когда пишем SDK, инфраструктурную библиотеку, платформенный компонент, open source-обвязку для коммерческого продукта или код, который будут использовать корпоративные клиенты. Патентный грант и понятные правила атрибуции делают её удобной для организаций. Минус — нужно реально вести NOTICE, а не вспоминать о нём в день релиза.
GPL берём, когда открытость производных работ — часть замысла. Например, если проект живёт вокруг сообщества, форков, публичных модификаций и принципиальной защиты свободы кода. В закрытое мобильное приложение GPL-зависимость имеет смысл тянуть только после юридического согласования или при наличии альтернативной коммерческой лицензии.
Двойное лицензирование как раз и закрывает часть боли. Один и тот же код может распространяться под GPL для open source-проектов и под коммерческой лицензией для компаний, которые хотят встроить его в закрытый продукт. Правообладатель продаёт отдельное разрешение: ты платишь деньги и получаешь право использовать компонент без обязанности открывать своё приложение под GPL. Для мобильного разработчика это часто самый чистый способ взять сильный GPL-компонент и не превратить публикацию в сторе в минное поле.
Классическая логика такая: если компонент критически важен и альтернатив нет, сначала проверяем, кто владеет правами и предлагает ли он коммерческую лицензию. Если предлагает — сравниваем цену лицензии со стоимостью переписывания и риском релизных проблем. В реальном бизнесе коммерческая лицензия часто выглядит дорогой только до первого письма от юристов или до первого сорванного релиза.
LGPL — отдельная серая зона, которую нельзя автоматически считать «безопасной GPL». Она слабее: позволяет линковать LGPL-библиотеку с проприетарным кодом без открытия всего проекта при выполнении условий, связанных с возможностью заменить или модифицировать библиотеку. На десктопе это часто решается динамической линковкой. На мобильных платформах всё сложнее: статическая линковка, подпись приложения, ограничения замены бинарников, особенности iOS-фреймворков. Поэтому LGPL в мобильном приложении — не зелёный свет, а повод читать лицензию внимательнее.
Нормальная гигиена зависимостей выглядит скучно, зато спасает деньги:
1. Фиксировать лицензии всех прямых и транзитивных зависимостей, а не только тех, которые команда помнит по имени.
2. Разделять dev-инструменты и код, который реально попадает в поставку приложения.
3. Проверять бинарные SDK отдельно: у них часто нет прозрачной истории исходников, зато есть собственные лицензионные условия.
4. Автоматически собирать страницу open source notices в приложении, но вручную ревьюить результат перед релизом.
5. Блокировать GPL/LGPL-зависимости в закрытых мобильных продуктах до отдельного согласования.
6. Хранить тексты лицензий и NOTICE в репозитории или сборочном артефакте так, чтобы через год можно было восстановить, на каких условиях вышла конкретная версия приложения.
Это не превращает разработчика в юриста. Это просто такая же инженерная дисциплина, как pinning версий, reproducible build и контроль секретов. Никто не хочет обнаружить hardcoded token в проде. С лицензиями ровно та же логика: проблема может долго не проявляться, но когда проявится, чинить её в релизной ветке поздно.
Практический вердикт без фанфар: большинство коммерческих мобильных проектов выбирают между MIT и Apache 2.0. MIT — когда нужна простота и низкое трение. Apache 2.0 — когда нужна более внятная патентная рамка и корпоративная пригодность. GPL — не «плохая» лицензия, а лицензия с сильной позицией: если берёшь свободный код и распространяешь производную работу, свобода должна пойти дальше. Для одних продуктов это честная основа. Для других — юридическая несовместимость с бизнес-моделью.
Поэтому лучший момент прочитать LICENSE — не перед апелляцией в сторе и не во время due diligence, а до того, как зависимость стала частью архитектуры. Открытое ПО экономит месяцы разработки, но не отменяет ответственности. Оно просто меняет цену ошибки: иногда это забытый notice, иногда переписывание модуля, а иногда разговор с юристами, который никто не планировал в спринте.