В последние годы фокус интересов Microsoft сместился в сторону облачных технологий, Интернета вещей (IoT) и сопутствующих услуг.
При этом многие устройства, взаимодействующие с облачными сервисами, имеют на борту операционные системы (ОС).
Яркий пример — вышедшая в 2015 году Windows 10, претендующая на роль универсальной системы практически для любого типа устройств.
Вместе с новой системой появились новые концепции модели приложения, сопровождения и доставки обновлений, а также инструменты разработки, не имеющие аналогов в предыдущих версиях ОС.
Чтобы понять, что привело к радикальным изменениям в Windows 10 (Интернет вещей) , и какую пользу это принесет разработчикам встраиваемых устройств, будет интересно проследить историю развития средств разработки образов операционных систем Microsoft. СЕМЕЙСТВО ОПЕРАЦИОННЫХ СИСТЕМ WINDOWS EMBEDDED/IOT Для использования во встроенных (т.е.
функционально законченных) системах компания Microsoft предлагает отдельное семейство операционных систем Windows Embedded со специальными условиями лицензирования и дополнительными компонентами, призванными упростить процесс создания встраиваемых решений «из коробки» [1, 2].
].
Семейство Windows Embedded полностью поддерживает программное обеспечение, разработанное для версий Windows общего назначения для ПК (это не относится к Windows CE/Compact).
Работа компонентов ОС, призванных обеспечить бесперебойную работу строящихся решений, прозрачна и невидима для прикладного ПО.
Семья Встроенная ОС Windows можно разделить на следующие группы:
- Windows Embedded Server, бинарный вариант, полностью аналогичный ОС для компьютеров общего назначения, но предназначенный для использования в специализированных устройствах узкого назначения, со специальными условиями лицензирования.
Не содержит специальных возможностей встраивания;
- Windows для встраиваемых систем (FES), двоичная версия, полностью аналогичная настольной ОС для компьютеров общего назначения, но также и для встроенных приложений.
Не содержит специальных возможностей встраивания;
- Windows Embedded CE/Compact (далее — Windows CE) — единственные системы жесткого реального времени от Microsoft. Они имеют минимальный размер образа и несовместимы на уровне двоичного кода с другими операционными системами Windows. Им требуются отдельные драйверы для каждой платформы и инструменты разработки образов.
В целом разработка образа ОС достаточно сложна и дорога, что, однако, компенсируется невысокой стоимостью лицензий.
В эту группу также входят системы на базе ядра CE, например Windows Mobile;
- Windows Embedded Standard — компонент ОС с возможностями встраивания, такими как: фильтры записи, клавиатуры, USB и т. д. Совместим с классическими приложениями ОС Windows и драйверами устройств.
Они требуют разработки образа ОС, заключающейся в подборе нужной комбинации компонентов, что позволяет исключить ненужные в том или ином проекте, уменьшить занимаемое дисковое пространство и повысить стабильность системы.
Требуется специальный инструмент разработки;
- Windows Embedded POSReady/Industry/IoT — готовые версии из группы Standard, содержащие максимальный набор компонентов и не требующие специального инструмента разработки.
Содержит специальные возможности встраивания.
При работе с этими операционными системами используются привычные средства разработки из систем Windows для компьютеров общего назначения.
Как видно из вышеизложенного, Windows 10 IoT относится ко второй группе.
При этом, обладая возможностями группы FES и включая специальные возможности встраивания, ОС не требует отдельной настройки, а процесс разработки можно свести к простой установке системы с загрузочного диска.
Однако инструменты разработки (скорее тонкой настройки) для Windows 10 IoT все еще существуют и призваны упростить получение готового образа системы, сразу настроенного под конкретные требования проекта.
Обратите внимание, что с появлением Windows 10 IoT возникла некоторая двусмысленность в названиях.
Во-первых, сама Windows 10 IoT имеет три разновидности: Enterprise, Mobile Enterprise и Core, которые имеют некоторые различия, но тем не менее базируются на одном ядре [3].
Система Windows 10 IoT Enterprise в ряде источников может также называться Windows 10 Enterprise LTSB, что связано с особым методом доставки к ней обновлений (LTSB — Long Term Servicing Branch, означает ветку обслуживания, в которую система автоматически устанавливает только критические обновления и обновления безопасности, а также позволяет отложить установку на длительное время [4]).
Во-вторых, следует отметить, что вместо устоявшегося Windows Embedded используется название Windows IoT, что связано с развитием Интернета вещей (IoT) и ориентацией Windows 10 IoT на использование именно в подключенных к Интернету вещей устройствах.
в облако.
РАЗРАБОТКА ДЛЯ WINDOWS Необходимо уточнить, что когда речь идет о понятии «разработка под Windows», следует различать следующие виды процессов: Разработка образа ОС, то есть набора компонентов ОС, которые при развертывании в файловую систему представляют собой готовую к загрузке и использованию ОС с установленными приложениями; Разработка приложений, работающих в среде, предоставляемой операционной системой.
Далее мы будем рассматривать только разработку образов ОС, так как в случае со встраиваемой ОС есть некоторые особенности.
Разработка приложений для них — проверенный процесс и ничем не отличается от разработки приложений для классических операционных систем общего назначения.
МОДЕЛИ НАСТРОЙКИ ИЗОБРАЖЕНИЯ (ДО WINDOWS 10) Под моделью настройки образа ОС (Customization Framework) понимают определенный способ внесения в образ ОС настроек, связанных с внешним видом системы, способами подключения к сети, взаимодействием с пользователем, элементами брендинга и адаптацией к целевому рынку для которым поставляется устройство.
Это также может включать добавление приложений, изменение значков и меню, звуков, сетевых и других системных настроек [5].
До Windows 10 в разных операционных системах Windows Embedded использовались разные модели настройки изображений.
В Windows Embedded CE для описания конфигурации образов используется ряд файлов в разных форматах; читая данные, из которых система сборки создает образ ОС [6].
Сюда входят файлы, в которых хранится список компонентов, структура файловой системы и данные реестра.
Системы Windows Embedded CE по-своему уникальны, а их модель конфигурации не похожа на другие системы.
В отличие от других систем, они не предполагают сложных процедур обслуживания, поскольку образ в данном случае фактически является прошивкой устройства.
Инструментом разработки образа в данном случае является Microsoft Visual Studio с установленными надстройками для Windows Embedded CE. Начиная с систем Windows Phone 8.1, для мобильных устройств была введена модель конфигурации Managed Centralized Settings Framework (MCSF) [7].
Он предназначен для производителей мобильных устройств и позволяет им сократить количество изображений, которые необходимо поддерживать на постоянной основе.
Данная модель позволяет, имея единый базовый образ, осуществлять в нем различные настройки, связанные с конкретными условиями использования целевого устройства, например, изменение параметров коммуникации или брендинга.
Параметры MCSF определяются в специальных файлах ответов (файлы ответов настройки, CAF).
Эти XML-файлы можно создать вручную или с помощью инструмента разработки, поставляемого в составе операционной системы.
При сборке образа такой файл преобразуется в специальный пакет настроек (Customization Package), который встраивается в образ устройства.
Такие пакеты можно обновить или изменить в образе.
Для всех остальных систем предназначена модель конфигурации Unattend Framework [8], наиболее знакомая широкому кругу ИТ-специалистов, поскольку обычно используется для автоматизации развертывания (установки) в классической ОС Windows для компьютеров общего назначения, что и объясняет название (Unattend — автоматическое развертывание без присмотра).
Суть этой модели заключается в так называемых файлах ответов (Answer files, иногда Configuration files), содержащих описание конфигурации конкретного образа ОС в формате XML. Каждый компонент образа ОС включает ряд параметров, которые можно использовать для создания такого файла ответов.
Иногда говорят, что файл ответов содержит «ответы» на вопросы мастера установки (по аналогии с ручным вводом ответов на вопросы системы), что объясняет его название и суть такой автоматизации.
Однако помимо вышеперечисленного модель Unattend Framework предоставляет и более широкие возможности:
- Список настроек в файле ответов шире, чем просто ответы на вопросы мастера установки, например, можно настроить автоматический вход;
- Файл ответов можно использовать при развертывании системы по сети с помощью служб развертывания Windows;
- Файл ответов можно использовать после развертывания системы для добавления каких-либо компонентов или изменения настроек;
- Файл ответов можно использовать для «запечатывания» образа с помощью утилиты sysprep [9] перед репликацией, изменяя таким образом поведение системы в соответствии с целевым приложением во время последующей «печати».
1) [10].
Рис.
1 Для систем Windows Embedded Standard используется ее версия Image Configuration Editor (ICE) [11] из соответствующего комплекта разработки (рис.
2).
Рис.
2 Чтобы создать файл ответов с помощью этих инструментов, необходимо сначала выбрать образ системы:
- В SIM попытка создания файла ответов приводит к предложению выбора образа ОС — его можно найти на установочном диске.
Далее SIM сканирует образ и создает для этого образа файл-каталог, содержащий список возможных для этого образа компонентов и настроек.
Дальнейшее сканирование изображения не требуется, поскольку файл каталога уже создан;
- В ICE для создания файла ответов необходимо выбрать хранилище компонентов (общий дистрибутив, каталог), на которое будет отвечать целевой файл.
В отличие от SIM, концепция, используемая в ICE, позволяет не только настраивать существующие компоненты, но и подбирать их комбинацию, исключая ненужные для целевого устройства.
Вот почему инструмент ICE был создан специально для компонентных систем.
Важно отметить, что при работе с SIM или ICE разработчик должен понимать, какие этапы проходит программа установки Windows (всего их 7, но типовая установка включает в себя 4), поскольку установка параметров компонента требует явного указания этапа установки.
(Рисунок 3).
Рис.
3 Нельзя не упомянуть еще один инструмент, больше связанный с развертыванием, — Microsoft Deployment Toolkit (MDT), который имеет свои подходы к настройке и ориентирован на сетевое развертывание Windows-систем общего назначения.
Дополнительную информацию об этом можно найти по ссылке [12].
Из описания моделей и инструментов разработки видно, что к выпуску Windows 10 они стали сильно фрагментированы: существовало несколько моделей конфигурации и инструментов разработки, поставляемых в нескольких версиях со своими особенностями.
Разработчику, осваивающему новую версию Windows, часто приходилось изучать новые технологические приемы.
Назрела необходимость качественного изменения – перехода к универсальной модели и средству разработки, общему для всех операционных систем Microsoft, что и осуществилось с выходом Windows 10. МОДЕЛЬ КОНФИГУРАЦИИ ИЗОБРАЖЕНИЯ WINDOWS 10 Отметим, что в Windows 10 универсальными являются не только модель конфигурации и средства разработки, но и сама система и приложения Магазина Windows. Глядя на предыдущую версию Windows 8.1, можно сказать, что приложения в ней не были по-настоящему универсальными.
При создании решения в Visual Studio, ориентированного одновременно на Windows 8.1 и Windows Phone 8.1, фактически были созданы три связанных проекта (рис.
4):
- Код Windows 8.1;
- код Windows Phone 8.1;
- Общий код.
Рис.
4 Таким образом, разработчику всё равно приходилось писать отдельные части кода под конкретную платформу.
Интерфейс также разрабатывался отдельно.
В Windows 10 подобное решение уже содержит один единственный проект (рис.
5): приложения действительно универсальны — как за счет ядра системы, общего для большого количества платформ, так и за счет поддержки адаптивного пользовательского интерфейса [ 13].
Конечно, для достижения качественных результатов инструменты, обеспечивающие такую универсальность, необходимо использовать с умом.
Рис.
5 Универсальная модель конфигурации образа в Windows 10 называется Provisioning Framework [14].
Соответствующий инструмент разработки Windows Imaging and Configuration Designer (ICD) (рис.
6) из комплекта ADK [15] сочетает в себе работу с компонентами, обслуживание и подготовку к развертыванию образов с использованием как графического интерфейса, так и командной строки.
Эта модель поддерживает все редакции Windows 10, включая Mobile и Core.
Рис.
6 Новая модель конфигурации (рис.
7) использует схему Provisioning XML, которая определяет структуру конфигурации компонентов образа.
В данной схеме имеются средства задания условий включения настроек в изображение, что позволяет определить зависимость определенной конфигурации изображения от его состояния (так называемые многомерные настройки [16]).
Примером изменения состояния изображения является, например, изменение региона в настройках устройства.
Рис.
7 Образ любой редакции Windows 10 содержит метаданные (манифест настроек), описывающие компоненты и их возможные настройки.
Во время разработки образа с использованием ICD все возможные настройки, полученные из этих метаданных, доступны в хранилище настроек.
Из вышесказанного можно сделать вывод, что разработка образа в Windows 10 заключается не в его покомпонентной сборке из хранилища компонентов, как это было в системах Windows Embedded Standard, а фактически в модификации базового образа.
Базовый образ состоит из компонентов, но они неразделимы, как и в таких системах, как ФЭС.
Из диаграммы легко увидеть, что в Windows 10 все еще присутствуют настройки функций из предыдущих моделей разработки.
Более того, в состав ADK по-прежнему входит инструмент Windows SIM для создания файлов ответов в рамках Unattend Framework, позволяющий как использовать знакомые инструменты разработки, так и постепенно переходить на новые.
Настройки изображения, выполненные в ICD, сохраняются в новом формате файла ответов, который называется файлом ответов подготовки Windows (WPAF).
Затем файл WPAF преобразуется в Provisioning Package, который содержит как сами настройки, так и дополнительные компоненты (Deployment Assets), к которым относятся драйверы, приложения, обновления, языковые пакеты и т. д. Уникальной особенностью такого пакета является то, что его можно применяется как при первоначальном развертывании образа (на схеме — Imaging Tool), так и уже на рабочем образе (с помощью Provisioning Engine).
В первом случае новый установочный носитель создается на основе базового образа и файла ответов WPAF, включая все выполненные настройки.
Во втором все настройки применяются к уже развернутому образу и развертываются дополнительные компоненты.
Объединение настроек и дополнительных компонентов в один пакет (Provisioning Package) решает одну из проблем Unattend Framework, где дополнительные компоненты и файл ответов, содержащий путь к ним, были разделены, что создавало потенциальные сложности, когда файл по указанному пути в момент применения файла ответов был недоступен, например, из-за ошибок и неточностей в проекте.
Эту проблему удалось решить, например, за счет использования наборов конфигурации и OEM-папок (Configuration Sets, OEM Folders) [17] или пользовательских модулей в Windows Embedded Standard 8 [18].
Другим способом решения проблемы было использование образов данных [19] или вручную добавить необходимое программное обеспечение уже в развернутый образ, а затем запечатать и реплицировать его.
Перечисленные способы не всегда были удобны.
Как и любой новый и универсальный инструмент, ИКД не является наиболее подходящим инструментом для решения задачи во всех ситуациях.
Так, было отмечено, что некоторые разработчики [20] рекомендуют использовать SIM вместо ICD, поскольку ICD «хорошо работает с Windows 10 IoT Core, но не с IoT Enterprise», «перспективно, но станет стабильным после нескольких релизов», «Система была запечатана проблематично».
Действительно, ICD никак не может помочь в запечатывании образа с файлом ответов, т.к.
утилита sysprep, используемая для запечатывания, ожидает файл ответов модели Unattend Framework, а ICD умеет хранить настройки только в WPAF. На наш взгляд, это связано с тем, что ICD не ориентирован на классическую модель репликации образа «развернуть-настроить-запечатать-захватить», когда большое количество настроек выполняется непосредственно над рабочим образом.
Мы считаем, что вместо этого ICD предлагает цикл настройки-развертывания, который не включает в себя настройку работающего образа и последующую его репликацию.
Таким образом, каждый раз вы получаете уже настроенную систему из «чистой» установки.
В совокупности с существующими сложностями внедрения классических Win32-приложений непосредственно на этапе развертывания (пояснения мы дадим ниже) этот цикл выглядит несколько противоречивым.
Некоторую путаницу создает то, что вы не можете напрямую применить файл ответов WPAF к образу с помощью DISM (обслуживание образов развертывания и управление ими, основной инструмент командной строки для развертывания и обслуживания образов в Windows), но вы можете сделать это, если WPAF является частью Обеспечивающий пакет. что, тем не менее, вполне соответствует идеологии модели Provisioning Framework (см.
схему выше).
Мы также заметили, что некоторые настройки, выполненные в ICD, не работают должным образом или ведут себя по-разному при создании изображений разных типов.
Это может быть связано с тем, что ICD был разработан как универсальный инструмент, мощь которого скрывается за внешней простотой, и, как и любому такому инструменту, требуется некоторое время, чтобы проработать острые углы.
Интерфейс ICD намного проще, чем SIM или ICE, и не требует длительного обучения, а все настройки сопровождаются мгновенными подсказками.
В одной статье практически невозможно описать все нововведения в разработке образов Windows 10, поэтому перечислим наиболее значимые из них, в том числе те, которые легко обнаружить непосредственно в ICD:
- Возможность включить сжатие изображений с использованием новой технологии Compact OS. Предыдущая технология WIMBoot (результаты тестирования в Quarta Technologies доступны по ссылке [21]) имела ряд недостатков.
Compact OS сочетает в себе сильные стороны своей предшественницы без ее недостатков;
- Возможность создания загрузочного носителя для чистой установки, производства, восстановления (рис.
8).
Носитель с чистой установкой ориентирован на конечного пользователя, его можно быстро создать, но его развертывание занимает больше времени.
С изображениями для производства ситуация обратная.
Они нацелены на производителей оборудования и внедряются быстрее.
Образы восстановления позволяют создавать загрузочные носители для автоматического восстановления системы с графической оболочкой;
- Новый формат Full Flash Update (FFU), который, в отличие от своего предшественника Windows Image (WIM), используемого для репликации Windows, основан на секторах, а не на файлах, что означает, что он позволяет сохранять структуру разделов целевого устройства.
вместе с файлами изображений.
FFU чем-то похож на формат виртуального жесткого диска (VHD/VHDX), но, как правило, более безопасен.
- Сравнение форматов можно найти в [22].
На данный момент создать свой образ в формате FFU можно только модифицировав базовый образ в ICD, но применить FFU можно с помощью утилиты DISM;
- Разработчики встраиваемых устройств оценят, что при отсутствии подключения к Интернету устройство под управлением Windows 10 IoT Enterprise, в отличие от предыдущей версии Windows 8.1 Industry, не потребует активации.
Рис.
8 Анализируя новую модель разработки и связанные с ней инструменты, необходимо подчеркнуть ряд существенных замечаний:
- Обратите внимание, что новая модель конфигурации не поддерживает Windows Embedded CE, поскольку ее последняя версия, Windows Embedded Compact 2013, не была напрямую продолжена в семействе Windows 10. Ближайшей альтернативой на данный момент является Windows 10 IoT Core, однако при всех своих преимуществах она имеет принципиальные отличия от систем Windows Embedded CE, например, не совместима с приложениями последних даже на уровне их исходных кодов и не является система жесткого реального времени;
- Можно отметить, что принципы работы ИКД в чем-то схожи с СИМ, но ключевой целью внедрения новых инструментов была универсальность в сочетании с простотой использования.
Отметим, например, что ICD, в отличие от SIM или ICE, не требует знания конкретных этапов установки Windows, что позволяет разработчику сосредоточиться на разработке образа, а не на изучении тонкостей программы установки.
Не можем не отметить, что Microsoft рекомендует постепенный переход на новые инструменты разработки;
- В автоматическом режиме ICD легче встроить в образ приложение Магазина Windows, чем классический Win32. Первый встроен путем указания пути к пакетам и сертификату, второй обычно требует использования специальных приемов;
- Некоторые классические компоненты внедрения (например, отдельный фильтр клавиатуры) отсутствуют в текущей сборке Windows 10 Enterprise LTSB 2015, что связано с ориентацией системы на новую технологию блокировки системы Assigned Access, использующую приложение Windows Store. как оболочка.
Эта технология уже включает в себя фильтр клавиатуры, жесты и запуск приложения Магазина Windows в качестве оболочки;
- Чтобы использовать файл ответов WPAF в рамках Provisioning Framework, при первоначальном развертывании образа необходимо создать образ с нужным файлом ответов непосредственно в ICD. Напоминаем, что в рамках Unattend Framework вы можете просто скопировать файл ответов в определенное место на установочном диске, после чего установка станет автоматической;
- Windows 10 IoT Enterprise включает в себя все функции Windows 10 Enterprise, такие как BitLocker. Исключение составляет Магазин и некоторые приложения.
Также возможно полностью отключить телеметрию;
- Windows 10 IoT Core не имеет оболочки и поддерживает только приложения Магазина Windows (или универсальные приложения).
- По нашему мнению, несмотря на некоторые неровности, со временем новая модель и инструменты разработки займут достойное место в разработке образов Windows.
Рекомендации по получению и тестированию пробной версии Windows 10 IoT Enterprise приведены в [23].
Получить дополнительную консультацию, заказать разработку и приобрести встраиваемые операционные системы Microsoft вы можете у официального дистрибьютора в России и странах СНГ «Кварта Технологии», www.quarta-embedded.ru. ЛИТЕРАТУРА 1. Особенности блокировки (Индустрия 8.1).
msdn.microsoft.com/en-us/library/dn449278 (v=winembedded.82).
aspx 2. Антонович С.
В.
Windows 8 Embedded Lockdown — варианты встраивания.
Контрольно-инжиниринговая Россия.
2013. № 3 (45).
стр.
64-69. www.controlengrussia.com/programmnye-sredstva/windows-8-embedded-lockdown-vozmozhnosti-dlya-vstraivaniya 3. Windows 10 IoT для встроенных приложений.
www.quarta-embedded.ru/products/windowsembedded/windows10 4. Понимание ветки долгосрочного обслуживания и текущей ветки в Windows 10. www.itprotoday.com/windows-10/understanding-long-term-servicing-branch-and-current-branch-windows-10 5. Настройка Windows 10. msdn.microsoft.com/en-us/library/windows/hardware/mt269765 (v=vs.85).
aspx 6. Файлы конфигурации образа времени выполнения (Compact 2013).
technet.microsoft.com/ru-ru/ee478986 7. Платформа управляемых централизованных настроек (MCSF).
msdn.microsoft.com/en-us/library/windows/hardware/dn772150 (v=vs.85).
aspx 8. Настройте с помощью платформы Unattend для настольных компьютеров.
msdn.microsoft.com/en-us/library/windows/hardware/dn898376 (v=vs.85).
aspx 9. Зачем нужна программа Sysprep? wiki.quarta-embedded.ru/doku.php 10. Комплект для оценки и развертывания Windows (Windows ADK) для обновления до Windows 8.1. www.microsoft.com/ru-ru/download/details.aspxЭid=39982 11. Создайте образ ОС с помощью редактора конфигурации образа (стандарт 8).
msdn.microsoft.com/en-us/library/jj980217 (v=winembedded.81).
aspx 12. Набор инструментов развертывания Microsoft. technet.microsoft.com/ru-ru/windows/dn475741.aspx 13. Руководство по приложениям универсальной платформы Windows (UWP).
msdn.microsoft.com/en-us/library/windows/apps/dn894631.aspx 14. Настройте с помощью платформы подготовки Windows. msdn.microsoft.com/en-us/library/windows/hardware/dn898375 (v=vs.85).
aspx 15. Загрузите Windows ADK. msdn.microsoft.com/ru-ru/windows/hardware/dn913721.aspx 16. Создайте пакет подготовки с многовариантными настройками.
msdn.microsoft.com/en-us/library/windows/hardware/dn916108 (v=vs.85).
aspx 17. Добавление файлов и папок с помощью папок $OEM$.
technet.microsoft.com/ru-ru/library/dd744507 (v=ws.10).
aspx 18. Модули (Стандарт 8).
msdn.microsoft.com/en-us/library/jj963003 (v=winembedded.81).
aspx 19. Создание образа данных.
technet.microsoft.com/ru-ru/library/cc765989 (v=ws.10).
aspx 20. Шон Д.
Лиминг и Джон Р.
Малин.
Приложение 1: Windows 10 IoT Enterprise, сборка 10240. annabooks.com/Articles/Articles_IoT10/Windows-10-IoT-E-Addendum-1%20Rev1.4.pdf 21. WIMBoot и индустрия Windows Embedded 8.1. Тестирование на Intel NUC DC3217IYE. ruemb.blogspot.ru/2015/04/wimboot-windows-embedded-industry-81.html 22. Файлы WIM, VHD и FFU: сравнение форматов файлов изображений.
msdn.microsoft.com/ru-ru/library/windows/hardware/dn938355 (v=vs.85).
aspx 23. Узнайте о загрузке пробной версии Windows 10 Enterprise LTSB. www.quarta-embedded.ru/resources/try Теги: #Windows Embedded #quarta Technologies #embedded system #Quarta Technologies #Анализ и проектирование систем #Оптимизация клиента #Разработка для Интернета вещей #Разработка для Windows
-
Изменит Ли 3D-Печать Мир?
19 Oct, 24 -
Спартак – Чемпион!
19 Oct, 24 -
Флеш-Игры — Убийцы Рабочего Времени
19 Oct, 24 -
Бесплатный Кластер (Proxmox + Nexenta)
19 Oct, 24 -
Gta Iv: Самая Длинная Реклама В Истории
19 Oct, 24 -
Что Ждет Науку В Сети?
19 Oct, 24