Обновить
363.78

Linux *

Пишем под *nix

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

Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 3

Время на прочтение11 мин
Количество просмотров13K
Продолжаем приключения.

Краткое содержание предыдущих частей


Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. На этом описание core.h почти закончено, но оно было бы не полным без nullptr.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Итак, продолжим.
Читать дальше →

Linux kernel 4.18: что готовит грядущий релиз

Время на прочтение3 мин
Количество просмотров27K
Недавно в нашем блоге мы рассказывали о релизе Linux kernel 4.17 и его основных фичах. В этом посте речь пойдет о версии 4.18, которая выйдет в августе.

О том, что будет сделано и что уже реализовано — рассказываем под катом.

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

SUSE Linux вновь меняет владельца — почему?

Время на прочтение4 мин
Количество просмотров20K
В начале месяца британская компания Micro Focus объявила о продаже старейшей компании-разработчика дистрибутивов SUSE Linux за 2,5 млрд долларов. Обладателем SUSE стала шведская фондовая группа EQT, занимающаяся инвестициями в технологические компании.

Далее — почему заключили сделку, и как отреагировало сообщество.

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

Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 2

Время на прочтение13 мин
Количество просмотров13K
Да - да, вот с этим девизом я и ринулся в бой.

Краткое содержание предыдущих частей


Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Помимо стандартных заголовочных файлов type_traits, thread, mutex, chrono так же были добавлены nullptr.h реализующий std::nullptr_t и core.h куда были вынесены макросы, относящиеся к компиляторозависимому функционалу, а так же расширяющие стандартную библиотеку.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются
Читать дальше →

Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Введение

Время на прочтение5 мин
Количество просмотров24K
Да - да, вот с этим девизом я и ринулся в бой.

Вместо предисловия


Пожалуй с этой картинки должно начинаться любое повествование о boost, Loki, самостоятельных, да и так же поставляемых с компиляторами реализациях стандартной библиотеки C++.

Да-да, и если вы думали что разработчики стандартной библиотеки для того же g++, clang, Visual Studio или, прости господи, C++ Builder (бывший Borland, а нынешний Embarcadero) — гуру, что не городят костылей, не ломают стандарт под свой компилятор и не пишут велосипедов, то, скорее всего, вы не так активно используете стандартную библиотеку C++ как вам казалось.

Статья написана как рассказ, и содержит много «воды» и отступлений, но я надеюсь, что мой опыт и получившийся код будет полезен тем, кто столкнулся с похожими проблемами при разработке на C++, особенно на старых компиляторах. Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

https://github.com/oktonion/stdex (коммиты и конструктивная критика приветствуются)

А теперь, обо всем по порядку.
Читать дальше →

Вся правда о linux epoll

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

Ну или почти вся...



Я считаю, что проблема в современном интернете — это переизбыток информации разного качества. Найти материал по интересующей теме не проблема, проблема отличить хороший материал от плохого, если у вас мало опыта в данной области. Я наблюдаю картину, когда очень много обзорной информации "по верхам" (практически на уровне простого перечисления), очень мало углубленных статей и совсем нет переходных статей от простого к сложному. Тем не менее именно знание особенностей того или иного механизма и позволяет нам сделать осознанный выбор при разработке.


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


Anyone can wield an axe, but it takes a true warrior to make it sing melees melody.

Я предполагаю, что читатель знаком с epoll, по крайней мере прочел страницу man. О epoll, poll, select написано достаточно много, чтобы каждый кто разрабатывал под Linux, хоть раз о нем слышал.

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

Раскрытие памяти (Memory Disclosure) ядра в современных ОС

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

Под катом расположен перевод вступительной части документа Detecting Kernel Memory Disclosure with x86 Emulation and Taint Tracking (Статья Project Zero) от Mateusz Jurczyk.


В переведенной части документа:


  • специфика языка программирования C (в рамках проблемы раскрытия памяти)
  • специфика работы ядер ОС Windows и Linux (в рамках проблемы раскрытия памяти)
  • значимость раскрытия памяти ядра и влияние на безопасность ОС
  • существующие методы и техники обнаружения и противодействия раскрытия памяти ядра

Хотя в документе пристально рассматриваются механизмы общения привилегированного ядра ОС с пользовательскими приложениями, суть проблемы можно обощить для любой передачи данных между различными доменами безопасности: гипервизор — гостевая машина, привилегированный системный сервис (демон) — GUI приложение, сетевые клиент — сервер и т.д.


КДПВ

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

Контейнеры для взрослых (Часть 01): Практический гид по терминологии

