GNU/Linux | Notes
2.35K subscribers
115 photos
8 files
80 links
Open Source, Dotfiles, Debian/Ubuntu, Software, Linux, Scripts, Notes, Terminal, Shell, Gnu, Tools, Games, Fun, Free Software Movement.

Автор: Кирилл Рехов
Почта: krekhov.dev@gmail.com
Кто я: https://t.me/krxnotes/246
GitHub: https://github.com/krekhovx
Download Telegram
ioctl()

Input/Output Control.
Это системный вызов в UNIX‑подобных системах, который позволяет отправлять драйверу устройства специальные команды, выходящие за рамки обычных операций read/write. Каждое устройство само определяет набор своих команд, поэтому ioctl даёт гибкий, но низкоуровневый механизм управления.

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

Используется для:
1. Выполнения операций, специфичных для устройства (например, очистка буфера).
2. Запроса информации, недоступной через read.
3. Настройки параметров драйвера или устройства.
4. Любых других операций, для которых нет стандартных системных вызовов.

Пример работы выглядит так.
В пользовательской программе вызывается команда:
ioctl(fd, IOCTL_GET_MSG, buffer)


Эта команда не читает данные напрямую, а сообщает драйверу: "выполни действие IOCTL_GET_MSG". Обычно для таких команд используются макросы _IOR, _IOW и _IOWR:
#define IOCTL_GET_MSG _IOR(MAJOR_NUM, 1, char*)


_IOR — получить данные из драйвера
_IOW — отправить данные драйверу
_IOWR — и отправить, и получить

В драйвере эти команды обрабатываются функцией ioctl, указанной в структуре file_operations:
struct file_operations Fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release,
.unlocked_ioctl = device_ioctl, // основной обработчик ioctl
.compat_ioctl = device_ioctl // нужен только для 32‑бит -> 64‑бит совместимости
};


Таким образом, ioctl создаёт "канал команд":
пользовательское приложение отправляет запрос -> драйвер получает код команды -> выполняет нужное действие -> возвращает результат.

Это простой способ расширить возможности устройства так, как нужно автору драйвера, не изобретая собственные протоколы поверх read/write.

#kernel
Rust

Компилируемый системный язык, ориентированный на безопасность памяти и отсутствие неопределённого поведения, без GC (garbage collector). Позволяет писать низкоуровневый код с производительностью на уровне C/C++, но значительно безопаснее благодаря модели владения и строгой типизации.

Где полезен:
- Backend: высоконагруженные сервисы (Actix, Axum), микросервисы.
- Системное программирование: драйверы, ОС‑компоненты, сетевые стеки.
- WebAssembly: написание высокопроизводительных частей веб‑приложений.
- Безопасная работа с параллелизмом: многопоточные сервисы и runtime‑системы.
- Инструменты и CLI: cargo, ripgrep, fd, starship — многие современные утилиты пишутся на Rust.

Плюсы:
- Высокая производительность, сравнимая с C/C++.
- Отличная экосистема: crates.io, tokio, serde, tracing.
- Cargo: один из лучших менеджеров пакетов/сборки в мире.
- Строгий анализ на этапе компиляции предотвращает целые классы ошибок.
- Безопасность памяти без garbage collector — нет segfault, нет use‑after‑free.

Минусы/реалии:
- Компиляция тяжелее и медленнее, чем у C.
- Встраивание Rust в очень старые экосистемы (например, firmware) может быть сложным.
- Иногда низкоуровневые операции требуют unsafe (компилятор снимает с себя ответственность).
- Крутая кривая обучения из‑за модели владения и borrow checker (строго контролирует доступ к памяти).

Rust vs C/C++:
- Безопаснее C/C++ благодаря строгой модели владения.
- Но C всё ещё проще интегрировать в старые системы и ABI стабильнее.
- Производительность сопоставима или выше, особенно в многопоточных задачах.
- Для embedded Rust часто удобнее C++, но не всегда доступен на самых низких MCU.

