Работая вчера над статьей про разновидности ядра Linux в момент упоминания про то, что «Linux имеет открытый исходный код и т. д.» поймал себя на мысли о том, как такие упоминания могут восприниматься обычным пользователем. Якобы есть нечто (например, ядро на котором работают практически все устройства в мире) куда любой может внести какие захочет изменения и ему за это еще и спасибо скажут.
Потому захотелось чуть подробнее рассказать про то, как происходит процесс разработки программного обеспечения с открытым исходным кодом и объяснить почему не каждый сможет внести туда желаемые изменения.
Сразу предупрежу, что статья ориентирована на обычных пользователей, потому тут не будет сложных терминов и описание подходов к разработка. Все в лучших традициях канала - на пальцах и чтобы понял каждый.
Суть открытого исходного кода и репозитории
Понятие «открытый исходный код» в первую очередь означает то, что файлы разрабатываемого ПО или того же ядра доступны (открыты) для просмотра любому желающему. Такая степень открытости гарантирует то, что в этом исходном коде не будет чего-то, что сможет причинить вред устройству пользователя или его правам (например, праву на частную жизнь).
Каждый пользователь может загрузить копию исходного кода к себе на компьютер и строчку за строчкой (при наличии такого количества свободного времени, разумеется) изучить то, что сделали представители сообщества разработчиков.
Местом хранения исходного кода является репозитории (про них мы неоднократно говорили на канале). Обычно такие репозитории расположены на платформе Github. Например, на скриншоте ниже и дальше по ссылке вы можете наблюдать страницу репозитория с исходным кодом ядра Linux.
Автором (владельцем) репозитория является Линус Торвальдс, его имя вы также можете видеть на скриншоте. Получается, что любой может взять и скачать все содержимое этого репозитория к себе на компьютер. Давайте сделаем это при помощи терминала и утилиты GIT:
git clone https://github.com/torvalds/linux.git
Скачивание не будет быстрым, так как репозитории занимает достаточно места (в текущей версии размер составляет 5,8 гигабайт). Теперь у меня на компьютере находится исходный код ядра Linux. Стал ли я от этого его разработчиком?
Контрибьюторы и мейнтейнеры
Если прокрутить страницу репозитория ниже, то мы увидим, что есть несколько ссылок на инструкции для тех, кто решил присоединиться к разработке ядра Linux или, говоря иначе, стать контрибьютором.
Контрибьютор - это участник проекта с открытым исходным кодом, который помогает его развитию исправлением ошибок, написанием кода и документации. Если посмотреть на количество контрибьюторов ядра, то окажется, что их несколько десятков тысяч человек. Не все они напрямую занимаются разработкой ядра, кто-то, например, составляет документацию или вносит полезные комментарии.
Получается, чтобы стать контрибьютором необходимо придерживаться ряда правил, которые утверждены сообществом. Это первый момент, который не позволит кому-либо вносить любые изменения в исходный код ядра Linux.
Вносимые контрибьюторами правки или улучшения ядра проходят тестирования и обсуждения, прежде чем попасть в репозиторий.
Выходит, что даже если какой-либо ушлый человек проникнет в число контрибьюторов Linux, то любые вносимые им изменения вначале пройдут строгую проверку другими участниками сообщества. Это второй момент.
Окончательный вердикт о том, попадает ли конкретное изменение в очередную версию ядра выносят мейнтейнеры. Это участники проекта которые принимают решения по поводу его развития и направляют ход разработки. Главным мейнтейнером остается Линус Торвальдс, но он опирается на других мейнтейнеров, которые присылают ему проверенные и нужные изменения кода. Примерно в середине октября 2022 Торвальдс, кстати, выступил с критикой мейнтейнеров проекта и сказал, что они слишком поздно и медленно присылают ему необходимые для внесения фрагменты кода.
«Привычку откладывать всё до последнего нужно было оставить в школе. Это совершенно не подходит для разработки ядра Linux»
Обвинения в неторопливости автор ядра предъявил потому, что существует так называемое «окно по приему новшеств» - временной отрезок в течение которого Торвальдс осуществляет слияние присланных изменений с существующим в репозитории исходным кодом ядра. Если мейнтейнер присылает изменения практически в момент истечения этого срока, то у Торвальдса либо не остается вовсе времени, чтобы их рассмотреть, либо остается его очень мало. Что, в общем-то, и вызвало недовольство Линуса перед выпуском ядра версии 6.1.
Выходит, что перед тем, как попасть в обновленную версию ядра изменения, внесенные контрибьюторами, рассматриваются опытными разработчиками-мейнтейнерами и также изучаются автором ядра Линусом Торвальдсом. Это третий момент, почему у кого-либо не выйдет пропихнуть нужные только ему изменения в исходный код.
Внутри хаоса на самом деле четкая система
Из всего изложенного выше можно сделать вывод о том, что процесс разработки открытого ПО только с виду кажется чем-то неорганизованным. На самом же деле, внутри существует строгая система правил, общественный анализ вносимых изменений и окончательное их утверждение опытными разработчиками. И даже после выхода новой версии чего-либо есть система контроля со стороны тестировщиков и опять-таки совместная работа контрибьюторов по устранению выявленных ошибок.
Поэтому у меня, например, больше доверия именно к открытому ПО и ядру Linux, чем, например, к чему-то платному и Windows. Так как в последнем случае я не могу точно знать о содержимом исходного кода и том, что в нем спрятали разработчики. В статье про телеметрию и возможность ее появления на Линукс мы, кстати, это проговаривали.
Подведем итог
Естественно, это статья лишь поверхностно рассказывает о процессе разработки открытого ПО. Мы не коснулись важных системных подходов, ключевых понятий и механизмов. Я постарался объяснить почему разработка open-source решений это не хаос, как может показаться вначале, и сделать это так, чтобы понял любой читатель и подписчик канала.
Если получилось и этот материал показался вам интересным, то поддержите его лайком и репостом. Может у вас есть чего добавить к сути поста в комментариях - тогда милости прошу и с радостью присоединюсь к дискуссии.