Работая вчера над статьей про разновидности ядра Linux в момент упоминания про то, что «Linux имеет открытый исходный код и т. д.» поймал себя на мысли о том, как такие упоминания могут восприниматься обычным пользователем. Якобы есть нечто (например, ядро на котором работают практически все устройства в мире) куда любой может внести какие захочет изменения и ему за это еще и спасибо скажут.
Разнообразие ядер Linux: какое и для чего можно выбрать
Просто Код | Все о Linux и Opensource 2 февраля
Потому захотелось чуть подробнее рассказать про то, как происходит процесс разработки программного обеспечения с открытым исходным кодом и объяснить почему не каждый сможет внести туда желаемые изменения.
Сразу предупрежу, что статья ориентирована на обычных пользователей, потому тут не будет сложных терминов и описание подходов к разработка. Все в лучших традициях канала — на пальцах и чтобы понял каждый.
Суть открытого исходного кода и репозитории
Понятие «открытый исходный код» в первую очередь означает то, что файлы разрабатываемого ПО или того же ядра доступны (открыты) для просмотра любому желающему. Такая степень открытости гарантирует то, что в этом исходном коде не будет чего-то, что сможет причинить вред устройству пользователя или его правам (например, праву на частную жизнь).
5 причин научиться собирать софт из исходников
Каждый пользователь может загрузить копию исходного кода к себе на компьютер и строчку за строчкой (при наличии такого количества свободного времени, разумеется) изучить то, что сделали представители сообщества разработчиков.
Местом хранения исходного кода является репозитории (про них мы неоднократно говорили на канале). Обычно такие репозитории расположены на платформе Github. Например, на скриншоте ниже и дальше по ссылке вы можете наблюдать страницу репозитория с исходным кодом ядра Linux.
Репозиторий ядра Linux на Github
Автором (владельцем) репозитория является Линус Торвальдс, его имя вы также можете видеть на скриншоте. Получается, что любой может взять и скачать все содержимое этого репозитория к себе на компьютер. Давайте сделаем это при помощи терминала и утилиты GIT:
git clone https://github.com/torvalds/linux.git
Скачивание исходного кода ядра Линукс на компьютер
Скачивание не будет быстрым, так как репозитории занимает достаточно места (в текущей версии размер составляет 5,8 гигабайт). Теперь у меня на компьютере находится исходный код ядра Linux. Стал ли я от этого его разработчиком?
Контрибьюторы и мейнтейнеры
Если прокрутить страницу репозитория ниже, то мы увидим, что есть несколько ссылок на инструкции для тех, кто решил присоединиться к разработке ядра Linux или, говоря иначе, стать контрибьютором.
Список правил для тех, кто решил присоединиться к проекту в качестве разработчика
Контрибьютор — это участник проекта с открытым исходным кодом, который помогает его развитию исправлением ошибок, написанием кода и документации. Если посмотреть на количество контрибьюторов ядра, то окажется, что их несколько десятков тысяч человек. Не все они напрямую занимаются разработкой ядра, кто-то, например, составляет документацию или вносит полезные комментарии.
Ubuntu 22.04 — Установка программ из исходных кодов
Список самых активных контрибьюторов с апреля 2002 по февраль 2023
Получается, чтобы стать контрибьютором необходимо придерживаться ряда правил, которые утверждены сообществом. Это первый момент, который не позволит кому-либо вносить любые изменения в исходный код ядра Linux.
Вносимые контрибьюторами правки или улучшения ядра проходят тестирования и обсуждения, прежде чем попасть в репозиторий.
Обсуждение вносимого в исходный код исправления
Выходит, что даже если какой-либо ушлый человек проникнет в число контрибьюторов Linux, то любые вносимые им изменения вначале пройдут строгую проверку другими участниками сообщества. Это второй момент.
Окончательный вердикт о том, попадает ли конкретное изменение в очередную версию ядра выносят мейнтейнеры. Это участники проекта которые принимают решения по поводу его развития и направляют ход разработки. Главным мейнтейнером остается Линус Торвальдс, но он опирается на других мейнтейнеров, которые присылают ему проверенные и нужные изменения кода. Примерно в середине октября 2022 Торвальдс, кстати, выступил с критикой мейнтейнеров проекта и сказал, что они слишком поздно и медленно присылают ему необходимые для внесения фрагменты кода.
«Привычку откладывать всё до последнего нужно было оставить в школе. Это совершенно не подходит для разработки ядра Linux»
Обвинения в неторопливости автор ядра предъявил потому, что существует так называемое «окно по приему новшеств» — временной отрезок в течение которого Торвальдс осуществляет слияние присланных изменений с существующим в репозитории исходным кодом ядра. Если мейнтейнер присылает изменения практически в момент истечения этого срока, то у Торвальдса либо не остается вовсе времени, чтобы их рассмотреть, либо остается его очень мало. Что, в общем-то, и вызвало недовольство Линуса перед выпуском ядра версии 6.1.
Выходит, что перед тем, как попасть в обновленную версию ядра изменения, внесенные контрибьюторами, рассматриваются опытными разработчиками-мейнтейнерами и также изучаются автором ядра Линусом Торвальдсом. Это третий момент, почему у кого-либо не выйдет пропихнуть нужные только ему изменения в исходный код.
Внутри хаоса на самом деле четкая система
Из всего изложенного выше можно сделать вывод о том, что процесс разработки открытого ПО только с виду кажется чем-то неорганизованным. На самом же деле, внутри существует строгая система правил, общественный анализ вносимых изменений и окончательное их утверждение опытными разработчиками. И даже после выхода новой версии чего-либо есть система контроля со стороны тестировщиков и опять-таки совместная работа контрибьюторов по устранению выявленных ошибок.
Поэтому у меня, например, больше доверия именно к открытому ПО и ядру Linux, чем, например, к чему-то платному и Windows. Так как в последнем случае я не могу точно знать о содержимом исходного кода и том, что в нем спрятали разработчики. В статье про телеметрию и возможность ее появления на Линукс мы, кстати, это проговаривали.
Источник: dzen.ru
Скачать исходные коды комманд терминала Linux
Задумывались ли вы когда-то что из себя представляют команды в терминале? Это есть не что иное как обычные программы. И в данной статье мы расмотрим пример как найти и скачать исходный код программ в Linux. Для вас это может иметь смысл если вы хотите написать подобную программу, разобраться в исходниках “для себя” либо есть желание контрибьютить в ядро.
Первая задача это поиск исходников.
Есть несколько путей поиска исходного кода. Для начала, мы должны идентифицировать команду и найти ее местоположение. Главное условие чтоб дистрибутив или утилиты терминала были с открытыми исходниками.
Идентификация комманд.
Прежде чем начать, мы должны узнать тип комманды. Это может быть команда шелла, встроенная, алиас, исполняемая и тд. Данную информацию можно получить командами
type, which, help, man и info.
Комманда type выводит тип комманды из списка alias, keyword, function, builtin, disk file, и not found. Для примера, комманда type выводит два инстанса комманды ls:
$ ▶ type -a ls ls is aliased to `ls —color=auto’ ls is /usr/bin/ls ls is /bin/ls
which — выводит полный путь к искомой комманде.
$ ▶ which ls /usr/bin/ls
help — выводит краткую информацию об искомой комманде.
$ ▶ help echo echo: echo [-neE] [arg . ] Write arguments to the standard output.
man — выводит документацию из системной записи. Выдает больше информации, чем комманда help.
$ ▶ man ls
Ссылка на исходники
Ссылку на исходники программы это документация по комманде man. Возможно, там будет находиться ссылка на git репозиторий или что-то в этом роде.
Но первое и основное место для поиска и скачивания исходников это конечно же использование Менеджера Пакетов . Рассмотрим пример на debian подобном дистрибутиве.
Используем dpkg -S чтоб узнать имя пакета этой программы.
$ ▶ dpkg -S /bin/ls coreutils: /bin/ls
Далее мы используем комманду apt-get source для скачивания исходников в текущую директорию. Если обратиться к документации, то стандартная папка для исходников это / usr/src.
$ ▶ apt source coreutils Reading package lists. Done Need to get 5,401 kB of source archives. Get:1 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (dsc) [2,048 B] Get:2 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (tar) [5,360 kB] Get:3 http://us.archive.ubuntu.com/ubuntu focal/main coreutils 8.30-3ubuntu2 (diff) [39.6 kB] Fetched 5,401 kB in 3s (1,840 kB/s)
Если apt source выдает ошибку, следует проверить конфигурации.
$ ▶ apt-get source coreutils Reading package lists. Done E: You must put some ‘deb-src’ URIs in your sources.list
Для этого проверьте файл /etc/apt/sources.list чтоб в нем были раскомментированы пакеты из deb-src реп. Например,
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted
Или из Ubnutu через приложение «Software https://16rom.com/ru/blog/skachat-iskhodnye-kody-kommand-terminala-linux» target=»_blank»]16rom.com[/mask_link]
Как получить исходный код пакета с помощью команды apt на Debian или Ubuntu
Мне нужен исходный код кода пакета, установленного с помощью команды apt-get или apt в Debian или Ubuntu.
Как получить или загрузить исходный код пакета в системе Debian или Ubuntu?
Как скачать исходный код пакета Ubuntu / Debian?
Исходный код – это не что иное, как текстовая версия программного обеспечения Debian или Ubuntu.
Обычно мы устанавливаем скомпилированное программное обеспечение, используя команду apt-get command / apt.
Однако иногда нам нужен исходный код, непосредственно написанный на языке программирования.
Исходный код полезен для применения пользовательского патча или добавления / удаления существующих функций из программного обеспечения .
Первый шаг для этого – загрузить исходный код.
Давайте посмотрим, как загрузить исходный код (файл DEB) с помощью командной строки.
Как получить исходный код пакета с помощью команды apt-get / apt
Процедура загрузки исходного кода для Ubuntu Linux следующая.
Обратите внимание, что apt-get поддерживает сторонние приложения с закрытым исходным кодом. Вы можете загрузить только исходный код программного обеспечения с открытым исходным кодом.
Шаг 1 – Добавим репозиторий исходного кода
О тредактируйте файл /etc/apt/sources.list, запустите:
$ sudo vi /etc/apt/sources.list
Убедитесь, что deb-src ссылается на исходный код дистрибутива Ubuntu следующим образом:
# Sources specification for the Ubuntu 20.04 LTS distro #
deb-src http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
- deb-src: указывает, что вам нужен исходный код файлов .DEB.
- http://archive.ubuntu.com/ubuntu: URL для получения индекса и исходного кода файлов .deb.
- focal: Ubuntu Linux 20.04 LTS кодовое имя
- main restricted universe multiverse :: имя компонента репо, как например main, restricted, universe, и multiverse
Шаг 2 – Обновим индекс пакетов
Запустите следующую команду, чтобы повторно синхронизировать файлы индекса пакета из их источников:
$ sudo apt-get update
# или #
$ sudo apt update
Шаг 3 – Скачаем исходный код пакета Ubuntu
Давайте загрузим исходный код оболочки bash, запустим:
$ sudo apt-get source
$ sudo apt-get source bash
Вы можете увидеть следующую ошибку, если вы забыли настроить deb-src, как описано в шаге № 1:
E: You must put some ‘source’ URIs in your sources.list
Шаг 4 – Разбор загруженных файлов исходного кода
Давайте запустим команду ls, чтобы увидеть исходный код пакета:
total 5512 drwxrwxr-x 15 vivek vivek 4096 Jul 19 10:32 bash-5.0 -rw-r—r— 1 vivek vivek 74356 Jun 29 14:43 bash_5.0-6ubuntu1.1.debian.tar.xz -rw-r—r— 1 vivek vivek 2418 Jun 29 14:43 bash_5.0-6ubuntu1.1.dsc -rw-r—r— 1 vivek vivek 5554808 Jan 14 2019 bash_5.0.orig.tar.xz
По умолчанию исходный код извлекается в каталог bash-5.0:
Архив исходного кода bash с окончанием .tar.xz хранится в файле bash_5.0.orig.tar.xz.
Файл описания с окончанием .dsc содержит как имя пакета, так и содержимое (после ключевого слова Source:).
Тарбол, с любыми изменениями в исходном коде, плюс все файлы, созданные для пакета Debian, хранятся в файле bash_5.0-6ubuntu1.1.debian.tar.xz.
Если опция –download-only будет передана команде apt-get, то исходный пакет не будет распакован:
$ sudo apt-get —download-only source source bash
После загрузки мы можем извлечь исходные файлы для bash следующим образом:
$ dpkg-source -x /path/to/pkg.dsc
$ dpkg-source -x bash_5.0-6ubuntu1.1.dsc
Также возможно собрать пакеты:
$ sudo apt-get —build source
$ sudo apt-get —build source bash
Другой вариант – внести изменения в файлы debian / rules
$ vi bash-5.0/debian/rules
Далее мы можем создать собственный пакет bash следующим образом:
$ export EDITOR=vim
$ dch -n
Убедитесь, что мы удовлетворяем зависимости сборки исходного пакета и чтобы избежать ошибок, установите эти библиотеки и инструменты:
$ sudo apt-get -y build-dep bash
Наконец, соберите пакет Debian:
Проверьте новые пакеты:
$ cd ..
$ ls *.deb
Установите их:
$ sudo dpkg -i bash_*.deb
Как скачать исходный код пакета Debian
Процедура такая же, как и в дистрибутиве Ubuntu, но синтаксис URL меняется следующим образом:
$ sudo vi /etc/apt/sources.list
Измените / обновите следующим образом:
# source repo for Debian 10 buster #
deb-src deb http://deb.debian.org/debian buster main
Сохраните и закройте файл в vim, а затем выполните следующую команду:
$ sudo apt-get update
Давайте загрузим исходный код веб-сервера Apache:
$ apt-get source apache2