Обновить
380.22

Linux *

Пишем под *nix

Сначала показывать
Порог рейтинга
Уровень сложности

Как работает компьютер: глубокое погружение (на примере Linux)

Уровень сложностиСложный
Время на прочтение48 мин
Количество просмотров199K



Введение


Я делала много вещей с компьютерами, но в моих знаниях всегда был пробел: что конкретно происходит при запуске программы на компьютере? Я думала об этом пробеле — у меня было много низкоуровневых знаний, но не было цельной картины. Программы действительно выполняются прямо в центральном процессоре (central processing unit, CPU)? Я использовала системные вызовы (syscalls), но как они работают? Чем они являются на самом деле? Как несколько программ выполняются одновременно?


Наконец, я сломалась и начала это выяснять. Мне пришлось перелопатить тонны ресурсов разного качества и иногда противоречащих друг другу. Несколько недель исследований и почти 40 страниц заметок спустя я решила, что гораздо лучше понимаю, как работают компьютеры от запуска до выполнения программы. Я бы убила за статью, в которой объясняется все, что я узнала, поэтому я решила написать эту статью.


И, как говорится, ты по-настоящему знаешь что-то, только если можешь объяснить это другому.


Более удобный формат статьи.

Читать дальше →

Сам себе Linux смартфон: Как я выкинул Android и написал свою прошивку с нуля

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров88K
image

К огромному сожалению, старые смартфоны всё чаще и чаще находят своё пристанище в мусорном баке. К прошлым, надежным «друзьям» действует исключительно потребительское отношение — чуть устарел и сразу выкинули, словно это ненужный мусор. И ведь люди даже не хотят попытаться придумать какое-либо применение гаджетам прошлых лет! Отчасти, это вина корпораций — Google намеренно тормозит и добивает довольно шустрые девайсы. Отчасти — вина программистов, которые преследуют исключительно бизнес-задачи и не думают об оптимизации приложений совсем. В один день я почувствовал себя Тайлером Дёрденом от мира IT и решил бросить вызов проприетарщине: написать свою прошивку для уже существующего смартфона с нуля. А дабы задачка была ещё интереснее, я выбрал очень распространенную и дешевую модель из 2012 года — Fly IQ245 (цена на барахолках — 200-300 рублей). Кроме того, у этого телефона есть сразу несколько внешних шин, к которым можно подключить компьютер или микроконтроллер, что даёт возможность использовать его в качестве ультрадешевого одноплатника для DIY-проектов. Получилось ли у меня реализовать свои хотелки? Читайте в статье!
Читать дальше →

Как задеплоить монолитный pet проект на Java с 0 и не сойти с ума… Часть 1

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров7.8K

Перерыв в работе заставил меня задуматься над смыслом выражения "Сапожник без сапог". Будучи Java Backend Developer с 3-ех летним стажем я не имею на руках ни одного pet проекта. Конечно, на GitHub у меня есть какие-то мелкие проектики, но они не доведены до конца и кроме того как просто висеть на доске "почета" они больше ничего и не могут. С этой мыслёй я пошел в интернет гуглить "как мне задеплоить свое приложение?".

Скажу сразу, это статья содержит шаги по развертыванию Java приложения с помощью GitHub Actions на серверах AWS EC2 и это моя интрерпретация тех инструкций, которые я находил в интернете. Собственно это статья содержит для новичков, кто просто не делал никогда деплой своего приложения, но очень хочет в сжатые сроки похвастаться своим результатом.

Читать далее

Монтаж видео в Linux — обзор свободных редакторов

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров34K

Когда я впервые столкнулась с Linux, я и не представляла, что буду делать видеоролики в этой системе. И вот сейчас я использую различные инструменты работы с видео в операционной системе «Альт». В этой статье поделюсь личным опытом.

