Как стать автором
Обновить
48.99

Системное программирование *

Обеспечение работы прикладного ПО

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

LinuxCon 2015 и все, все, все: впечатления

Время на прочтение6 мин
Количество просмотров10K
Я не буду соревноваться в мастерстве написания репортажей с dzeban, вместе с которым мне посчастливилось побывать на конференции линукс-разработчиков LinuxCon Europe. Поэтому постараюсь просто осветить то, что мне больше всего запомнилось, и таким образом дополнить картину.



Мои впечатления не привязаны к хронологии конференции. Я в общих чертах расскажу про саму конференцию и самые интересные доклады со ссылками на презентации и соответствующие сайты. Прошу под кат.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии8

LinuxCon + CloudOpen + Embedded LinuxCon Europe 2015: как это было

Время на прочтение11 мин
Количество просмотров5.7K
Раз в год в Европе проходит событие, которое мечтают посетить все, кто хоть что-то знает про Linux. Событие, которое собирает вокруг себя самое большое сообщество, когда-либо существовавшее на этой планете. Сообщество энтузиастов, хакеров, инженеров, программистов, админов, корпоративных боссов, всех тех, кто имеет работу и хобби благодаря Linux и open source. Мы в НТЦ Метротек привыкли делиться знаниями и получать их, поэтому такое пропустить не могли. Дамы и господа, добро пожаловать в Дублин на тройную конференцию LinuxCon + CloudOpen + Embedded LinuxCon Europe 2015!


Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии7

Volker Simonis — Внутренности SAP JVM [Встреча JUG в Питере]

Время на прочтение3 мин
Количество просмотров8.2K
Уже в эту среду, 14 октября, в петербургском офисе компании Oracle состоится встреча JUG.ru c Фолькером Симонисом из SAP. Тема встречи — внутреннее устройство SAP JVM.

sap-jvm

Наверняка многие из вас слышали про SAP — немецкого гиганта, который делает разные корпоративные системы — бухучёт, контроль за производством, финансы, HR, кадры, управление складом и прочий «Кровавый энтерпрайз», который с большой вероятностью стоит в вашей организации, если ее численность превышает тысячу человек.

Фокус в том, что многие (если не все) из перечисленных решений так или иначе работают на Java, и соответственно внутри них крутится JVM. Прикол в том, что это их собственная JVM. Ну как собственная — в свое время она была лицензирована у Sun вместе с исходниками, из которых и разрабатывалась. В данный момент — она лицензируется у Oracle. Соответственно, это некоторый форк Oracle JDK / JVM со своими косынкой и секретаршами, лицензированный, совместимый и т.д. и т.п.

Однако это не только форк, но и порт, поддерживающий 7 CPU-архитектур: x86, x86_64, SPARC, PowerPC, Itanium, z/Arch and PA-RISC на семи разных операционках: OS X, Windows, Solaris, Linux, AIX, as400 and HP/UX. По заявлению SAP, они поддерживают единую систему конфигурирования, единое поведение, одинаковые плюшки и расширения, инструменты анализа и поддержи на всей этой аццкой комбинации платформ.



Как видно из этой таблички, они до сих пор поддерживают Java с 1.4 до 8 на всех упомянутых платформах. Например, Oracle поддерживает нынче только Java 8, а Azul и Red Hat, как я понимаю, только 6, 7 и 8.

Так вот, у нас большое счастье. В эту среду на питерском JUG Volker Simonis, наш большой друг и разработчик SAP JVM, будет в стандартном двухчасовом формате рассказывать про все это щастье. Он будет выступать на Joker и планировал прилетать в четверг, но мы специально попросили прилететь его на день раньше, чтобы сделать с ним отдельный JVM-ный ивент.
Подробности и регистрация на встречу
Всего голосов 16: ↑15 и ↓1+14
Комментарии2

Добавить системный вызов. Часть 4 и последняя

Время на прочтение10 мин
Количество просмотров8.9K
                                                                                    - Что-то беспокоит меня Гондурас...
                                                                                    - Беспокоит? А ты его не чеши.


В предыдущих частях обсуждения (1-я, 2-я и 3-я) мы рассматривали как, используя возможность поменять содержимое sys_call_table, изменить поведение того или иного системного вызова Linux. Сейчас мы продолжим эксперименты в сторону того, можно ли (и как) динамически добавить новый системный вызов в целях вашего программного проекта.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии24

Истории

О безопасности UEFI, часть шестая