Rust в ядре Linux:
- Rust официально принят в mainline Linux (начиная с 6.1).
- Поддержка пока ограничена, но активно развивается.
- Можно писать драйверы и части подсистем ядра, но API Rust в ядре ещё не полный.
- В ядро Rust включён не для переписывания всего, а для безопасных новых драйверов.
- Модули ядра на Rust уже возможны, но только те, которые используют предоставленный Rust‑абстракционный слой (kernel crate).

Где Rust нужен в Linux:
- Пользовательские утилиты: многие современные CLI (ripgrep, exa, fd, bat, starship) уже стандарт-де-факто.
- Внутренние абстракции ядра: безопасные обёртки над указателями, блокировками, refcount, pinning.
- Рендеринг и графика: wgpu (кроссплатформенный WebGPU/Vulkan/Metal/DX12 backend), rend3.
- Игры: на Rust пишут игры и игровые движки с поддержкой Linux (Bevy, Fyrox, Amethyst).
- Новые драйверы: сетевые, USB, storage, сенсоры — безопасное ядро без use-after-free.
- Аудио и DSP: rodio, kira, cpal.
- WebAssembly: выполнение WASM‑модулей на Linux (wasmtime, wasmer).
- DevOps/инфраструктура: контейнерные рантаймы, файловые утилиты, CI‑инструменты.
- Сетевые сервисы: высокопроизводительные backend‑приложения под Linux (Axum, Actix).
- Security‑инструменты: сканеры, песочницы, анализаторы (Rust популярен в security‑комьюнити).
- Файловые системы и блочные устройства: есть исследования и эксперименты по FUSE‑драйверам на Rust.

Сложность:
- Порог входа выше среднего.
- Но после понимания модели владения продуктивность высокая.
- Отлично подходит для кода, где важна безопасность + скорость.

Итог: Rust — мощный системный язык, который сочетает скорость C с безопасностью на уровне высокоуровневых языков (Rust ведёт себя по скорости как C). Подходит для драйверов, системного ПО, сетевых сервисов и CLI. Linux уже официально поддерживает Rust, и будущее ядра включает постепенное расширение Rust‑подсистем для безопасных драйверов и новых модулей.

#misc #kernel
Debian тестирует Debusine, систему индивидуальных репозиториев в стиле PPA

Новость: https://www.opennet.ru/opennews/art.shtml?num=64446

#debian #news
Спасибо, что читаете канал и остаётесь здесь — ваша поддержка всегда придаёт сил. Я продолжаю собирать здесь полезные материалы по Linux, чтобы канал оставался уютным и полезным. Ведение канала требует времени и вложений, но я делаю всё бесплатно и без рекламы. Если мой канал помогает и вдохновляет вас, и вы хотите как‑то поддержать, даже небольшой вклад имеет значение. Все средства пойдут на новый ноутбук — мой основной рабочий инструмент. Спасибо!

Поддержать канал:
2202 2036 6907 4603

#info
Скоро новый год! :D
С новым 2026 годом, друзья! На календаре 01/01/2026 — самое время немного выдохнуть, расслабиться и позволить себе заслуженный отдых. В этом году Linux отмечает 35 лет, Debian — 33, а Ubuntu исполняется 22 года, напоминая нам, что великие вещи создаются сообществом и живут десятилетиями. Пусть 2026 принесёт вам стабильных релизов, минимум багов и бесконечный поток вдохновения. Желаю вам новых идей, удачных коммитов и получать удовольствие от IT и Linux.

Happy New Year, geeks! 👺🎉

#info
Please open Telegram to view this post
VIEW IN TELEGRAM
Я составил список открытых игр для Debian/Ubuntu и рассмотрел самые достойные проекты, которые можно установить прямо из репозиториев. В него вошли стратегии, платформеры, гонки, шутеры и другие популярные открытые игры. Это не полный перечень, а лишь подборка самых интересных и качественных игр (на мой взгляд). Возможно, кому‑то пригодится и поможет открыть для себя новый опыт. Прежде чем углубляться в игры для Linux, помните: это не Steam, а лишь игры, созданные энтузиастами (just for fun), не нужно это критиковать и обесценивать :)

