Свободное программное обеспечение (ПО) и не очень свободное…

Open Swiss Knife

Возьмём, например, разработку ПО на таких языках как Python, JavaScript, Ruby, GoLang и др.

Создатели этих языков содержат свой собственный реестр открытого ПО написанного на этих языках (у каждого языка свой собственный реестр). Реестр очень обширный и постоянно обновляется, там содержатся самые свежие версии ПО.

Помимо удобного поиска ПО, разработчики языка, они же владельцы реестра, предоставляют удобные инструменты для быстрой установки программ из реестра.

Реестр содержит не только обычные программы, которые можно запускать и использовать. В него также входят, так называемые, библиотеки — наборы функций, компонентов, алгоритмов, призванные помочь разработчикам в создании программ или других библиотек. Например, вы пишете графический редактор и вам хочется добавить функцию размывки изображения. Вместо того чтобы писать весь код самостоятельно, вы можете подключить библиотеку функций обработки изображений, которая умеет делать размывку.

Перечисленные языки программирования позволяют очень легко подключать библиотеки из их реестра. Обычно достаточно прописать названия библиотек в специальном файле в папке с вашей программой и все указанные вами библиотеки установятся автоматически. И не только они — умный автоматический установщик установит ещё и те библиотеки которые требуются для работы выбранных вами библиотек. Вы можете очень быстро начать работу над вашей новой программой не утруждая себя поиском и ручной установкой нужных вам компонентов.

Библиотеки, необходимые для работы программы (или другой библиотеки) называются зависимостями этой программы. Зависимости могут иметь свои собственные зависимости, а они в свою очередь зависимости зависимостей. Полная совокупность библиотек требуемая вашей программе образует, так называемое, дерево зависимостей вашей программы.

Использование готового кода очень важная часть свободного программного обеспечения. Можно сказать что открытые программы для того и открытые чтобы использоваться повторно во многих других программах.


Лёгкость подключения и многочисленность готовых библиотек на все случаи жизни позволяют составлять программы как из конструктора Lego, почти не касаясь программирования как такового. Даже с минимальными навыками, вы можете создавать достаточно сложные программы и вычислительные системы.


Открытое ПО, да не очень. Всё было красиво и удобно, но…

Book

Активное использование стороннего кода приводит к тому, что дерево зависимостей для самой простой программы может включать в себя сотни библиотек. Даже если вы подключили к своей программе всего пару-тройку зависимостей — эта пара-тройка может притянуть ещё сотню другую.

В таких условиях затруднительно даже просто прочитать все названия задействованных библиотек или имена их создателей. А ведь вы доверяете им какие-то вычисления, какие-то персональные данные, свои или чужие. Подключаемые библиотеки имеют доступ не только к тем данным с которыми непосредственно работает ваша программа, но и ко многим (или ко всем) файлам на вашем компьютере.

Предположим вы задумались над этим вопросом и поработали над своим деревом зависимостей, так что в него входит всего лишь несколько библиотек. Теперь вы можете прочитать их названия узнать их авторов, принять решение доверять авторам или нет. Но зачем доверять если можно проверить — посмотреть код.

Дело в том, что автоматические установщики библиотек от языка программирования не предусматривают возможность посмотреть код до его запуска. Во многих случаях вы всё-таки сможете это сделать, внимательно изучив документацию, и запустив процесс установки по частям — сначала скачать, потом установить скачанное. Но даже здесь вам придётся на определённом этапе отключить интернет, чтобы установщик не скачал из сети какое-нибудь обновление для ранее скачанной и проверенной библиотеки.

То есть техническая возможность проверить исходный код у вас есть, но разработчики языка просто не предусматривают, что их пользователи захотят что-то проверять. И вам будет крайне неудобно это делать.

*Тут надо отметить, что процедура установки библиотеки предусматривает, в зависимости от настроек которые задал её автор, запуск какого-то кода из устанавливаемой библиотеки. То есть решение доверять или нет необходимо принимать до запуска процедуры установки.

На практике же широко распространена абсолютно неконтролируемая установка зависимостей. Этому учат на разных онлайн курсах и даже в университетах безо всяких оговорок и предупреждений о рисках в плане приватности и безопасности.


Используйте минимальное количество зависимостей, иначе заблудитесь в дереве зависимостей как в лесу.


О реестрах свободного ПО…

Distros

Дело в том, что практически каждый дистрибутив операционной системы Linux, будь то Debian, Fedora или Gentoo — это по сути реестр свободного программного обеспечения. Вся совокупность программ представленных в реестре и есть операционная система (ОС).

Конечно, вам предлагается установить не полный набор ПО, а только те компоненты которые вам необходимы. Никто не устанавливает полный набор программ операционной системы.

В реестре программ вашей ОС представлены и библиотеки. Точно такие же как и в реестре от языка программирования, только в реестре ОС представлены библиотеки сразу ото всех языков программирования. Этот реестр независим от создателей языка и управляется создателями вашей операционной системы. При установке ОС вы уже приняли решение, что доверяете программам из этого реестра. У вас уже есть удобный набор инструментов для быстрого поиска и установки программ и библиотек.

Зачем же вам дались эти централизованные, единственные в пределах языка, реестры от создателей языков?

Дело в том, что в эти реестры занесено намного больше библиотек, чем в реестры операционных систем, и библиотеки там самые новые. Но почему так?

Операторы реестров от языков программирования проверяют только формальную структуру папок и конфигурационных файлов библиотек и программ. Исходный код никто не проверяет. В сочетании с централизацией реестров это позволяет максимально упростить процедуру публикации новых библиотек, иногда до такой степени, что сам язык программирования предоставляет функции публикации.

Разработчики же дистрибутивов операционных систем более ответственно подходят к своей работе. Они проверяют исходный код на совместимость с остальными компонентами системы, и модифицируют его, если это требуется. Также проверяется и качество кода, и приемлемость его лицензии. Иногда удаляются части кода с несвободной лицензией или с лицензией несовместимой с принципами разработчиков дистрибутива. И, наверное, главное: в реестр операционной системы никогда не добавляются самые новые, не проверенные на практике, версии программ и библиотек.


Откажитесь от централизованных реестров ПО предоставляемых создателями языков программирования. Используйте реестр вашей операционной системы. Да, иногда вам придётся устанавливать недостающие библиотеки вручную и описывать процесс их установки в инструкциях для ваших пользователей. Но ведь это ради сохранения свободы программного обеспечения, и, как следствие, вашей свободы.



10 июля 2021
Иван Махонин
email: email
diaspora*: bh@sysad.org

Здесь вы можете оставить свой комментарий:
https://sysad.org/posts/c68163c0c3c401395a191eac510f7330

Язык: English, Русский.