Изучив основной набор программ дистрибутива, я решила дополнить список интересующими меня инструментами. В ОС «Альт» программные пакеты управляются утилитой APT (Advanced Packaging Tool). С помощью неё (#apt-get install) я установила открытые инструменты из хранилища Сизиф. Для записи звука выбрала Audacity, для подготовки видеоматериала - OBS Studio. Монтаж и сведение, на мой взгляд, удобно выполнить в Kdenlive. Программы для создания видео в Linux разной сложности: хорошо сразу определить, что больше подходит.

Читать далее

Страх и ненависть в разработке или как не надо входить в хату

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров12K

Планировавшаяся под специфику Embedded Linux статья оказывается универсальной для многих других професиий

Читать далее

KivyMD на «кухне»

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.5K

Доброго времени суток, всем!

Почему-то эта английская фраза, вынесенная в эпиграф, которая обычно используется, чтобы сказать о большом количестве вещей, которые были упакованы, собраны, и возможно даже украдены, в её второй части - " Kitchen Sink", стала общим обозначением программных демо-проектов. Вот и я не стал исключением, не стал придумывать название и представляю свою демонстрацию виджетов KivyMD, то бишь "кухонную раковину".

Для тех, кто не в курсе, поясню, что KivyMD - это "фреймворк на языке Python для кроссплатформенной разработки Kivy и библиотеки виджетов в стиле Google Material Design". Или же простыми словами, вы можете собрать вполне приличное, хорошо выглядящее приложение, как для Windows, так и для Андроид, Linux and еtс.

На Хабре есть много статей посвященных отдельным частям Kivy и KivyMD. Но, полазив в том числе по Интернет, я не нашел хорошего демонстрационного примера. Все проекты либо заточены по старую версию KivyMD и сходу не работают, либо достаточно куцые. Поэтому решил "наполнить раковину" сам. ;)

Проект лежит здесь: https://github.com/longvalery/KitchenSink.KivyMD.git

Он собран под текущую на данный момент версию KivyMD - kivy.require("2.2.1")

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

Но позволю себе дать некоторые пояснения общего характера, а затем кратко описать элементы приложения.

Итак, я специально постарался сделать приложение в одном файле и использовать по максимуму картинки и иконки из Интернет, чтобы легче было переносить проект и собирать с помощью Buildozer. К сожалению, не для всех элементов это получилось, поэтому для корректной работы нужно всё же тащить ещё директорию assets.

Читать далее

В России не любят Линукс, а я не люблю виртуальные машины. Что делать?

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров37K

В России не любят Линукс. Студенты и корпорации всячески отлынивают его использовать, даже если Линукс насаждают преподаватели или госзаказчики. Но есть область, в которой Линукс придется полюбить. Это разработка микросхем. Даже внутри Apple и Microsoft инженеры используют Synopsys Design Compiler / IC Compiler и Cadence Genus / Innovus, у которых вообще нет версий для Windows и MacOS, только для Linux. Да, я знаю, что Synopsys и Cadence ушли из России. Но даже открытые тулы для синтеза ASIC - Open Lane - есть только под Linux.

Я уже несколько лет использую для семинаров по FPGA загружаемые через USB SSD диски, на который ставится весь необходимый софтвер. Такое решение позволяет избежать агонии первого дня семинара, когда приходит куча народу со своими ноутбуками, три часа ставят Quartus, а потом мучаются с драйверами USB Blaster для китайского контрафактного клона, который без танцев с бубном не хотят поддерживать не Win10, ни Linux, ни особенно Win11, который хочет подписанные драйверы.

А как же виртуальные машины? - спросите вы. С моей точки зрения они вносят дополнительный уровень танцев с бубном. И это не мое дремучее мнение - так же считает мой приятель, который работал над виртуализацией в Микрософте. То оно USB порт не пробивает, то еще какие-нибудь глюки. Плюс учить дополнительные опции, качать и копировать файлы в десятки гигабайт. А тут вставил в USB порт, и если загрузится, то заработает.