Первым делом советую обратить внимание на культовые проекты в Open Source среде: SuperTux, SuperTuxKart, Wesnoth, 0 A.D., OpenArena, Freeciv.

> Список

#games #opensource #fun
ИИ нас заменит? (нет)

Сейчас много шума вокруг ИИ: массовые заголовки, заявления о "конце профессии программиста" и сравнения с промышленной революцией. Но если убрать эмоции, картина становится гораздо спокойнее.

Технологии всегда приходили волнами. В музыке появлялись синтезаторы — и все говорили о конце живых музыкантов. Потом появились DAW (Digital Audio Workstation) — и предсказывали исчезновение композиторов. Но результат был противоположным: инструменты расширили возможности, а не заменили людей. С ИИ сейчас происходит то же самое.

В программировании история похожа. Появление высокоуровневых языков "убивало" ассемблерщиков. Фреймворки "убивали" ручную веб‑разработку. GitHub, StackOverflow и автодополнение считались "костылями". Но в итоге разработчики стали писать быстрее и чище, а системы, которые мы строим, стали гораздо сложнее и мощнее.

ИИ — это следующая ступень. Он ускоряет рутину:
- подсказывает варианты решения
- помогает со структурой
- генерирует шаблоны
- объясняет код
- ищет баги

Но ключевые вещи остаются за человеком:
- архитектура
- постановка задач
- понимание контекста
- инженерное мышление
- ответственность за продукт

ИИ хорошо генерирует, но плохо понимает. Он не знает, что нужно твоему проекту, пользователю, бизнесу или инфраструктуре. Он не создаст архитектуру под реальные ограничения, не возьмёт на себя риски и не сгладит непредвиденные углы производства. Это делает инженер (человек).

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

Бояться нечего. Писать код, учиться новому, экспериментировать с Linux и инфраструктурой — всё это по‑прежнему важно. ИИ остаётся инструментом — мощным, удобным, но всё ещё инструментом. А инструменты, как показывает история, не вытесняют инженеров. Они делают их сильнее.

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

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

#thoughts
Фаззинг

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

Смысл: найти баги, о которых никто не подумал. Используют для поиска уязвимостей, переполнений, неправильных проверок входа и т.п.

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

Фаззер не просто "генерит мусор". Современные фаззеры умные:
- анализируют покрытие кода
- умеют воспроизводить найденные сбои
- минимизируют крэши до маленьких тестов
- подстраивают ввод так, чтобы пройти новые ветки

Например, syzkaller специально создан для фаззинга ядра Linux. Он генерирует последовательности системных вызовов, которые приводят ядро в нестабильное состояние. Так находят race‑conditions, use‑after‑free, deadlocks.

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

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

#misc #theory
Руководство_по_созданию_пакетов_Debian.pdf
460.9 KB
Руководство по созданию пакетов Debian. Краткое и понятное руководство.

Примечание: Знаю, что уже выкладывал, просто нужно ещё раз продублировать в виде PDF.

#debian #books
Анализ исправления ошибок в ядре Linux - в среднем ошибки замечают через 2 года

Новость: https://www.opennet.ru/opennews/art.shtml?num=64574

#kernel #news
Bash_и_кибербезопасность.pdf
4.8 MB
Bash и кибербезопасность. Атака, защита и анализ из командной строки Linux.

#books #shell
В Debian 14 намерены прекратить поставку GTK2

Новость: https://www.opennet.ru/opennews/art.shtml?num=64618

#debian #news
Сладкопопые и тут свой флаг впихнули! =) Ладно, на самом деле речь не про ЛГБТ.

В данном случае это не просто радужный флаг, а пиратский флаг в радужных цветах. Такой флаг иногда используется в IT‑сообществе, особенно среди сторонников свободного программного обеспечения (FOSS), как неформальный мем про "пиратство" в контексте борьбы за свободу информации, открытый код и против закрытых проприетарных технологий.

Пиратский флаг в радужных цветах — это именно внутренняя шутка или символ внутри FOSS‑культуры, а не официальный знак. Он сочетает в себе:

- Пиратскую символику (череп и кости) — как метафору борьбы за свободу информации.

