Форк в информатике¶
Форк (от англ. fork — развилка, ветвление) — в информатике термин, обозначающий создание независимой копии программного проекта, протокола или стандарта с целью его дальнейшего самостоятельного развития. Форк возникает, когда разработчики расходятся во мнениях по поводу целей, архитектуры или управления исходным проектом и начинают поддерживать собственную версию, не связанную обязательствами перед оригиналом.
¶Форк программного обеспечения
В разработке ПО форк означает разделение кодовой базы: часть разработчиков продолжает работу над исходным проектом, а другая создаёт его производную версию. Форк не является копированием в обычном смысле — он подразумевает дальнейшее независимое развитие с собственной дорожкой релизов, политикой и сообществом.
Форки особенно распространены в свободном и открытом ПО, где лицензии (GPL, MIT, Apache) прямо допускают создание производных работ. В проприетарном ПО форки редки, так как исходный код недоступен, а лицензии запрещают модификацию.
¶Причины форков
Основные причины создания форков:
- Расхождения в видении проекта — разработчики не могут согласовать приоритеты развития, целевую аудиторию или набор функций.
- Политические и организационные конфликты — споры вокруг управления проектом, авторских прав или коммерциализации.
- Технический стагнация — оригинальный проект перестаёт обновляться, и сообщество возобновляет развитие самостоятельно.
- Специализация — создание узкоспециализированной версии для конкретной задачи или платформы.
¶Известные примеры форков
| Форк | Оригинал | Год | Причина |
|---|---|---|---|
| LibreOffice | OpenOffice.org | 2010 | Расхождения с Oracle после покупки Sun Microsystems |
| MariaDB | MySQL | 2009 | Опасения сообщества после покупки Sun/MySQL Oracle |
| OpenSSL | — | 2014 | Проект LibreSSL, созданный после инцидента Heartbleed |
| Linux Mint | Ubuntu | 2006 | Желание изменить рабочий стол и набор приложений |
| Cinnamon | GNOME Shell | 2011 | Недовольство новым интерфейсом GNOME 3 |
| Xfce | — | — | Продолжение после сворачивания разработки |
Один из самых известных случаев — разделение сообщества вокруг GNU Emacs и XEmacs в 1990-х годах, а также раскол между LibreOffice и OpenOffice после перехода последнего под контроль Apache Foundation.
¶Форк в системах контроля версий
В системах контроля версий (Git, Mercurial) fork — операция клонирования репозитория на сервере хостинга (GitHub, GitLab, Gitea). В отличие от локального клонирования, форк создаёт полную независимую копию репозитория в аккаунте пользователя, что позволяет вносить изменения без прав записи в оригинальный проект.
Модель «форк и pull request» стала стандартным способом внесения вклада в открытые проекты: разработчик форкает репозиторий, вносит изменения и отправляет запрос на слияние (pull request / merge request). Так работают крупнейшие проекты — Linux kernel, Chromium, VS Code.
¶Форк протоколов и стандартов
Форк возникает и на уровне сетевых протоколов и стандартов. Пример — разделение IRC-протокола и его расширений, создание альтернативных реализаций XMPP-серверов, а также появление форков криптовалют: Bitcoin породил Litecoin (2011), Bitcoin Cash (2017) и десятки других монет, отличающихся параметрами блока, алгоритмами майнинга или экономической моделью.
¶Последствия форков
Форк имеет двоякие последствия. С положительной стороны он обеспечивает:
- продолжение жизни проекта при устаревании или сворачивании оригинала;
- конкуренцию между версиями, стимулирующую развитие;
- возможность экспериментов без риска для основной ветки.
С отрицательной стороны форки приводят к:
- фрагментации сообщества — разработчики и пользователи распыляются между несколькими версиями;
- дублированию усилий — исправления и функции приходится переносить вручную;
- путанице для пользователей — несколько похожих проектов с разными названиями.
¶Форк и ветвление
Термин «форк» не следует путать с ветвлением (branching) в системах контроля версий. Ветка — это временная линия разработки внутри одного репозитория, предназначенная для слияния обратно. Форк — это отделение на постоянной основе с созданием независимого репозитория, у которого нет обязательств по слиянию с оригиналом.
¶Интересные факты
- Термин «fork» в контексте разработки ПО популяризировался в 1980-х годах в среде GNU и BSD-проектов.
- Раскол между BSD-системами (FreeBSD, NetBSD, OpenBSD) в начале 1990-х — один из самых известных «великих форков» в истории Unix.
- Некоторые компании намеренно создают форки популярных открытых проектов, чтобы снизить зависимость от чужих решений (например, Amazon с форками Elasticsearch и Redis).
Источники:
- «Профессиональная разработка программного обеспечения» — Роджер Прессман
- «Открытый код. Создание успешных открытых проектов» — Карл Фогель
- Документация Git (git-scm.com)
- Статьи и обсуждения на GitHub, LWN.net