Конечно, загружаемые SSD тоже не без проблем: тут и Legacy BIOS boot против UEFI boot, и Secure Boot с Bit Locker, и зловещий "хвост GPT", и отрубание всего из-за скачка напряжения в USB хабе - но с этими проблемами мы методично разобрались. Решение я и описываю в этой заметке, предназначенной в первую очередь для учеников и руководителей кластеров в Школе Синтеза Цифровых Схем, которая начинается с сентября в 14 российских городах (объявления и точных дат еще нет, но уже записалось 200 учеников).

Прежде всего: как выглядит загружаемый SSD? А вот так:

Читать далее

Подключаем дисплей к любому одноплатнику с SPI: большой мануал о поиске экранчиков для ваших проектов

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров55K
image

Сейчас появилось достаточно много различных дешевых одноплатников с очень достойными характеристиками, которые вполне можно назвать экономичными и портативными. Однако очень часто встает вопрос вывода изображения на дисплей: к сожалению, в подобные устройства обычно ставят урезанные версии чипсетов без видеовыхода на обычные матрицы. Конечно в них практически всегда есть HDMI, но это совершенно не выход для портативного устройства: прожорливый чип скалера будет очень негативно влиять на время работы от АКБ. Да и сами подобные дисплеи очень дорогие: почти 2.000 рублей за матрицу со скалером — это действительно бьет по карману. Сегодня я расскажу Вам о существующих протоколах для дисплеев, подскажу, как применить экранчики от старых навигаторов/мобильников и мы подключим с вами SPI-дисплей к одноплатнику без видеовыхода. Причем мы реализуем как просто библиотеку, которая позволяет выводить произвольную графику из ваших программ, так
и службу, которая будет напрямую копировать данные из фреймбуфера и преобразовывать в формат для нашего дисплея. Интересно? Тогда жду вас в статье!
Читать дальше →

Android Generic Kernel Image — как Google может (теоретически) заменить ядро Linux

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров18K

Привет, хабр! Все знают, что Android использует ядро Linux. В этой статье мы разберёмся как современные (12+) версии Android позволяют Google обновить ядро Linux без участия вендора устройства, и как при помощи этого же механизма Google может обновить ядро с Linux на Fuchsia.

Читать далее

Исследуем внутренности Linux версии 0.01

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров37K

Ядро Linux часто упоминают как ужасно масштабное опенсорсное ПО. На момент написания этой статьи последняя версия 6.5-rc5 состоит из 36 миллионов строк кода. Не нужно говорить, что Linux — это плод упорного многолетнего труда множества участников проекта.

Однако первая версия Linux, v0.01, была довольно маленькой. Она состояла всего из 10239 строк кода. Если исключить комментарии и пустые строки, то остаётся всего 8670 строк. Это достаточно малый объём для анализа и хорошее начало для изучения внутренностей ядер UNIX-подобных операционных систем.

Я получил удовольствие от чтения кода v0.01. Это походило на посещение Музея компьютерной истории в Маунтин-Вью — я наконец-то убедился, что легенды верны! Я написал эту статью, чтобы поделиться с вами этим восхитительным опытом.

Читать далее

Замешиваем файлы в тэги. Часть 2

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.2K

Продолжаем создавать модуль ядра в Линукс на примере виртуальной файловой системы.

Часть 1: Описание задачи, Модуль ядра

Часть 2: Модуль ядра, Регистрация файловой системы

Часть 3: Inode, Lookup

Что в результате получилось можно увидеть по ссылкам: демо-видео, код.

Продолжаем разбираться

Графические инструменты управления групповыми политиками в Linux

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров16K

Многие организации в России переходят на Linux-решения, и планируют каким-то способом управлять своим парком машин. В общих словах необходима массовая настройки операционных систем по некоторым шаблонам. На этот случай есть различные решения - от Ansible до Samba, но в этом материале я подробно расскажу про групповые политики от Alt. Постараюсь написать об интересных технических реализациях, собственных графических инструментах и, в двух словах, о сходстве и различии с другими популярными решениями.

Читать далее

Что происходит, когда запускаешь «Hello World» в Linux

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров30K