Время на прочтение16 мин
Количество просмотров28K
Вы можете спросить, зачем разбираться с терминологией, если концепция контейнеров выглядит вполне простой и понятной? Однако, довольно часто неверное использование терминов создает препятствия на пути к освоению контейнеров. Например, люди часто считают, что термины «контейнеры» и «образы» взаимозаменяемы, хотя на самом деле между ними есть важные концептуальные различия. Другой пример: в мире контейнеров «репозиторий» означает вовсе не то, что вы думаете. Кроме того, контейнерные технологии – это гораздо больше, чем только docker.



Так что, не владея терминологией, будет сложно понять, чем docker отличается от CRI-O, rkt или lxc/lxd; либо оценить роль Open Container Initiative в деле стандартизации контейнерных технологий.
Читать дальше: Практический гид по контейнерной терминологии

Обзор уязвимости в Winbox от Mikrotik. Или большой фейл

Время на прочтение6 мин
Количество просмотров50K
Всем доброго времени суток, наверняка многие уже слышали про недавнюю уязвимость в роутерах Mikrotik, позволяющую извлечь пароли всех пользователей. В этой статье я бы хотел подробно показать и разобрать суть данной уязвимости.
Читать дальше →

Хакеры скомпрометировали репозитории Gentoo Linux на GitHub

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


28 июня 2018, приблизительно в момент времени 20:20 UTC, неустановленые субьекты заполучили контроль над административными аккаунтами Gentoo на Github и произвели модификации кода в репозиториях и на справочных страницах. Данная информация распространена в официальной рассылке проекта Алеком Уорнером. В данный момент команда разработчиков работает над расследованием событий и устранением нарушений.

Все зеркала проекта Gentoo на Github следует считать скомпрометированными. Если вы что-то скачивали с этих ресурсов после даты взлома — вы находитесь в зоне риска. Сама инфраструктура проекта Gentoo, по имеющейся информации, не затронута.

Алек Уорнер отмечает, что обычно все легитимные коммиты в код Gentoo подписаны цифровой подписью, поэтому их можно верифицировать с помощью утилит git. GitHub не является основным местом разработки Gentoo Linux, а весь код и коммиты просто зеркалируются из репозиториев на серверах обственной инфраструктуры Gentoo.
Читать дальше →

ИОК: библиотеки GCrypt и KSBA как альтернатива OpenSSL с поддержкой российской криптографии. Продолжение

