Интересная статья на тему регионов 🤖
Недавно проработал алгоритм, который исключает из рендера окна, которые перекрыты и не видны пользователю - что-то вроде теста глубины, только на CPU.🤫
Можно будет сделать урок с подробным разъяснением математики регионов и реальными примерами использования👀
Недавно проработал алгоритм, который исключает из рендера окна, которые перекрыты и не видны пользователю - что-то вроде теста глубины, только на CPU.
Можно будет сделать урок с подробным разъяснением математики регионов и реальными примерами использования
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7
Хабр
Компоненты среды рабочего стола | Linux
Всех приветствую, читатели Хабра! Решил попробовать себя в роли знатока-писателя и освятить для вас такую тему, как “Компоненты среды рабочего стола”, чтобы больше людей, хотя бы в основе, понимали,...
Habr: Компоненты среды рабочего стола | Linux 🐧
1. Принцип работы PAM системы аутентификации
2. Туториал по созданию дисплей менеджера
3. Исходный код дисплей менеджера SDDM
4. Исходный код DM с исключительно базовым функционалом
5. Принцип коммуникации X11 клиента и оконного менеджера
6. Исходный код стартап модулей окружения kde-plasma (startkde)
7. Как dm понимает, какое окружение запустить?
8. Исходный код оконного менеджера dwm
9. Как работают оконные менеджеры в X11 и как написать такой?
10. Что такое оконный менеджер?
11. Что такое gnome-shell?
12. Общая информация про оконные менеджеры
1. Принцип работы PAM системы аутентификации
2. Туториал по созданию дисплей менеджера
3. Исходный код дисплей менеджера SDDM
4. Исходный код DM с исключительно базовым функционалом
5. Принцип коммуникации X11 клиента и оконного менеджера
6. Исходный код стартап модулей окружения kde-plasma (startkde)
7. Как dm понимает, какое окружение запустить?
8. Исходный код оконного менеджера dwm
9. Как работают оконные менеджеры в X11 и как написать такой?
10. Что такое оконный менеджер?
11. Что такое gnome-shell?
12. Общая информация про оконные менеджеры
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤🔥2👍2
Если бы меня спросили “Какую книгу стоит прочесть для того, чтобы приблизиться к абсолютному пониманию Linux?”, ответ был бы однозначным:
“Linux API Исчерпывающее руководство” - Майкл Керриск📕
Книга не только знакомит читателя с различными подсистемами операционки, но и глубоко их разбирает, приводит примеры реализации различных модулей на языке C (нативном для ядра и множества системных программ)👨💻
Материал очень грамотно подается: все начинается с подробного разжевывания базовых терминов (kernel, linux, unix, posix, gnu) и уходит вплоть до реализации TCP протокола и файловой системы.
Хардкорные сишники/плюсовики (бэкендеры) точно оценят книгу, т.к довольно глубоко объясняются принципы сетевого взаимодействия на сокетах и мультиплексирование ввода/вывода (poll, epoll, select)🤘
“Linux API Исчерпывающее руководство” - Майкл Керриск
Книга не только знакомит читателя с различными подсистемами операционки, но и глубоко их разбирает, приводит примеры реализации различных модулей на языке C (нативном для ядра и множества системных программ)
Материал очень грамотно подается: все начинается с подробного разжевывания базовых терминов (kernel, linux, unix, posix, gnu) и уходит вплоть до реализации TCP протокола и файловой системы.
Хардкорные сишники/плюсовики (бэкендеры) точно оценят книгу, т.к довольно глубоко объясняются принципы сетевого взаимодействия на сокетах и мультиплексирование ввода/вывода (poll, epoll, select)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Кто что слышал про Nobara Linux?
Очень интересная сборка, которая как бы должна давать в лоб всем хейтерам “домашнего” Linux, но пока этого сделать не может из-за немалого количества багов.⚙️
Дистрибутив разработан создателем Proton GE - пропатченной и доработанной версии утилиты Proton для запуска steam игр на линухе.🎮
Nobara предоставляет широкий спектр приложений (в том числе, с кастомными патчами), зависимостей и драйверов “из коробки”.🛠
Хорошо подходит для геймеров и фото/видео монтажеров, т.к. весь необходимый софт довольно просто ставится и, в некоторых случаях, может показать лучшую производительность📱
Достаточно неплохо вас может познакомить с этим дистр вот это видео
Очень интересная сборка, которая как бы должна давать в лоб всем хейтерам “домашнего” Linux, но пока этого сделать не может из-за немалого количества багов.
Дистрибутив разработан создателем Proton GE - пропатченной и доработанной версии утилиты Proton для запуска steam игр на линухе.
Nobara предоставляет широкий спектр приложений (в том числе, с кастомными патчами), зависимостей и драйверов “из коробки”.
Хорошо подходит для геймеров и фото/видео монтажеров, т.к. весь необходимый софт довольно просто ставится и, в некоторых случаях, может показать лучшую производительность
Достаточно неплохо вас может познакомить с этим дистр вот это видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5⚡1❤🔥1😁1🐳1
Хабр
Все про композитинг в X11 | Linux
Введение Приветствую, читатели Хабра! Вы когда-нибудь задумывались над тем, что скрывается за красотой и динамичностью вашего рабочего стола? Какие компоненты реализовывают анимации и различные...
Habr: Все про композитинг в X11 | Linux 🐧
1. Разбор графического стека Linux
2. Разбор графического стека Linux (рус)
2. Статья про композитинг
3. Статья про композитинг
4. Как обработать и сохранить графическое представоение окна после перенаправления?
5. Статья про композитинг, автором которой является разработчик kwin
6. Статья про композитинг
7. Исходный код awesomewn (ссылается на файл, который контролирует root и его фон)
8. Описание функционала различных компонентов рендера X11 (Drawable, Pixmap, Image, Visual)
9. Что из себя представляет фон рабочего стола + как его выставить и получить?
10. Программная реализация небольшой кодовой базы, на которой основывается композитинг
11. Для чего нужны DDX драйвера, когда Xorg использует DRM?
12. Документация расширения XComposite
13. Как X11 использует графическое ускорение?
14. Книга про разработку графики, неплохо растолковывает то, как устроена оконная система X
15. Что такое DRI?
16. Что такое DRM?
17. Что такое framebuffer?
18. Что такое двойная буферизация?
19. Что такое EGL/GLX?
20. Что такое OpenGL контекст?
1. Разбор графического стека Linux
2. Разбор графического стека Linux (рус)
2. Статья про композитинг
3. Статья про композитинг
4. Как обработать и сохранить графическое представоение окна после перенаправления?
5. Статья про композитинг, автором которой является разработчик kwin
6. Статья про композитинг
7. Исходный код awesomewn (ссылается на файл, который контролирует root и его фон)
8. Описание функционала различных компонентов рендера X11 (Drawable, Pixmap, Image, Visual)
9. Что из себя представляет фон рабочего стола + как его выставить и получить?
10. Программная реализация небольшой кодовой базы, на которой основывается композитинг
11. Для чего нужны DDX драйвера, когда Xorg использует DRM?
12. Документация расширения XComposite
13. Как X11 использует графическое ускорение?
14. Книга про разработку графики, неплохо растолковывает то, как устроена оконная система X
15. Что такое DRI?
16. Что такое DRM?
17. Что такое framebuffer?
18. Что такое двойная буферизация?
19. Что такое EGL/GLX?
20. Что такое OpenGL контекст?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤🔥3🔥2
LinuxCamp | DevOps pinned «Habr: Все про композитинг в X11 | Linux 🐧 1. Разбор графического стека Linux 2. Разбор графического стека Linux (рус) 2. Статья про композитинг 3. Статья про композитинг 4. Как обработать и сохранить графическое представоение окна после перенаправления?…»
Две особенности отличают директории от обычных файлов:
1. Для каталога указывается другой тип файла в записи индексного дескриптора✉️
2. Блок данных, на который указывает соответствующее поле в таблице inodes, содержит названия файлов/директорий и индексы, по которым происходит поиск элементов в таблице🔍
Если блок с данными файла содержит внутреннюю его информацию, то блок с данными директории, по сути, является таблицей с полями “имя дочернего элемента / id" в таблице индексного дескриптора🔗
Ремарка для программистов:
Несмотря на то, что процесс может открыть каталог, он не может применять системные вызовы read и write для того, чтобы изменить данные по дескриптору🔒
1. Для каталога указывается другой тип файла в записи индексного дескриптора
2. Блок данных, на который указывает соответствующее поле в таблице inodes, содержит названия файлов/директорий и индексы, по которым происходит поиск элементов в таблице
Если блок с данными файла содержит внутреннюю его информацию, то блок с данными директории, по сути, является таблицей с полями “имя дочернего элемента / id" в таблице индексного дескриптора
Ремарка для программистов:
Несмотря на то, что процесс может открыть каталог, он не может применять системные вызовы read и write для того, чтобы изменить данные по дескриптору
Please open Telegram to view this post
VIEW IN TELEGRAM
🗿3👍1🔥1👏1
В продолжении разбора файловой системы, рассмотрим ссылки 🔗
Ссылки бывают 2 типов: жесткие, символические
Жесткие: имеют ID, равный элементу, на который ссылаются. Это означает то, что один и тот же файл (структура inodes) может иметь несколько имен.
Не содержат отдельного поля в таблице индексных дескрипторов -> при создании жесткой ссылки, счетчик ссылок для файла увеличивается🔼
При удалении изначального файла или ссылки, значение счетчика уменьшается, но блок с данными файла остается нетронутым до тех пор, пока существует запись в таблице🔽
Когда счетчик ссылок = 0, запись в таблице исчезает -> данные для файла затираются🤪
Хммм, а можно создать жесткую ссылку на каталог?🤔
Нет! Это предотвращает цикличную зависимость в файловой системе🚫
Символичесие: являются отдельным типом файла, данные которого - имя другого файла.
При создании ссылки, счетчик для файла останется неизменным.
Следовательно, если удалить имя файла (изменить путь), с которым соотносится ссылка, сама она останется, несмотря на то, что ее нельзя будет разыменовать🔒
Ссылки бывают 2 типов: жесткие, символические
Жесткие: имеют ID, равный элементу, на который ссылаются. Это означает то, что один и тот же файл (структура inodes) может иметь несколько имен.
Не содержат отдельного поля в таблице индексных дескрипторов -> при создании жесткой ссылки, счетчик ссылок для файла увеличивается
При удалении изначального файла или ссылки, значение счетчика уменьшается, но блок с данными файла остается нетронутым до тех пор, пока существует запись в таблице
Когда счетчик ссылок = 0, запись в таблице исчезает -> данные для файла затираются
Хммм, а можно создать жесткую ссылку на каталог?
Нет! Это предотвращает цикличную зависимость в файловой системе
Символичесие: являются отдельным типом файла, данные которого - имя другого файла.
При создании ссылки, счетчик для файла останется неизменным.
Следовательно, если удалить имя файла (изменить путь), с которым соотносится ссылка, сама она останется, несмотря на то, что ее нельзя будет разыменовать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4✍3👍2
Сможет ли дека вывести линукс в массы❓
Пока ситуация какая: линукс широко распространен среди разработчиков. Для многих обывателей это все еще непонятная история. К такому развитию событий ведет ряд причин: отсутствие необходимого софта, проблемы с его установкой и запуском, много работы с терминалом, отсутствие единого для всех решения (миллион дистрибутивов, какой ставить...). Пока эти проблемы существуют, у пользователей других ОС не будет особой мотивации что-то менять.
Появление SteamDeck показало, что Valve не особо хочет подвязываться к Windows - в идеале, должна быть абсолютно открытая и дицентрализованная ОС, на которой можно будет спокойно запускать игры и не переживать о том, что Microsoft что-нибудь придумают и пользователи спустятся на уровень xbox и playstation. В общем, сейчас доходы Valve немало зависят от имиджовой работы Microsoft.
Компания постепенно будет пушить создание нативных Linux портов и разработку драйверов для лучшей поддержки игровой периферии и последних нововведений железа. Как результат: Nvidia начала активнее обновлять драйвера + появилась поддержка некоторых античит систем.
Результат папуляризации виден уже сегодня, но для лучшего эффекта Valve следует:
1. Сделать их ОС полноценно подходящей для десктоп задач (расширить список flatpak приложений, доработать kde-plasma, добавить больше пользовательского софта)
2. Доработать поддержку старого/нового железа
3. Зафорсить игровые компании выпускать ноутбуки/пк со SteamOS на борту
В общем, перспективы есть, нужно работать👨💻
Пока ситуация какая: линукс широко распространен среди разработчиков. Для многих обывателей это все еще непонятная история. К такому развитию событий ведет ряд причин: отсутствие необходимого софта, проблемы с его установкой и запуском, много работы с терминалом, отсутствие единого для всех решения (миллион дистрибутивов, какой ставить...). Пока эти проблемы существуют, у пользователей других ОС не будет особой мотивации что-то менять.
Появление SteamDeck показало, что Valve не особо хочет подвязываться к Windows - в идеале, должна быть абсолютно открытая и дицентрализованная ОС, на которой можно будет спокойно запускать игры и не переживать о том, что Microsoft что-нибудь придумают и пользователи спустятся на уровень xbox и playstation. В общем, сейчас доходы Valve немало зависят от имиджовой работы Microsoft.
Компания постепенно будет пушить создание нативных Linux портов и разработку драйверов для лучшей поддержки игровой периферии и последних нововведений железа. Как результат: Nvidia начала активнее обновлять драйвера + появилась поддержка некоторых античит систем.
Результат папуляризации виден уже сегодня, но для лучшего эффекта Valve следует:
1. Сделать их ОС полноценно подходящей для десктоп задач (расширить список flatpak приложений, доработать kde-plasma, добавить больше пользовательского софта)
2. Доработать поддержку старого/нового железа
3. Зафорсить игровые компании выпускать ноутбуки/пк со SteamOS на борту
В общем, перспективы есть, нужно работать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤🔥2⚡1❤1👍1
Торвальдс посоветовал Кису Куку (Kees Cook) из Google быть решением, а не проблемой в работе с кодом и мейнтейнерами ядра Linux + перестать плодить неразумные жалобы на код компилятора.
Кук вместе с другими экспертами Google работает над выяснением того, как лучше справляться с неожиданными ошибками арифметического переполнения в исходном коде C ядра Linux.✖️
Он надеется увидеть систематический способ, позволяющий ядру Linux справляться с такими арифметическими проблемами переполнения/недополнения/зацикливания.⌛️
Среди первоначальных идей — лучше использовать санитайзеры на основе компилятора или возможности языка C для перегрузки операторов без искажения имён.
Кук вместе с другими экспертами Google работает над выяснением того, как лучше справляться с неожиданными ошибками арифметического переполнения в исходном коде C ядра Linux.
Он надеется увидеть систематический способ, позволяющий ядру Linux справляться с такими арифметическими проблемами переполнения/недополнения/зацикливания.
Среди первоначальных идей — лучше использовать санитайзеры на основе компилятора или возможности языка C для перегрузки операторов без искажения имён.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3🙊1
Статические библиотеки ❗️
Статические библиотеки были первым видом библиотечных файлов, доступных в UNIX системах.
Они позволяют объединить набор часто используемых объектных файлов и использовать их для сборки различных программ⚙️
Статическая библиотека, по сути, является обычным файлом, содержащим копии всех, помещенных в него, объектных файлов.
В библиотеке также хранятся атрибуты для каждого объекта: права доступа, время последнего изменения, идентификаторы пользователя и группы.
Статическая библиотека может состоять из множества объектных модулей, но не все они будут включены в итоговую программу - компоновщик выберет только те, которые необходимы.
Таким образом, программа, скомпонованная со статической библиотекой, содержит копии всех объектных модулей, которые были включены в нее компоновщиком, что может приводить к избыточности и ряду неудобств🥸
Статические библиотеки были первым видом библиотечных файлов, доступных в UNIX системах.
Они позволяют объединить набор часто используемых объектных файлов и использовать их для сборки различных программ
Статическая библиотека, по сути, является обычным файлом, содержащим копии всех, помещенных в него, объектных файлов.
В библиотеке также хранятся атрибуты для каждого объекта: права доступа, время последнего изменения, идентификаторы пользователя и группы.
Статическая библиотека может состоять из множества объектных модулей, но не все они будут включены в итоговую программу - компоновщик выберет только те, которые необходимы.
Таким образом, программа, скомпонованная со статической библиотекой, содержит копии всех объектных модулей, которые были включены в нее компоновщиком, что может приводить к избыточности и ряду неудобств
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7✍3👍2
Pluggable Authentication Modules (PAM) 🔒
Как-то в статье про окружение рабочего стола я разбирал компонент, который использует PAM для аутинтификации пользователя в системе, имя ему"Дисплейный менеджер" .
Данная система представляет собой набор библиотек и конфигурационных файлов, с помощью которых стороннее приложение получает возможность авторизовать пользователя.
Существуют библиотеки PAM, позволяющие выполнять аутентификацию через: локальные пароли, LDAP или считыватели отпечатков пальцев👍
Как было раньше: желая войти в систему, пользователь был вынужден пообщаться с программой-охранником, гордо именуемой login. Она спрашивала имя, затем шифровала пароль известным алгоритмом и сверяла получивуюся абракадабру с записью в файле /etc/passwd. Если все совпадало, то вход в систему был разрешен.
Через некоторое время, наученные горьким опытом, системы перестали хранить зашифрованные пароли в файле /etc/passwd, открытом на всеобщее обозрение, и переместили эту интимную информацию в файл /etc/shadow, читать который дозволено было только обладателям прав суперпользователя. Программа login была переписана заново: теперь она умела читать из нового файла и шифровать данные по более серьезному алгоритму.
Неизвестно, сколько еще раз пришлось бы переписывать эту программу, если бы не пришла кому-то в голову мысль вынести механизм аутентификации в отдельную систему. Данная разработка получила название PAM.
Теперь, если программа жалает произвести аутентификацию пользователя, она не делает этого самостоятельно, а обращается к PAM с соответствующей просьбой. Последний выполняет все проверки и докладывает о результатах - пускать или нет.
Как-то в статье про окружение рабочего стола я разбирал компонент, который использует PAM для аутинтификации пользователя в системе, имя ему
Данная система представляет собой набор библиотек и конфигурационных файлов, с помощью которых стороннее приложение получает возможность авторизовать пользователя.
Существуют библиотеки PAM, позволяющие выполнять аутентификацию через: локальные пароли, LDAP или считыватели отпечатков пальцев
Как было раньше: желая войти в систему, пользователь был вынужден пообщаться с программой-охранником, гордо именуемой login. Она спрашивала имя, затем шифровала пароль известным алгоритмом и сверяла получивуюся абракадабру с записью в файле /etc/passwd. Если все совпадало, то вход в систему был разрешен.
Через некоторое время, наученные горьким опытом, системы перестали хранить зашифрованные пароли в файле /etc/passwd, открытом на всеобщее обозрение, и переместили эту интимную информацию в файл /etc/shadow, читать который дозволено было только обладателям прав суперпользователя. Программа login была переписана заново: теперь она умела читать из нового файла и шифровать данные по более серьезному алгоритму.
Неизвестно, сколько еще раз пришлось бы переписывать эту программу, если бы не пришла кому-то в голову мысль вынести механизм аутентификации в отдельную систему. Данная разработка получила название PAM.
Теперь, если программа жалает произвести аутентификацию пользователя, она не делает этого самостоятельно, а обращается к PAM с соответствующей просьбой. Последний выполняет все проверки и докладывает о результатах - пускать или нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤩2❤🔥1
Утилиты командной строки: top и htop
Команды необходимы для мониторинга производительности системы (Linux). Их использование полезно для анализа процессов и определения того, сколько CPU тратится на их выполнение, какое потребление оперативной памяти и т.д.
До знакомства с более продвинутыми средствами профилирования, сам использовал htop для обнаружения утечек памяти и узких мест программы, где потребление CPU зашкаливало🔥
Их основные отличия:
Доступность
• top: Является предустановленным для болишинства UNIX систем.
• htop: Требует ручной установки (доступен в большинстве стандартных репозиториев).
Интерфейс
• top: Текстовый интерфейс с ограниченными возможностями навигации.
• htop: Интерактивный интерфейс с возможностью использования мыши, прокрутки и сортировки.
Информация о системе
• top: Отображает основную информацию о системе - использование ЦП, памяти, своп и процессов.
• htop: Предоставляет более подробную информацию, включая использование диска, сетевой трафик, температуру ЦП, использование его ядер и многое другое.
Управление процессами
• top: Позволяет убивать процессы, изменять их приоритет и просматривать подробную информацию.
• htop: Предлагает более расширенные возможности управления процессами, такие как древовидный вид, фильтрация и поиск.
Настраиваемость
• top: Имеет ограниченные возможности настройки.
• htop: Высоко настраиваемый, позволяет изменять цвета, столбцы и горячие клавиши.
Другие функции
• top: Может отображать графики использования ресурсов.
• htop: Имеет встроенный просмотрщик файлов, монитор сети и другие полезные функции.
Ресурсоемкость
• top: Более легкий и потребляет меньше ресурсов.
• htop: Более ресурсоемкий, но предлагает расширенный набор функций.
Бонус, если вы все еще используете top: для того, чтобы преобразить его внешний вид и вывести дополнительную информацию, можно воспользоваться последовательным вводом (1, z, c, m)👨💻
Команды необходимы для мониторинга производительности системы (Linux). Их использование полезно для анализа процессов и определения того, сколько CPU тратится на их выполнение, какое потребление оперативной памяти и т.д.
До знакомства с более продвинутыми средствами профилирования, сам использовал htop для обнаружения утечек памяти и узких мест программы, где потребление CPU зашкаливало
Их основные отличия:
Доступность
• top: Является предустановленным для болишинства UNIX систем.
• htop: Требует ручной установки (доступен в большинстве стандартных репозиториев).
Интерфейс
• top: Текстовый интерфейс с ограниченными возможностями навигации.
• htop: Интерактивный интерфейс с возможностью использования мыши, прокрутки и сортировки.
Информация о системе
• top: Отображает основную информацию о системе - использование ЦП, памяти, своп и процессов.
• htop: Предоставляет более подробную информацию, включая использование диска, сетевой трафик, температуру ЦП, использование его ядер и многое другое.
Управление процессами
• top: Позволяет убивать процессы, изменять их приоритет и просматривать подробную информацию.
• htop: Предлагает более расширенные возможности управления процессами, такие как древовидный вид, фильтрация и поиск.
Настраиваемость
• top: Имеет ограниченные возможности настройки.
• htop: Высоко настраиваемый, позволяет изменять цвета, столбцы и горячие клавиши.
Другие функции
• top: Может отображать графики использования ресурсов.
• htop: Имеет встроенный просмотрщик файлов, монитор сети и другие полезные функции.
Ресурсоемкость
• top: Более легкий и потребляет меньше ресурсов.
• htop: Более ресурсоемкий, но предлагает расширенный набор функций.
Бонус, если вы все еще используете top: для того, чтобы преобразить его внешний вид и вывести дополнительную информацию, можно воспользоваться последовательным вводом (1, z, c, m)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤🔥2
Ядро Linux было создано под впечатлением от операционной системы MINIX, которая не устраивала Линуса своей ограниченной лицензией.
Ядро 0.0.1 имело размер 62 Кб в сжатом виде и содержало около 10 тысяч строк исходного кода. Кодовая база последних версий насчитывает более 30 млн строк.
По данным исследования, проведённого в 2010 году по заказу Евросоюза, приблизительная стоимость разработки с нуля проекта, аналогичного современному ядру Linux, составила бы более миллиарда долларов США.
Динамика роста кодовой базы ядра Linux:
0.0.1 - сентябрь 1991, 10 тыс. строк;
1.0.0 - март 1994, 176 тыс. строк;
1.2.0 - март 1995, 311 тыс. строк;
2.0.0 - июнь 1996, 778 тыс. строк;
2.2.0 - январь 1999, 1.8 млн. строк;
2.4.0 - январь 2001, 3.4 млн. строк;
2.6.0 - декабрь 2003, 5.9 млн. строк;
2.6.28 - декабрь 2008, 10.2 млн. строк;
2.6.35 - август 2010, 13.4 млн. строк;
3.0 - август 2011, 14.6 млн. строк.
3.5 - июль 2012, 15.5 млн. строк.
3.10 - июль 2013, 15.8 млн. строк;
3.16 - август 2014, 17.5 млн. строк;
4.1 - июнь 2015, 19.5 млн. строк;
4.7 - июль 2016, 21.7 млн. строк;
4.12 - июль 2017, 24.1 млн. строк;
4.18 - август 2018, 25.3 млн. строк;
5.2 - июль 2019, 26.55 млн. строк;
5.8 - август 2020, 28.4 млн. строк;
5.13 - июнь 2021, 29.2 млн. строк;
5.19 - август 2022, 30.5 млн. строк;
Ядро 0.0.1 имело размер 62 Кб в сжатом виде и содержало около 10 тысяч строк исходного кода. Кодовая база последних версий насчитывает более 30 млн строк.
По данным исследования, проведённого в 2010 году по заказу Евросоюза, приблизительная стоимость разработки с нуля проекта, аналогичного современному ядру Linux, составила бы более миллиарда долларов США.
Динамика роста кодовой базы ядра Linux:
0.0.1 - сентябрь 1991, 10 тыс. строк;
1.0.0 - март 1994, 176 тыс. строк;
1.2.0 - март 1995, 311 тыс. строк;
2.0.0 - июнь 1996, 778 тыс. строк;
2.2.0 - январь 1999, 1.8 млн. строк;
2.4.0 - январь 2001, 3.4 млн. строк;
2.6.0 - декабрь 2003, 5.9 млн. строк;
2.6.28 - декабрь 2008, 10.2 млн. строк;
2.6.35 - август 2010, 13.4 млн. строк;
3.0 - август 2011, 14.6 млн. строк.
3.5 - июль 2012, 15.5 млн. строк.
3.10 - июль 2013, 15.8 млн. строк;
3.16 - август 2014, 17.5 млн. строк;
4.1 - июнь 2015, 19.5 млн. строк;
4.7 - июль 2016, 21.7 млн. строк;
4.12 - июль 2017, 24.1 млн. строк;
4.18 - август 2018, 25.3 млн. строк;
5.2 - июль 2019, 26.55 млн. строк;
5.8 - август 2020, 28.4 млн. строк;
5.13 - июнь 2021, 29.2 млн. строк;
5.19 - август 2022, 30.5 млн. строк;
👍19❤🔥5🔥5
Версионирование разделяемых библиотек:
Как известно, одним из преимуществ разделяемых библиотек является отсутствие необходимости в повторной компоновке исполняемых файлов, которые библиотеку используют: программа во время выполнения подтягивает необходимые ее части и не содержит копий объектных файлов, как в случае со статическими аналогами.
В Linux у вас может быть несколько версий одной и той же библиотеки. Следование правилам версионирования и компановки позволяет сохранить работоспособность программ при обновлениях, которые нарушают совместимость (добавление дополнительного параметра в публичный метод: подробнее можно ознакомиться здесь).
Корректно спроектированная динамическая библиотека должна состоять из 3 имен:
1. Реальное имя - название самой библиотеки “lib<name>.so.<major>.<minor>.<patch>”. Напрямую при линковке не используется (разве что для дебага).
Major - меняется в случае, когда правки приводят к несовместимости с приложениями (изменение API).
Minor - меняется при расширении API (добавлении функционала).
Patch - багфиксы, оптимизации (изменение функционала внутри готового API).
2. SONAME - метка, которая записывается в файл библиотеки на этапе создания (DT_SONAME в терминологии формата ELF). Именно она встраивается статическим компоновщиком в программу и, как следствие, используется динамическим компоновщиком для поиска на этапе выполнения. Структура, обычно, следующая “lib<library name>.so.<major>”.
3. Компоновочное имя - используется на этапе статического связывания приложения и библиотеки (не содержит номеров версий).
Для того, чтобы корректно подключить зависимость, нужно создать 2 символьные ссылки:
1) связывает компоновочное имя и soname;
2) связывает soname и реальное имя библиотеки;
Компоновочное имя может указывать на файл библиотеки, но желательно, чтобы оно ссылалось на soname, т.к. пользователь может удалить старую версию после минорного обновления и ссылка станет невалидной.
После корректного обновления библиотеки, ссылка soname должна указывать на самую последнюю ее версию, в результате чего, ваше приложение будет работать с актуальным экземпляром.
Если обновление меняет мажорную версию, то, при использовании утилиты ldconfig, автоматически будет создана ссылка, связывающая soname и имя библиотеки. При этом, приложение будет работать с последней совместимой версией (если не была удалена).
Как известно, одним из преимуществ разделяемых библиотек является отсутствие необходимости в повторной компоновке исполняемых файлов, которые библиотеку используют: программа во время выполнения подтягивает необходимые ее части и не содержит копий объектных файлов, как в случае со статическими аналогами.
В Linux у вас может быть несколько версий одной и той же библиотеки. Следование правилам версионирования и компановки позволяет сохранить работоспособность программ при обновлениях, которые нарушают совместимость (добавление дополнительного параметра в публичный метод: подробнее можно ознакомиться здесь).
Корректно спроектированная динамическая библиотека должна состоять из 3 имен:
1. Реальное имя - название самой библиотеки “lib<name>.so.<major>.<minor>.<patch>”. Напрямую при линковке не используется (разве что для дебага).
Major - меняется в случае, когда правки приводят к несовместимости с приложениями (изменение API).
Minor - меняется при расширении API (добавлении функционала).
Patch - багфиксы, оптимизации (изменение функционала внутри готового API).
2. SONAME - метка, которая записывается в файл библиотеки на этапе создания (DT_SONAME в терминологии формата ELF). Именно она встраивается статическим компоновщиком в программу и, как следствие, используется динамическим компоновщиком для поиска на этапе выполнения. Структура, обычно, следующая “lib<library name>.so.<major>”.
/* Создаем libdemo.so.1.0.0 с меткой libdemo.so.1 */
$ gcc -shared -Wl,-soname=libdemo.so.1 -o libdemo.so.1.0.0 module1.o
3. Компоновочное имя - используется на этапе статического связывания приложения и библиотеки (не содержит номеров версий).
/* В исполняемый файл prog будет записан soname, к которому приведет нас libdemo.so */
$ gcc -g -Wall -o prog main.o libdemo.so
Для того, чтобы корректно подключить зависимость, нужно создать 2 символьные ссылки:
1) связывает компоновочное имя и soname;
2) связывает soname и реальное имя библиотеки;
Компоновочное имя может указывать на файл библиотеки, но желательно, чтобы оно ссылалось на soname, т.к. пользователь может удалить старую версию после минорного обновления и ссылка станет невалидной.
libdemo.so -> libdemo.so.1
libdemo.so.1 -> libdemo.so.1.0.0
libdemo.so.1.0.0
После корректного обновления библиотеки, ссылка soname должна указывать на самую последнюю ее версию, в результате чего, ваше приложение будет работать с актуальным экземпляром.
libdemo.so.1 -> libdemo.so.1.0.1
Если обновление меняет мажорную версию, то, при использовании утилиты ldconfig, автоматически будет создана ссылка, связывающая soname и имя библиотеки. При этом, приложение будет работать с последней совместимой версией (если не была удалена).
$ sudo ldconfig -v | grep libdemo
libdemo.so.2 -> libdemo.so.2.0.0 (changed)
/* Выводим диинамические зависимости программы */
$ ldd prog
libdemo.so.1 => ./libdemo.so.1 (0x0000ffff8f870000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff7ff50000)
🔥9👍7❤🔥2