Сегодня я задумалась о том, что происходит, когда запускаешь в Linux простую программу «Hello World» на Python.

print("hello world")

Вот как это выглядит в командной строке:

$ python3 hello.py
hello world

Но внутри происходит гораздо больше. Я объясню, что там творится, и, что гораздо важнее, расскажу об инструментах, при помощи которых вы сами сможете исследовать происходящее. Мы воспользуемся readelf, strace, ldd, debugfs, /proc, ltrace, dd и stat. Я не буду рассматривать относящиеся к Python части, только объясню, что происходит при выполнении динамически компонуемых исполняемых файлов.
Читать дальше →

Ближайшие события

Что не так с Enterprise Linux

Время на прочтение5 мин
Количество просмотров12K
Enterprise Linux работает примерно по такой модели:

Принимается решение сделать мгновенный снимок неких восходящих свободных проектов по состоянию на определённую версию (это касается, в том числе, ядра Linux) и заложить этот снапшот в качестве основы для новой целостной версии, дистрибутива Enterprise Linux. Коллекция программ останется замкнута на уровне этих конкретных версий на протяжении всей службы этого релиза Enterprise Linux – а этот срок часто составляет 10 лет или даже больше.

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

Для этого релиза начинается следующий кусок сложной работы. Чтобы держать большой комплект софта максимально защищённым и при этом свободным от багов, не хуже, чем его вышестоящие аналоги, придётся постоянно месить код и выпускать новые и новые версии. Те, кто отвечают за поддержку вашего Enterprise-дистрибутива Linux, должны тщательно ориентироваться в океане изменений.
Читать дальше →

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров22K
image

Для многих разработчиков приложений далеко не секрет, что экосистема Android не предполагает написание полностью нативных приложений: в этой платформе очень многое завязано на Java и без ART можно запустить только простые службы без какого-либо интерфейса. Однако, есть один способ писать практически под «голый» Linux, не перекомпилируя ядро и при этом пользоваться самыми интересными фишками устройства без оверхеда в виде тяжелого Android: ускорение 3D-графики (OpenGLES), микшер звука, ввод с различных устройств, OTG, Wi-Fi и если очень постараться — даже 3G. Это открывает множество разных интересных применений старым устройствам: «железо» смартфонов зачастую гораздо мощнее современных недорогих одноплатников. Сегодня я покажу вам, как написать и запустить программу, которая полностью написанное на C без Android, на No-Name Android-смартфоне практически без модификаций. Интересно? Жду вас в статье!
Читать дальше →

Замешиваем файлы в тэги. Часть 1

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.3K

Давным, давно ... искал средство организации видео-файлов.

Чтобы можно было каждой киношке назначить какие-то маркеры, тэги. Выбирать файлы по наличию тэгов. Или наоборот - по отсутствию тэгов. Например: детектив, фантастика, не-ужасы.

Чтобы всё работало в обычном проигрывателе: кликнул "Открыть файл..."; выбрал Детектив, Фантастика, не-Ужасы; получил список фильмов и выбрал нужный. Без специальных файловых менеджеров и браузеров.

И тогда такое средство мне не нашлось. А сейчас ... сейчас решил сделать его сам.

Что в результате получилось можно увидеть по ссылкам: демо-видео, код.

Часть 1: Описание задачи, Модуль ядра

Часть 2: Модуль ядра, Регистрация файловой системы

Часть 3: Inode, Lookup

Часть 4: Inode-операции: symlink, unlink

Как это делалось

Свободное ПО теснит проприетарное

Время на прочтение9 мин
Количество просмотров4.5K

Преимущества свободного ПО (СПО) — защищенность и безопасность ИТ-инфраструктуры, высокое качество программного кода, широкий выбор аппаратных платформ, возможность быстрой адаптации к текущим потребностям бизнеса, открытые форматы.

