Открытый код: свобода, ответственность и выбор
Открытый код
Открытое программное обеспечение начинается с простой мысли: программу, на которую вы опираетесь в работе, можно изучить, использовать, изменить и передать дальше. Границы этой возможности определяет лицензия, приложенная к программе.
Почему это важно
Влияние этой мысли не ограничивается программированием. Она напрямую связана с тем, у кого остаётся технология, как распространяются знания, приносит ли улучшение пользу другим и какие варианты остаются, когда обстоятельства меняются.
Открытый код — это не обещание, что всё бесплатно, и не обещание, что сопровождение не потребует усилий. Сознательно защищают здесь другое — определённые свободы. Благодаря им можно не просто доверять чужой работе целиком, а строить поверх уже сделанного.
Быстрее всего понять, почему это важно, если разобраться, что такое открытый код, как он развивался, какая ответственность с ним связана и почему люди до сих пор публикуют свою работу.
Что такое открытый код
Исходный код — это программа в форме, понятной человеку: указания, написанные разработчиком на языке программирования, до того как они превратились в форму, которую исполняет машина. Доступность исходного кода отделяет программу, которую можно только использовать, от программы, которую можно исследовать. Если читаемой формы нет, остаётся наблюдать за поведением. Если она есть, можно — самому или через того, кому вы доверили работу, — выяснить, почему программа ведёт себя именно так, что она отправляет по сети, где находится ошибка и куда вносить изменения.
Открытый код — это не описание того, как программу создавали, и не состояние, в котором код случайно оказался видимым. Это набор разрешений, которые лицензия предоставляет программе, и у этих разрешений есть широко принятое определение.
Определение поддерживает Open Source Initiative и использует его, чтобы решать, какие лицензии считать открытыми. Оно требует, например, следующего. Программу можно свободно распространять дальше. Исходный код доступен в той форме, которой пользуется программист, вносящий изменения. Можно создавать и распространять изменённые и производные версии. Лицензия не ограничивает, кто и для чего применяет программу. И в ней нет зависимости от конкретной технологии или интерфейса. Это определение сложилось на основе правил Debian, и именно поэтому «открытый код» — не приятное по звучанию слово, а слово с установленным значением.
Четыре свободы на повседневном языке
Традиция свободного программного обеспечения формулирует ту же мысль конкретнее — как четыре свободы, которые должна защищать лицензия.
| Свобода | Что это значит на практике |
|---|---|
| Запускать программу как угодно и для любых целей | Программу можно использовать для своей работы, своей компании, своей организации. Область применения не ограничивает никто. |
| Изучать, как программа устроена, и изменять её | Можно читать исходный код, понимать, что он делает, и переделывать его под свои задачи. Это и обеспечивает доступ к исходному коду. |
| Передавать копии дальше | Программу можно передать коллеге, клиенту, любому, кому она пригодится, на условиях лицензии. |
| Распространять изменённые версии | Если вы что-то улучшили, своей версией можно поделиться. То, что получили вы, получат и другие. |
Свобода и бесплатность — разные вещи
Одно и то же слово в разных языках означает и свободу, и нулевую цену, и это порождает путаницу. Свобода в свободном программном обеспечении — это отсутствие ограничений, а не отсутствие цены. Иногда они совпадают: Apache-2.0 не требует вознаграждения, поэтому значительную часть открытого ПО можно получить бесплатно. Но это разные вопросы.
Чтобы открытая программа работала, нужны время, навыки и деньги: подготовить хостинг, устанавливать обновления, реагировать на проблемы безопасности, отвечать на вопросы пользователей. Лицензия не требует платы — она требует работы. Если разделять эти вещи, выбор программы становится осознанным.
Разрешительные лицензии и копилефт
Разрешительные лицензии, такие как Apache-2.0 и MIT, дают широкие разрешения при небольшом числе условий. Программу можно использовать, изменять и распространять дальше, в том числе внутри платных сервисов. Условие обычно одно: сохранять полученные уведомления об авторских правах и об авторстве.
Копилефт-лицензии, например GNU GPL, дают те же свободы, но добавляют условие к распространению. Когда вы передаёте копии или изменённые версии, результат тоже должен распространяться под лицензией того же характера. Так свобода не теряется у следующего получателя.
Это не разница между «мягким» и «строгим», а разница в том, что автор хочет защитить. Обе разновидности признаны лицензиями открытого кода, и обе связывают обязательства с распространением. Если вы пользуетесь программой только у себя, обязательств не возникает.
Разрешение и реальная возможность
Лицензия даёт разрешение, но не возможность. Сайт можно перенести к другому подрядчику, однако если у вас нет доступа к репозиторию, вы не знаете, какие настройки используются, и не понимаете порядок развёртывания, перенести его на практике не получится.
Копии файлов мало что дают, когда домен, аккаунт хостинга и настройки сборки оформлены на чужое имя. Поэтому утверждение «сайт можно перенести» не принимают на веру, а проверяют. Foundation разделяет эти две вещи: разрешение даёт лицензия и даёт его навсегда, а реальную возможность обеспечивают репозиторий, настройки, ресурсы и документация по эксплуатации.
Как программы стали общим достоянием
Обмен программами старше интернета. В 1950-х и 1960-х годах программное обеспечение росло рядом с исследовательскими центрами и большими машинами, а пользователи обменивались кодом через группы пользователей. Тогда программу часто считали частью оборудования, а не отдельным товаром.
Положение изменилось, когда программы начали продавать отдельно от оборудования, а исходный код стал попадать к пользователям реже. В конце 1970-х и в 1980-х стало юридически ясно, что программа — объект авторского права, и обычной практикой стало распространение по лицензионному договору. Открытое письмо Билла Гейтса 1976 года о копировании BASIC — ранний пример того, как привычный обмен начали считать копированием без разрешения. Обмениваться программами можно было и дальше, но теперь для этого требовалось разрешение. Сегодняшний открытый код — ответ на эту ситуацию: не попытка вернуться в прошлое, а способ сделать свободу делиться законной и надёжной.
В 1983 году Ричард Столлман объявил проект GNU — попытку создать полную операционную систему, которую можно свободно использовать, изучать, изменять и распространять. В 1985 году появился Free Software Foundation и манифест GNU, где причина объясняется не техническими соображениями, а свободами пользователя. Проект дал Emacs, компилятор GCC, отладчик, библиотеки и инструменты командной строки. Но сильнее всего повлияла лицензия: GNU General Public License, первая версия которой вышла в 1989 году, а вторая — в 1991-м, использует авторское право, чтобы свобода сохранялась. Пользоваться и изменять может любой, но распространяемая изменённая версия должна оставаться под той же лицензией. Этот подход назвали копилефтом: он превратил свободу из призыва в юридическое условие.
Linux и совместная разработка
В 1991 году Линус Торвальдс опубликовал ядро, написанное ради интереса, и предложил другим присылать замечания и улучшения. Вместе с уже существовавшими инструментами GNU оно составило полную систему — GNU/Linux.
Важен здесь не только результат, но и способ работы. Разработка шла открыто в интернете: изменения присылали в списки рассылки, обсуждали публично, решения о включении тоже принимали открыто. Этот способ позже закрепился и в повседневных инструментах: систему контроля версий Git в 2005 году написали, чтобы управлять разработкой ядра.
То, что так можно построить серьёзную основу, доказано практикой. Системы семейства Linux работают на значительной части серверов мира, лежат в основе мобильных телефонов и используются на персональных компьютерах. Благодаря свободе изменять и распространять эту работу можно изучить, доработать и продолжить даже тогда, когда человек, который её начал, больше этого не делает.
1998 год и два течения
В январе 1998 года Netscape объявила, что откроет код браузера Navigator, и в марте того же года код был опубликован. Так начался проект Mozilla; это событие привлекло к открытой разработке внимание компаний.
В феврале 1998 года люди, давно связанные со свободным программным обеспечением, собрались в Пало-Альто. Там и выбрали новое название — «открытый код» (open source): те же ценности нужно было передать без заблуждения о бесплатности. Тогда же появилась Open Source Initiative, а её определение сложилось на основе правил Debian, существовавших с 1997 года. Зачем понадобилось новое название? У открытой разработки есть практические достоинства, понятные и компании, которую не интересуют споры об этике, и в 1998 году требовалось сказать именно об этом.
Свободное программное обеспечение и открытый код часто считают одним и тем же, и в повседневной практике это почти так: у них общие лицензии и общий результат. Различие в акценте. В традиции свободного ПО свобода пользователя — цель сама по себе и вопрос этики. Сторона открытого кода делает акцент на практической выгоде: открытая разработка даёт более качественные и более надёжные программы, а название помогает говорить об этом на работе. Apache-2.0 и GNU GPL признают обе стороны. Спор реален для тех, у кого есть позиция, но тому, кто пользуется программой, важно помнить не о споре, а о практическом следствии: что можно и чего нельзя, определяет не название, а лицензия.
Зачем люди и организации создают общее программное обеспечение
Открытые проекты обычно начинаются с небольшого личного события: человек сталкивается с проблемой, пишет решение на месте и обнаруживает, что с той же проблемой встречаются другие. Называют и другие причины — желание учиться, сделать свою работу полезной, получить оценку коллег.
У организаций причины практичнее. Библиотеку, которой пользуются многие, дешевле сопровождать вместе, чем создавать заново каждой компании. К этому добавляются привлечение сильных специалистов, влияние на направление стандарта, на который они опираются, и довод о программном обеспечении, созданном за общественный счёт: оно должно быть доступным.
Есть и более широкая причина. Опора, зависящая от одной компании, нездорова. Если код и лицензия открыты, работу можно продолжить, даже когда обстоятельства изменились.
Сопровождение: работа и стоимость
Время, потраченное на первую версию кода, — лишь малая часть работы. Основное время уходит на чтение сообщений об ошибках, ответы пользователям, обновление зависимостей, реакцию на проблемы безопасности, переписывание документации, подготовку выпусков и проверку того, что обновление ничего не сломало.
Нередко проект, важный для многих, держится на очень небольшом числе людей. Зависимость от одного человека — реальный риск: он останавливается, и работа останавливается.
Поэтому простая на вид помощь даёт заметный эффект. Понятный отчёт сокращает путь до исправления. Ответ другому пользователю уменьшает повторение одних и тех же вопросов. Финансовая поддержка позволяет выделить на эту работу определённое время, а не остатки между другими делами.
Ответственность, ограничения и участие
Лицензия открытого кода не даёт гарантии качества. Apache-2.0, как и другие разрешительные лицензии, указывает: программа предоставляется «как есть», без каких-либо гарантий. Она не обязывает сопровождающих исправлять конкретную ошибку, отвечать на вопросы или оказывать коммерческую поддержку.
Взамен вы получаете свободу действовать самостоятельно: исправить самому, поручить другому разработчику, заменить то, что не подходит. Foundation устроен по тому же принципу, поэтому эта страница не обещает услуг, которых нет.
Со свободой связана ответственность. Какую версию использовать, когда обновляться, как проверять резервные копии — решаете вы. Понятные варианты полезнее обещаний, которые нельзя выполнить.
Участвовать можно по-разному, и разработчиком для этого быть не обязательно. Полезны сообщения об ошибках, предложения по улучшению, правки и переводы документации, помощь другим в открытых обсуждениях, предоставление кода и тестов. Финансовая поддержка — ещё одна возможность и не единственная; подробнее об этом говорится на страницах об участии и о поддержке проекта.
Почему Apache-2.0 и что это даёт сайту
Apache-2.0 — разрешительная лицензия, хорошо известная компаниям, и она не требует публиковать то, что создали вы. Она даёт всемирное, безвозмездное, неисключительное и безотзывное разрешение по авторскому праву: полученные права нельзя отозвать задним числом. Кроме того, в ней прямо выражено патентное разрешение от участников. Короткие разрешительные лицензии часто вообще не упоминают патенты, а Apache-2.0 говорит об этом ясно; для проекта, который ценит независимость пользователей, такая определённость — преимущество. Условий немного, и они практичны: при распространении программы или изменённых версий нужно приложить копию лицензии, отметить изменённые файлы и сохранить полученные уведомления об авторских правах, патентах, товарных знаках и авторстве.
Что это даёт сайту на практике? Разрешение — только половина дела. Реальную независимость обеспечивают доступный вам репозиторий, конфигурация с типами и проверками, контент, хранящийся файлами, заменяемые ресурсы, доступная документация по эксплуатации и открытый порядок развёртывания, который может выполнить кто угодно, не спрашивая Provelopment. Foundation построен так, чтобы обе половины работали вместе; что кому принадлежит, подробно описано на странице о владении и переносе.
И ни одна лицензия не отменяет расходов на эксплуатацию: сайту нужны обновления, наблюдение и проверки. Их выполняет либо вы сами, либо выбранный вами разработчик, либо подрядчик за вознаграждение. Это не недостаток открытого кода, а реальная картина работы.
Источники
Всё, о чём говорится на этой странице, можно проверить самостоятельно. Ниже — основные источники. Ни один из этих организаций проект не связан.
- Определение открытого кода — Open Source Initiative
Определение, на которое опирается эта страница: десять критериев и их обоснование. Короткий текст, снимающий большую часть споров о значении термина.
- Список лицензий, одобренных OSI — Open Source Initiative
Лицензии, прошедшие проверку Open Source Initiative, и их стандартные идентификаторы. Здесь проверяют, действительно ли лицензия открытая.
- История Open Source Initiative
Рассказ самой организации о выборе названия в 1998 году и о встрече в Пало-Альто, со списком свидетельств участников.
- История проекта Mozilla — Mozilla
Хронология событий, о которых говорится выше: объявление Netscape в январе 1998 года, появление mozilla.org месяцем позже и публикация кода в марте.
- Что такое свободное программное обеспечение — проект GNU, Free Software Foundation
Точная формулировка четырёх свобод и самое ясное короткое объяснение разницы между свободой и ценой. Источник таблицы выше.
- Обзор системы GNU — проект GNU
Зачем начался проект GNU, что он собирался создать и как встретился с ядром Linux. Первоисточник для исторической части.
- Почему открытый код упускает суть свободного ПО — Ричард Столлман
Взгляд из традиции свободного ПО на разницу в названиях и на то, почему она важна, изложенный самим автором.
- Apache License 2.0 — Apache Software Foundation
Текст лицензии, под которой выпущен этот проект. Его можно прочитать целиком, и это стоит сделать, если вы думаете о распространении.
- Producing Open Source Software — Karl Fogel
Практическая книга о человеческой стороне совместных проектов: участники, обзор изменений, управление, финансирование, ожидания пользователей и разработчиков. Доступна онлайн.
- CHAOSS — показатели здоровья сообщества
Проект под эгидой Linux Foundation, который разрабатывает метрики для оценки того, здоров ли проект и надолго ли его хватит. Сюда смотрят, когда выбирают, на что опереться.