- Радужные цвета — как символ открытости, разнообразия и дружелюбия, без привязки к ЛГБТ.

#debian #opensource
Новые версии Debian 13.3 и 12.13 🥳

Новость: https://www.opennet.ru/opennews/art.shtml?num=64585

#debian #news
Please open Telegram to view this post
VIEW IN TELEGRAM
Ну так-то получше будет, да мужики? Это не фотошоп, так и было! :D
GitHub Pages

Это встроенный в GitHub хостинг статических сайтов, который автоматически публикует HTML, CSS и JavaScript прямо из репозитория. Он удобен для личных страниц, документации и простых проектов, не требует отдельного сервера и обновляется при каждом пуше.

Custom Domain позволяет привязать к сайту на GitHub Pages своё собственное доменное имя. Для этого нужно прописать нужные DNS‑записи у своего регистратора (обычно A или CNAME, указывающие на GitHub), затем указать домен в настройках Pages. GitHub автоматически выдаёт бесплатный HTTPS через Let's Encrypt.

Чтобы использовать GitHub Pages для персонального сайта, нужно создать репозиторий с именем user.github.io, где вместо user используется твой логин GitHub. Всё, что лежит в этом репозитории, автоматически становится доступным по адресу https://user.github.io

Я например использую GitHub Pages для своей сайт-визитки, очень простенький сайт и репозиторий для наглядности.

> Документация

#misc
Какие ИИ я использую?

Мне очень нравится Mistral. Он отлично обрабатывает большие объёмы текста — можно кинуть довольной большой скрипт, и он спокойно выдаст общую картину. Например, веб-версия ChatGPT такие объёмы не принимает и жалуется, что сообщение слишком большое, приходится сокращать. Я использую платную версию Mistral (из РФ оплату не принимает).

В Telegram у меня подключена платная и самая мощная версия GPT — использую её для коротких и быстрых запросов: советы, обсуждения, жизнь, рекомендации, код, решения. Работает отлично, ошибается редко, полностью устраивает.

Иногда использую бесплатную веб‑версию ChatGPT — для простых вопросов.

Бывает, что рабочая задача настолько сложная, что я подключаю сразу три ИИ. Заставляю их спорить, анализировать и дополнять ответы друг друга. Это называется промпт‑инженеринг. И он тоже выматывает: вокруг тебя пролетают тонны информации, всё нужно учитывать, потому что ИИ может ошибаться и дезинформировать. На проверку результатов (тестирование) уходит много времени.

Часто я сам не знаю, чего хочу. И мне нравится, что ИИ всё равно меня понимает — несмотря на мою косноязычность, ошибки в грамматике и иногда полную белиберду. Я нередко составляю промпты в одном ИИ, потом передаю их другому — и он уже идеально понимает, что мне нужно, и выдаёт результат гораздо лучше.

И да, чтобы пользоваться искусственным интеллектом, нужно самому обладать интеллектом. Нужно уметь формулировать запросы, чётко объяснять, чего ты хочешь, желательно максимально подробно. Этому нужно учиться.

#misc
Что такое ИИ агенты?

AI‑агенты — это по сути автономные помощники, которые могут выполнять задачи без постоянного ручного контроля. Они умеют анализировать окружение, принимать решения, вызывать инструменты, писать код, запускать скрипты, общаться с API и доводить задачу до результата.

Где используются:
- автоматизация рутины у разработчиков и админов
- CI/CD и тестирование
- сопровождение инфраструктуры
- генерация и рефакторинг кода
- мониторинг и реакция на инциденты
- внутренняя автоматизация в компаниях

Заменяют ли они инженеров? Нет. Они пока что работают как умные ассистенты, которым всё равно нужен человек — поставить задачу, проверить, скорректировать. Это ускорение, а не замена.

Есть ли они на GitHub/GitLab? Да. Примеры: OpenAI, OpenDevin, AutoGPT, CrewAI, LangChain Agents, и десятки кастомных фреймворков. Их можно разворачивать локально, натравливать на свои проекты и подключать к CI.

В целом это просто новая ступень автоматизации, а не "конец профессии".

#misc