Время на прочтение26 мин
Количество просмотров3.2K
Мы продолжаем разговор об альтернативе openssl и речь пойдет о библиотеке libksba, которая входит в состав GnuPG. Библиотека libksba предоставляет высокоуровневый интерфейс для работы с такими объектами инфраструктуры открытых ключей как сертификаты, запросы на сертификаты, электронная подпись (CMS/PKCS#7). Однако, в отличии от библиотеки GCrypt, в которой реализована поддержка российских криптографических алгоритмов, то в libksba отсутствует реализация рекомендаций ТК-26 по использованию алгоритмов ГОСТ Р 34.10-2001/2012, ГОСТ Р 34.11-94/2012 в таких объектах ИОК как сертификаты, запросы на сертификаты, объекты PKCS#7/CMS (подписанные и/или шифрованные документы и т.п).
Читать дальше →

Так ли мал Alpine 3.8 Docker для Python 3 runtime

Время на прочтение8 мин
Количество просмотров30K
Совсем недавно произошёл релиз минималистичного Alpine Linux 3.8. Очень часто данный linux образ используют в докере, собирая очень компактные окружения для runtime.

Сегодняшняя статья будет рассмотрена в срезе использования runtime системы в докере для Python 3.6.X версий, с различным составом пакетов pip. А так же мы соберём самый новый Python 3.7 в Alpine.

В конце статьи будет представлен размер образа image, занимаемый на диске, в зависимости от состава пакетов pip и произведено сравнение между дистрибутивами Alpine 3.8, Debian 9, Fedora 28.
Читать дальше →

Разработка интерфейсных плат на SoC Xilinx Zynq 7000 для записи речи в аналоговом и цифровом формате

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


В этой статье мы поделимся опытом разработки интерфейсных плат блока сопряжения на базе SoC ARM+FPGA Xilinx Zynq 7000. Платы предназначались для записи речевых сигналов в аналоговом и цифровом формате PRI/BRI (ISDN, E1/T1). Само конечное устройство будет использоваться для фиксации переговоров в гражданской авиации.
Читать дальше →

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

epoll и Windows IO Completion Ports: практическая разница

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

Введение


В этой статье мы попробуем разобраться чем на практике отличается механизм epoll от портов завершения (Windows I/O Completion Port или IOCP). Это может быть интересно системным архитекторам, проектирующим высокопроизводительные сетевые сервисы или программистам, портирующим сетевой код с Windows на Linux или наоборот.

Обе эти технологии весьма эффективны для обработки большого количества сетевых соединений.

Они отличаются от других методов по следующим пунктам:

  • Нет ограничений (кроме общих ресурсов системы) на общее количество наблюдаемых дескрипторов и типов событий
  • Масштабирование работает достаточно хорошо — если вы уже мониторите N дескрипторов, то переход к мониторингу N + 1 займёт очень мало времени и ресурсов
  • Достаточно легко задействовать пул потоков для параллельной обработки происходящих событий
  • Нет никакого смысла использовать при единичных сетевых соединениях. Все преимущества начинают проявляться при 1000+ соединений

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

(Upd: данная статья — перевод)

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

select / poll / epoll: практическая разница

Время на прочтение10 мин
Количество просмотров83K
При проектировании высокопроизводительных сетевых приложения с неблокирующими сокетами важно решить, какой именно метод мониторинга сетевых событий мы будем использовать. Их есть несколько и каждый хорош и плох по-своему. Выбор правильного метода может быть критически важной вещью для архитектуры вашего приложения.

В этой статье мы рассмотрим:

  • select()
  • poll()
  • epoll()
  • libevent
Читать дальше →

Инфраструктура открытых ключей: библиотека GCrypt как альтернатива OpenSSL с поддержкой российской криптографии

Время на прочтение25 мин
Количество просмотров14K
Приближается вторая половина 2018 года и скоро должен наступить «2000-й год» в ИОК на базе российской криптографии. Это связано с тем, что
использование схемы подписи ГОСТ Р 34.10-2001 для формирования подписи после 31 декабря 2018 года не допускается!
Уже сегодня не имеет смысла получать сертификаты с подписью по ГОСТ Р 34.10-2001.
Читать дальше →

Неканонический режим терминала и неблокирующий ввод на nasm

Время на прочтение5 мин
Количество просмотров11K
Идея написания игры на языке ассемблера, конечно, вряд ли придёт кому-то в голову сама собой, однако именно такая изощренная форма отчетности уже долгое время практикуется на первом курсе ВМК МГУ. Но так как прогресс не стоит на месте, то и DOS, и masm становятся историей, а nasm и Linux выходят на первый план подготовки бакалавров. Возможно, лет через десять руководство факультета откроет для себя python, но речь сейчас не об этом.

Программирование на ассемблере под Linux, при всех своих плюсах, делает невозможным использование прерываний BIOS'a и как следствие обделяет функциональностью. Вместо них приходится использовать системные вызовы и контактировать с api терминала. Поэтому написать симулятор блек-джека или морского боя не вызывает больших трудностей, а с самой обычной змейкой возникают проблемы. Дело в том, что система ввода-вывода контролируется терминалом, а системными функциями Си напрямую пользоваться нельзя. Поэтому при написании даже довольно простых игр рождаются два камня преткновения: как переключить терминал в неканонический режим и как сделать ввод с клавиатуры неблокирующим. Об этом и пойдёт речь в статье.
Читать дальше →

Обзор Ubuntu DSVM: алхимия ни при чём

Время на прочтение13 мин
Количество просмотров4.9K
В течение последних месяцев в нескольких проектах наш партнер использовал виртуальную машину для обработки и анализа данных (DSVM) на базе Ubuntu от Microsoft. Он решил попробовать ее в деле уже используя продукт Amazon. Рассмотрим все плюсы и минусы, а также сравним наш инструмент с похожими решениями. Присоединяйтесь!

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

Пишем модуль ядра Linux: I2C

Время на прочтение15 мин
Количество просмотров40K
Хабр, привет!

Данная статья посвящена разработке I2C (Inter-Integrated Circuit) модуля ядра Linux. Далее описан процесс реализация базовой структуры I2C драйвера, в которую можно легко добавить реализацию необходимого функционала.

Опишем входные данные: I2C блок для нового процессора «зашитый» на ПЛИС, запущенный Linux версии 3.18.19 и периферийные устройства (EEPROM AT24C64 и BME280).

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


Рисунок 1. Временная диаграмма сигналов шины I2C
Читать дальше →

Работа с массивами в bash

Время на прочтение8 мин
Количество просмотров130K
Программисты регулярно пользуются bash для решения множества задач, сопутствующих разработке ПО. При этом bash-массивы нередко считаются одной из самых непонятных возможностей этой командной оболочки (вероятно, массивы уступают в этом плане лишь регулярным выражениям). Автор материала, перевод которого мы сегодня публикуем, приглашает всех желающих в удивительный мир bash-массивов, которые, если привыкнуть к их необычному синтаксису, могут принести немало пользы.

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

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