Переход на СПО — мировой тренд. За рубежом этот процесс идет не один год и приобретает массовый характер. По результатам опроса 70 тысяч разработчиков на Stack Overflow, в 2022 году Linux как основную ОС использовали порядка 40% специалистов. Для сравнения, в 2018 году эта цифра составляла чуть более 23%.

В числе известных свободных программ стоит назвать широко распространенный веб-сервер Apache, ОС GNU/Linux, офисный пакет LibreOffice.org, браузер Mozilla Firefox, операционную систему FreeBSD. На СПО работают Google и Yandex.

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

Безопасный переход на СПО

Иногда у заказчиков возникают опасения, что миграция на СПО будет долгой и сложной, поскольку у продукта нет единого хозяина, в его разработке принимают участие разные команды. Здесь важно отметить, что безопасный и беспроблемный переход на СПО возможен только при наличии вендора, отвечающего за совместимость и качественную работу разнообразных решений в составе единой системы. Пример такого вендора — компания «Базальт СПО», разработчик ОС семейства «Альт».

Читать далее

Дизайнер не нужен. Правила создания красивых UI

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров20K


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

Такие же правила действуют в компьютерных интерфейсах. Чем проще — тем лучше. В этом смысле интересно посмотреть на новое поколение Linux-приложений в современном стиле с адаптацией под смартфоны (на КДПВ некоторые примеры), а также на свежие UI-фреймворки, которые продвигают современный стиль разработки.
Читать дальше →

Итак, вы установили fzf. Что дальше?

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров25K

Разработчики ПО — если не единственные, то практически единственные, кому очень просто создавать инструменты для улучшения своей профессиональной работы; однако со временем это усложняет жизнь людям, постоянно переключающимся между разными инструментами и не вкладывающим время в глубокое изучение своего инструментария. Имея глубокое уважение к негласным знаниям людей лучше меня, я всё же считаю, что отличная эвристика 80/20 заключается в том, чтобы изучать старые добрые инструменты Unix cat, ls, cd, grep и cut. (а если вам повезло устроиться на должность настоящего современного сисадмина, то ещё и sed с awk.)

Однако существуют инструменты, выгода от использования которых настолько мгновенна и ценность от применения настолько уникальна, что эвристика 80/20 полностью к ним неприменима. Один из них — это fzf. И меня очень печалит то, что многие скачивают его, запускают в командной строке «как есть», а потом просто мотают головой и произносят: «Я не понимаю».

Мне хотелось бы изменить ситуацию. Предположим, что вы работаете на более-менее стандартной машине с Ubuntu. Вы только что установили fzf при помощи стандартного скрипта установки. Что же дальше?
Читать дальше →

Как делается OpenSource: личный опыт

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров40K

Я - автор двух пакетов, входящих более-менее во все дистрибутивы Linux: sane-airscan и ipp-usb.

Кроме того, sane-airscan входит во все основные дистрибутивы BSD (FreeBSD, NetBSD и OpenBSD) и в ChromeOS. ipp-usb в ChromeOS не взяли потому, что он написан на Go, а у них там очень жестко с размером исполняемых файлов, вместо этого они написали свое на Rust, но предпочли бы взять моё изделие, если бы могли. Совсем недавно появился порт ipp-usb на FreeBSD, вероятно, другие BSD тоже скоро подтянутся.

Вместе эти два пакета образуют стек "бездрайверного" сканирования документов для Linux и *BSD, а в перспективе нескольких лет, когда старые сканеры, наконец, вымрут, вероятно других драйверов и не останется.

Кроме того, ipp-usb делает возможным "бездрайверную" печать на USB-устройствах.

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

В целом, я полагаю, продвижение OpenSource пакетов структурно близко к продвижению на рынок программных продуктов. Занимаясь этой деятельностью, очень хорошо начинаешь понимать разницу между (1) написать программу, которая работает для меня (2) написать программу, которую можно назвать продуктом (3) вывести продукт на рынок.

Первое занимает гораздо меньше времени, чем второе. Второе - гораздо меньше времени, чем третье.

Читать далее

Вклад авторов