Время на прочтение5 мин
Количество просмотров20K
Все хорошее и не очень хорошее когда-нибудь заканчивается, пришла пора понемногу заканчивать и этот цикл статей.
В этой предпоследней части речь пойдет о людях, пашущих на ниве безопасности UEFI с обеих сторон, о полезном в этом деле софте и его авторах и об источниках информации по теме для тех, кому она нужна. Заранее прошу прощения, если забуду упомянуть кого-то важного, поправьте меня в комментариях в таком случае.
Как всегда, ссылки на предыдущие части опуса для тех, кто их пропустил, остальных прошу под кат.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии3

Сетевые системные вызовы. Часть 3

Время на прочтение11 мин
Количество просмотров21K
Предыдущую часть обсуждения мы завершили на такой вот оптимистической ноте: «Подобным образом мы можем изменить поведение любого системного вызова Linux». И тут я слукавил — любого… да не любого. Исключение составляют (могут составлять) группа сетевых системных вызовов, работающих с BSD сокетами. Когда сталкиваешься с этим артефактом в первый раз — это изрядно озадачивает.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии2

«Мы можем лучше протестировать Java, чем Oracle» — интервью с Андреем Паньгиным из Одноклассников

Время на прочтение14 мин
Количество просмотров24K
Сегодня я приготовил для вас большое интервью с Андреем Паньгиным aka apangin, ведущим инженером Одноклассников. Андрей больше 6 лет проработал JVM-инженером в Sun Microsystems, в том числе, в команде HotSpot, а последние 5 лет работает в Одноклассниках, решая там вопросы, связанные с JVM и производительностью. Так что Андрей по праву считается одним из сильнейших JVM-щиков в России.



Андрей — эксперт в системном программировании, занимался системами хранения и системами передачи информации. Складывал кирпичики, которые лежат в основе портала Одноклассники и обеспечивают надежность и быстродействие сервисов.

Вот о чем мы поговорили с Андреем:

  • чего стоит переезд с Java 7 на Java 8;
  • что происходит с sun.misc.Unsafe;
  • архитектура Одноклассников;
  • инженерные компромиссы, шардинг и GC;
  • системы хранения данных и Cassandra;
  • в чем Одноклассники впереди планеты всей, а чему еще стоит поучиться у Google;
  • как стать крутым системным программистом.


(Я знаю, что начало затянутое. Будем работать над тем, чтобы быстрее раскачиваться и входить в тему.)

Для тех, кому опять некогда смотреть видео, под катом расшифровка интервью.
Читать дальше →
Всего голосов 56: ↑51 и ↓5+46
Комментарии7

По следам C++ Siberia: дракон в мешке

Время на прочтение7 мин
Количество просмотров23K
Конференции бывают разные. Некоторые собирают огромные толпы зрителей, другие могут быть интересны лишь полутора специалистам.

Забавно другое: часто бывает, что зал собирает большое количество слушателей, которым любопытна тема, они задают вопросы и впоследствии с энтузиазмом рассказывают о пережитом коллегам. В то же время, запись оного мероприятия собирает несоизмеримо меньше просмотров, чем котики на ютубе. Предполагаю, что видео банально теряются на просторах видеохостингов и не могут найти зрителей. Сей досадный факт обязательно надо исправлять!

На самом деле, пост не о том.

Так уж вышло, что мне довелось выступать на означенной конференции, где я на пальцах и с приплясываниями рассказывал, что такое LLVM, чем интересна нотация SSA, что такое IR код и, наконец, как так получается, что детерменированные на первый взгляд C++ программы, оказывается, провоцируют неопределенное поведение.

Кстати, этот доклад можно поставить пятым номером в серии статей про виртуальную машину Smalltalk. Многие просили подробнее рассказать о LLVM. В общем, убиваем всех зайцев сразу. Заинтересовавшимся, предлагаю «откинуться на спинку кресла», опционально налить чего-нибудь интересного и послушать. Обещаю, что больше часа времени я не отниму.

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


Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии10

О безопасности UEFI, часть пятая

Время на прочтение7 мин
Количество просмотров54K
После небольшого перерыва продолжаем разговор о безопасности UEFI. В этот раз речь пойдет о технологии SecureBoot, ее преимуществах и недостатках, об атаках на нее и защите от них.

Впервые о SecureBoot речь зашла в стандарте UEFI 2.2 в 2011 году, но окончательно все аспекты были реализованы в версии 2.3.1C в начале 2012 года. Основным разработчиком технологии была Microsoft, которая сразу же заявила, что для получения сертификата Windows 8 Ready для своей еще не выпущенной новой ОС требуется реализация и включение SecureBoot по умолчанию на всех новых ПК. Это заявление вызвало волну резкой критики со стороны сторонников свободного ПО, которая успешно докатилась и до Хабра.
Если вам интересно, чем именно закончилось противостояние MS и сообщества, как SecureBoot выглядит после почти 4 лет взросления, и какие атаки на него все еще возможны — добро пожаловать под кат.

Стоп, чуть не забыл: по доброй традиции, набор ссылок на предыдущие части, для тех, кто умудрился их пропустить.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии24

Модификация системного вызова. Часть 2

Время на прочтение6 мин
Количество просмотров16K
В предыдущей части мы договорились до того, что не экспортируемые имена ядра Linux могут использоваться в коде собственных модулей ядра с тем же успехом, что и экспортируемые. Одним из таких имён в ядре является селекторная таблица всех системных вызовов Linux. Собственно, это и есть основной интерфейс любых приложений к сервисам ядра. Теперь мы рассмотрим как можно модифицировать оригинальный обработчик любого системного вызова, подменить его, или внести разнообразие в его выполнение в соответствии с собственным видением.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии32

Делаем доступным все символы ядра Linux. Часть 1

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

Состояние дел


Это обсуждение относится к ядру операционной системы Linux, и представляет интерес для разработчиков модулей ядра, драйверов под эту операционную систему. Для всех прочих эти заметки вряд ли представляют интерес.
Читать дальше →
Всего голосов 31: ↑22 и ↓9+13
Комментарии28

О безопасности UEFI, часть четвертая

Время на прочтение6 мин
Количество просмотров32K
Продолжаем говорить о безопасности UEFI, на этот раз речь пойдет об атаках на NVRAM и защите от них.
Неплохая, казалось бы, идея о том, что на микросхеме SPI можно хранить настройки практически вечно, не полагаясь на ненадежную и зависящую от батарейного питания CMOS SRAM, сыграла с разработчиками UEFI весьма злую шутку, теперь NVRAM с каждой новой версией стандарта обрастает все большим количеством костылей и подпорок, и конца этому процессу не видно. Если вам интересно, что именно пытаются подпереть костылем — эта статья для вас.
По традиции, всех, кто еще по каким-то причинам не читал первые три части — рекомендую начать с них, остальных с нетерпением жду под катом.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии14

О безопасности UEFI, часть третья

Время на прочтение8 мин
Количество просмотров41K
Продолжаем разговор о безопасности UEFI.
На этот раз речь пойдет об опубликованной в конце 2014 года серьезной уязвимости в реализации ACPI S3 (Sleep Mode), ее эксплуатации и последствиях. Основная «фишка» этой уязвимости в том, что она вскрыла целый класс проблем безопасности UEFI, вообще не считавшихся до этого проблемами, и потому и заслуживает отдельной статьи.
Тем, кто не читал предыдущие статьи цикла — раз и два, предлагаю прочесть сначала их, остальных жду под катом.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии20

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

Rust, дисциплинирующий язык программирования

Время на прочтение9 мин
Количество просмотров50K
Здравствуйте, уважаемые читатели!

Жизнь не стоит на месте, и вот в «O'Reilly» задумались об издании первой фундаментальной книги о языке программирования Rust:



Заинтересовавшись этой темой, мы решили вынести на обсуждение перевод обзорной статьи о языке Rust, вышедшей в декабре 2014 года. Статья немного сокращена с учетом того, что некоторые ее отрывки уже устарели, однако автор хорошо рассматривает этот язык в контексте существующих альтернатив, подчеркивает его (безусловные) достоинства и (условные) недостатки.

Впрочем, чтобы было еще интереснее, оставим в комментарии к этой статье ссылку на другую статью о Rust, опубликованную в одном из наших любимых русскоязычных блогов по программированию. Для начала — заходите под кат.

Читать дальше →
Всего голосов 39: ↑37 и ↓2+35
Комментарии47

О безопасности UEFI, часть вторая

Время на прочтение9 мин
Количество просмотров42K
Продолжаем начатый в прошлом посте разговор о безопасности UEFI, об угрозах и имеющихся защитах от них.
В этот раз речь пойдет об SMM, о том, как он устроен и работает, и почему является желанной целью для атаки.
Пропустившим нулевую и первую части сего опуса — рекомендую прочесть сначала их, остальных покорно прошу под кат.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии12

О безопасности UEFI, части нулевая и первая

Время на прочтение9 мин
Количество просмотров87K
Когда-то давно, в начале 2014 года, я назвал состояние безопасности большинства реализаций UEFI "полумифическим". С тех пор минуло полтора года, дело осторожно двигается с мертвой точки, но до сих пор очень многие производители ПК для конечного пользователя не обращают на эту самую безопасность почти никакого внимания — «пипл хавает».
В этой статье речь пойдет о модели угроз и векторах атаки на UEFI, а также о защитах от перезаписи содержимого микросхемы BIOS — самой разрушительной по возможным последствиям атаки.
Если вам интересно, как устроена защита UEFI и какие именно уязвимости в ней так и остаются неисправленными на большинстве современных систем — добро пожаловать под кат.
Читать дальше →
Всего голосов 48: ↑48 и ↓0+48
Комментарии51

Сортировка целых чисел при нехватке памяти

Время на прочтение13 мин
Количество просмотров33K
Автор оригинала на английском языке — хабраюзер dzeban

Введение


В прошлый раз мы обсудили, как можно искусственно ограничить доступную программе память. В качестве бонуса я заполучил себе libmemrestrict – библиотеку с обёртками функций вроде malloc для отслеживания использования памяти, и ptrace-restrict — инструмент на базе ptrace, перехватывающий вызовы brk, sbrk и mmap с той же целью.

Так зачем нам пытаться организовывать ограничение памяти – так ли это часто встречается? Когда в последний раз ООМ прибил ваше приложение? Вы всегда думаете о потреблении памяти во время программирования? Память – штука дешёвая, и если вам не хватает памяти, добавьте ещё пару гигабайт.

И, тем не менее, невозможно бесконечно добавлять память – и не из-за того, что у вас нет бесконечного её источника. При обработке Больших данных просто невозможно вместить весь ввод в массив – необходимо распределять данные между оперативкой, носителями и сетью. Необходимы алгоритмы и техники для такой обработки данных.

И вот я занялся подобными задачами, начав с простой – как отсортировать миллион целых чисел (4 MiB данных) при наличии 2 MiB памяти? Эту задачу можно обобщить на тот случай, когда у вас недостаточно памяти, чтобы вместить все данные.

Дано


Необходимо написать программу сортировки набора целых чисел, хранящихся в файле. Для его создания я написал простейшие утилиты randints и rangeints

Программа должна выдавать отсортированный массив на stdout в виде текста

Она должна измерить время работы и вывести его на stderr. Нельзя просто запустить программу через утилиту time, потому что она посчитает время на чтение файла и время на его вывод.

Она должна работать, имея памяти как минимум в два раза меньше объёма файла. Для этого мы применим libmemrestrict или ptrace-restrict.

Для некоторых методов эти утилиты не пригодятся. Например, для mmap они не сработают – придётся физически ограничить использование памяти.

Они будут проверяться для решения оригинальной задачи (сортировки 4 MiB в 2 MiB). Также я запущу их на виртуалке со 128 MiB памяти для сортировки 500 Mb (125 миллионов четырёхбайтных целых).
Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии9

Примеры классического кода, ставшего Open Source

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


В прошлом году NASA опубликовала список программного обеспечения, код которого они разрабатывали в течении долгих лет. NASA уже давно стала знаменита тем, что делится с общественностью своим кодом. Другие же разработчики не всегда готовы пойти на такое. По крайней мере не сразу. Давайте ознакомимся с некоторыми примерами классического кода, который теперь можно и посмотреть, и пощупать.
Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии17

Встреча разработчиков Linux-контейнеров

Время на прочтение4 мин
Количество просмотров7.3K
imageВ этом году проекту OpenVZ исполнится 10 лет. Мы разрабатывали технологию изолированных окружений для ОС Linux ещё тогда, когда это было не модно. 19 сентября мы собираем первую встречу людей из OpenVZ-сообщества, тех, кто пользуется нашими технологиями и Linux-контейнерами вообще. Послушать доклады пользователей и разработчиков OpenVZ, задать им вопросы, пообщаться в перерывах.

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии4

Ограничение памяти, доступной программе

Время на прочтение13 мин
Количество просмотров57K
Решил я как-то заняться задачкой сортировки миллиона целых чисел при имеющейся памяти в 1 Мб. Но перед этим мне пришлось подумать над тем, как можно ограничить объём доступной памяти для программы. И вот, что я придумал.

Виртуальная память процесса


Перед тем, как окунуться в разные методы ограничения памяти, необходимо знать, как устроена виртуальная память процесса. Лучшая статья на эту тему — «Анатомия программы в памяти».

Прочитав статью, я могу предложить две возможности для ограничения памяти: уменьшить виртуальное адресное пространство или объём кучи.

Первое: уменьшение объёма адресного пространства. Это довольно просто, но не совсем корректно. Мы не можем уменьшить всё пространство до 1 Мб — не хватит места для ядра и библиотек.

Второе: уменьшение объёма кучи. Это не так-то просто сделать, и обычно так никто не делает, поскольку это доступно только через возню с компоновщиком. Но для нашей задачи это был бы более корректный вариант.

Также я рассмотрю другие методы, такие, как отслеживание использования памяти через перехват вызовов библиотек и системы, и изменение окружения программы через эмуляцию и введение «песочницы».

Для тестирования будем использовать небольшую программу по имени big_alloc, размещающую, и затем освобождающую 100 MiB.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии17

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