The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В рамках проекта D-Bus Broker развивается новая реализация шины D-Bus

23.08.2017 19:55

Дэвид Герман (David Herrmann), в своё время разработавший шину обмена сообщениями Bus1 для ядра Linux, представил новый проект D-Bus Broker, в рамках которого предпринята попытка переосмысления D-Bus и создания новой реализации, устраняющей недостатки штатного демона D-Bus. Код проекта написан на языке Си и распространяется под лицензией Apache 2.0.

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

В отличие от Bus1 проект D-Bus Broker реализован целиком в пространстве пользователя, остаётся полностью совместим с эталонной реализацией D-Bus и может быть использован для прозрачной замены dbus-daemon. При этом новая реализация спроектирована с оглядкой на поддержку востребованной на практике функциональности и уделяет главное внимание работе по увеличению производительности и повышению надёжности. В D-Bus Broker также принципиально не реализованы функции, помеченные как устаревшие, и расширенные возможности, не отражённые в спецификации D-Bus.

Ключевые архитектурные изменения в D-Bus Broker:

  • Уход от идеи глобальной совместной шины (Shared Medium), к которой соединяются все обработчики сообщений и через которую осуществляется отправка сообщений. Вместо общей шины предложена концепция отдельных пиров, не имеющих глобального состояния. Когда какой-то пир отправляет сообщения, эта операция рассматривается как транзакция между отправителем и одной или несколькими точками назначения.
  • Отказ от использования дополнительных IPC-механизмов, так как D-Bus сам по себе является IPC и создание надстроек IPC над IPC приводит к появлению взаимных блокировок. Иными словами D-Bus Broker является самодостаточным процессом, который позволяет оперировать только локальными данными и не привязан к внешним обработчикам, таким как чтение файлов и обращение к NSS.
  • Учёт ресурсов в привязке к пользователям. Каждый ресурс и переданный в шину объект привязан к конкретному пользователю. Таким образом, существенно упрощается реализации ограничений и лимиты больше не привязываются к пиру (ограничения теперь зависят от активности каждого пользователя, а не от общей нагрузки на обработчик).
  • Воплощение принципа, что сообщение никогда не может быть потеряно без обработки ошибки. В случае возникновения проблем не допускается возникновения неопределённых ситуаций, каждая ошибка доставки должна быть выявлена и обработана, а в случае невозможности обработки ошибки процесс должен завершить свою работу, а не просто игнорировать возникшие проблемы.

Что касается высокой производительности D-Bus Broker, то её ценой является привязка к современным окружениям Linux - для своей работы проект требует наличия ядра Linux 4.10 и glibc 2.16, и принципиально не может быть использован в старых дистрибутивах Linux или в других ОС. Предоставляются опциональные компоненты для интеграции с systemd и SELinux. Обеспечивается работа только локального IPC без поддержки сетевого взаимодействия (при необходимости проброса на другой хост предлагается пробрасывать локальный сокет через SSH).

  1. Главная ссылка к новости (https://dvdhrm.github.io/rethi...)
  2. OpenNews: Для ядра Linux вместо kdbus предложен механизм межпроцессных коммуникаций Bus1
  3. OpenNews: Четвёртый выпуск реализации kdbus для ядра Linux
  4. OpenNews: Представлена реализация шины D-Bus, работающая на уровне Linux-ядра
  5. OpenNews: Проект systemd представил libsystemd-bus, собственную реализацию клиентской библиотеки D-Bus
  6. OpenNews: Выход D-Bus 1.0 ознаменовал стабилизацию API.
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47071-d-bus
Ключевые слова: d-bus, bus
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (62) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, gogo (?), 20:39, 23/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +13 +/
    Звучит шикарно.
    Вот только обратная совместимость выглядит скорее пессимистично. Впрочем, не думаю, что  будут какие-то принципиально нерешаемые проблемы.
     
  • 1.2, Аноним (-), 20:44, 23/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    > то её ценой является привязка к современным окружениям Linux - для своей работы проект требует наличия ядра Linux 4.10 и glibc 2.16,
    > и принципиально не может быть использован в старых дистрибутивах Linux или в других ОС.

    Поттеринг покусал?

     
     
  • 2.9, Аноним (-), 21:40, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    systemd-dbusd
     
     
  • 3.48, Анонист (?), 12:02, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    system-d-bus
     
  • 2.10, Аноним (-), 21:41, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А Вы попробуйте разрабатывать под старые дистрибутивы. Куда не ткни, не хватает функции, которая уже давно есть в новых дистрибутивах.

    Взять тот же Питон. Для версии 3.4 (ubuntu 14.04) у pathlib.Path.mkdir(...) нет аргумента exist_ok, который есть в версии 3.6 (Debian 9). В результате вместо 6 строк будет уже 12 (добавляется if not p.exists()).

     
     
  • 3.11, Аноним (-), 21:55, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • –20 +/
    > В результате вместо 6 строк будет уже 12

    Ого, это же катастрофа!

     
     
  • 4.12, Аноним (-), 22:04, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Экстраполировать информацию и делать выводы не умеем?
     
     
  • 5.17, Elhana (ok), 22:34, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Экстраполируя эту информацию, в питоне  когда-нибудь будет всего одна функция СделайТоЧтоЯХочу(), но работать оно будет только на самом последнем квантовом компьютере.

    Или можно написать 12 строчек, которые в итоге сделают тоже самое, может даже быстрее и оно будет работать у всех и на чем угодно.

     
     
  • 6.18, Аноним (-), 22:50, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Экстраполируя эту информацию, в питоне  когда-нибудь будет всего одна функция СделайТоЧтоЯХочу(),
    > но работать оно будет только на самом последнем квантовом компьютере.
    > Или можно написать 12 строчек, которые в итоге сделают тоже самое, может
    > даже быстрее и оно будет работать у всех и на чем
    > угодно.

    Дело даже не в этом (не только в этом), а в том, что когда ты видишь эти строки, ты понимаешь, что проверка то нужна. В другом варианте ты потихоньку забываешь о проверках, и в результате .овнокодовость (без воспитателя) возрастает.

     
     
  • 7.21, cmp (ok), 00:09, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Сдается мне это проблема питона, а старого линукса, и именно поэтому он идет лесом.
     
  • 7.32, Аноним (-), 07:44, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Странные выводы. Проверка бесполезна, если можно указывать аргумент. Это проще. А если таких строчек много, то код становится понятнее, т. к. уменьшается в размере.

    А быстрее, чем if это работать не может, т. к. проверка переносится просто внутрь функции. Как была, так и осталась, только в другом виде.

     
     
  • 8.52, Аноним (-), 12:50, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тссс Не мешай людям наслаждаться плацебо ... текст свёрнут, показать
     
  • 6.37, EHLO (?), 09:16, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >Или можно написать 12 строчек, которые в итоге сделают тоже самое, может даже быстрее и оно будет работать у всех и на чем угодно.

    При условии что 12 строчек не на Питоне

     
  • 4.13, Аноним (-), 22:05, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а еще, а еще!! нельзя например использовать тип auto, если нет с++11
     
     
  • 5.14, Аноним (-), 22:07, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Я использую var. Например, var leftpad = require('leftpad').
     
     
  • 6.33, X2asd (ok), 07:57, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    зарегистрируйся пожалуйста, о гроза электрон-программирования..

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

     
  • 5.22, cmp (ok), 00:12, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А еще на старых ядрах не работает назначение прав на shm, - старые это 3-4 года, для сабжа это критично, сам решал сабжевую задачу, а уперся в штангу.
     
     
  • 6.28, Аноним (-), 06:16, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Этот shm - тот ещё костыль. Неудивительно, что в Android написали свой с нуля.
     
     
  • 7.29, Аноним (-), 07:27, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может что-то неправильно поняли? shm - это разделяемая память. Есть два варианта API: SysV и POSIX. Но реализация в ядре одинаковая. В Андроиде скорее всего она либо неиспользуется, либо используется на уровне системных компонентов (т. к. Java).
     
     
  • 8.57, Аноним (-), 17:51, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Абстрактный shm это механизм использования одних страниц памяти в нескольких п... текст свёрнут, показать
     
     
  • 9.58, Аноним (-), 18:33, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда может не процесса-владельца, а по счётчику ссылок Почитал, по сути та же ... текст свёрнут, показать
     
  • 3.23, Аноним (-), 00:36, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А Вы попробуйте разрабатывать под старые дистрибутивы. Куда не ткни, не хватает
    > функции, которая уже давно есть в новых дистрибутивах.

    4.10 вышло в этом году. Хотя да, шесть месяцев уже старье старое. Кстати, дебиан таким образом - в пролете.

    > Взять тот же Питон.

    А, ну если питон брать то да, другое дело! Ведь только питона еще в зависимостях dbus нам для полного Щастья не хватает!
    Для пущего ускорения еще в ядро желательно воткнуть, а то ведь обмен сообщениями подразумевает потоки данных в гигазы/сек. - видосик в raw прокинуть или еще что. Механизмов для таких случаев ведь в самом ядре нема, а надобность возникает у каждого второго приложения! Правда, kdbus не прокатил, ну так попытка ведь не пытка!


     
     
  • 4.30, Аноним (-), 07:28, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > 4.10 вышло в этом году. Хотя да, шесть месяцев уже старье старое.
    > Кстати, дебиан таким образом - в пролете.

    В бэкпортах 4.12 уже.

     
  • 4.53, Аноним (-), 12:51, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Кстати, дебиан таким образом - в пролете.

    Один фиг не примут до версии 2.0.

     
  • 3.40, Аноним (-), 09:30, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Linux 2.6.9 хватит всем.
     
     
  • 4.43, Аноним (-), 10:39, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Почему именно 2.6.9, а не, например, 2.4.37?
     
  • 3.55, Аноним (-), 16:42, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А разработчики питона разве не пишут хорошо переносимый интерпретатор? Что им мешает выпустить версию 3.6 для старых версий, они autoconf не освоили? Благо, mkdir -p как-то же работает во всех версиях, почему бы и exist_ok не быть? :)
     
     
  • 4.60, Аноним (-), 21:31, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    exist_ok - это не аналог аргумента -p у mkdir exist_ok не генерирует исключение... большой текст свёрнут, показать
     

  • 1.19, Аноним (-), 22:51, 23/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Обеспечивается работа только локального IPC без поддержки сетевого взаимодействия (при необходимости проброса на другой хост предлагается пробрасывать локальный сокет через SSH).

    KISS!

     
     
  • 2.24, Аноним (-), 02:19, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ...me in ass?
     
     
  • 3.25, Аноним (-), 02:45, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Ты любишь, когда в твоей жопе целуются?
     
  • 3.34, Аноним (-), 08:00, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    MGIMO finish?
     
     
  • 4.45, Аноним (-), 11:19, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    "Поцелуй меня в России"

    Слово "Россия" переведено иносказательно.

     
  • 2.44, Аноним (-), 10:41, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Всё хорошо в меру и этот KISS тоже.
     

  • 1.20, Аноним (-), 23:40, 23/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пользуюсь WM без DBus. Не понимаю зачем он нужен. Единственное что - BlueZ 5 без него не работает. Вы знаете хоть одну прогу, которая хочет DBus? Я - нет, а пользуюсь я не менее 3 софтин постоянно и 15-20 иногда. Даже то, что слинковано с libdbus, спокойно работает с выключенной системной службой.

    Вне контекста всяких разных DE - лишняя сущность.

     
     
  • 2.46, SysA (?), 11:50, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Пользуюсь WM без DBus. Не понимаю зачем он нужен. Единственное что -
    > BlueZ 5 без него не работает. Вы знаете хоть одну прогу,
    > которая хочет DBus? Я - нет, а пользуюсь я не менее
    > 3 софтин постоянно и 15-20 иногда. Даже то, что слинковано с
    > libdbus, спокойно работает с выключенной системной службой.
    > Вне контекста всяких разных DE - лишняя сущность.

    Для админов локалхоста - однозначно! (С)

     
     
  • 3.54, Аноним (-), 13:41, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >> Пользуюсь WM без DBus. Не понимаю зачем он нужен. Единственное что -
    >> BlueZ 5 без него не работает. Вы знаете хоть одну прогу,
    >> которая хочет DBus? Я - нет, а пользуюсь я не менее
    >> 3 софтин постоянно и 15-20 иногда. Даже то, что слинковано с
    >> libdbus, спокойно работает с выключенной системной службой.
    >> Вне контекста всяких разных DE - лишняя сущность.
    > Для админов локалхоста - однозначно! (С)

    То ли дело одмины нелокалхостов - без Desktop-Bus жить не могут!


     
  • 3.64, Аноним (-), 07:05, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На серверах dbus тем более не нужен.
     
  • 2.49, Аноним (-), 12:07, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >Единственное что - BlueZ 5 без него не работает.

    Расскажу тайну, брат анонимус. BlueZ и с dbus не работает. Он просто не работает, потому что написан через задницу.

     
     
  • 3.51, Аноним (-), 12:19, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>Единственное что - BlueZ 5 без него не работает.
    > Расскажу тайну, брат анонимус. BlueZ и с dbus не работает. Он просто
    > не работает, потому что написан через задницу.

    Что использовать для работы с bluetooth? Желательно что бы и из CLI работало и bluetooth pairing из скриптов можно было сделать!

     

  • 1.26, eSyr (ok), 03:24, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Не прошло и 10 лет, как кто-то последовал заветам Линуса.
     
     
  • 2.72, Аноним (-), 22:29, 29/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Не прошло и 10 лет и сишники поняли как должна работать шина
     

  • 1.27, Аноним (-), 03:30, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Нелавно узнал про D-Bus отличная штука можно сообщения посылать между приложениями и даже действия совершать. Почти что шина для умного дома, но в рамках одного компьютера. Насчет смены концепции не знаю, но звучит как реализация PubSub. Вот только ни одной реализацией я что-то не был доволен.
     
  • 1.31, лютый жабист__ (?), 07:44, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Столько лет наступать на одни и те же грабли, переписал бы на rust-е.
     
     
  • 2.41, Аноним (-), 09:34, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не, лучше на хацкеле и встроить в ядро, вместе с хацкелем. Полумеры - для слабаков.
     
     
  • 3.62, leap42 (ok), 06:58, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а хацкель должен быть написан на расте, иначе растофанатики не успокоятся и будут под каждым релизом гадить своими комментами в духе: "а писали бы все на расте..."
     
  • 3.67, нах (?), 19:30, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Не, лучше на хацкеле

    на OCaml. хацкель каждый дурак понять сможет.

     
  • 3.68, Kitty (??), 17:07, 27/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>встроить в ядро, вместе с хацкелем

    Уже было, но GHC мусор после себя не прибирает. Он же скорее под userspace сделан.
    https://wiki.haskell.org/Kernel_Modules

     

  • 1.35, Аноним (-), 08:15, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Вот что животворящий gprof от Линуса делает. Как он и говорил не нужно всю эту каку в ядро тянуть, достаточно юзерспейса.
     
     
  • 2.61, Аноним (-), 21:32, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    David Hermann пишет, что dbus-broker полагается на возможности, появившиеся в ядре совсем недавно, буквально пару месяцев назад. Т.ч. в споре разработчиков kdbus и ядерщиков фактически победил компромисс: Торвальдс отказался от kdbus, но вместо этого смерджил код, необходимый для реализации чего-то подобного в юзерспейсе. Т.е. придумал более компактное и универсальное решение - впрочем ничего нового, за способность видеть такие вещи наперед Торвальдса и уважают в индустрии.
     

  • 1.39, Аноним (-), 09:25, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > kdbus
    > Bus1
    > D-Bus Broker

    Больше дубасов хороших и разных!

     
     
  • 2.42, Аноним (-), 09:59, 24/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это лучше. Это брокер дубаса.
     
     
  • 3.66, annual slayer (?), 19:08, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    шутки шутками, а в этом году целых 4 компании с дубасом вышли на биржу
     

  • 1.47, Demo (??), 11:50, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > D-Bus Broker ... принципиально не может быть использован
    > в старых дистрибутивах Linux или в других ОС.

    Просто прелесть!

     
  • 1.56, anonymous (??), 16:49, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Мне всегда нравилась идея общей шины и dbus. Пока я не обнаружил, что большинство реализаций не умеет корректно обрабатывать отсутствие dbus сервиса. Что будет делать браузер, если у тебя отключён интернет? Просто перестанет открывать странички из интернета, локальные будет показывать. Что делает браузер, если у тебя отключён dbus (а браузер собран с поддержкой dbus) - перестаёт работать. Офигеть. Неужели нельзя было проверить доступность? Большая часть клиентских библиотек для dbus тупо пытается стартовать dbus сервис сама (и не выключает его после завершения работы программы). Когда я это пресёк, я и выяснил, что вариант "dbus не доступен" авторами 95% софта не учитывается.

    Всё это от того, частично, что есть всего одна популярная реализация стандарта dbus. Был бы стандарт зрелый, было бы несколько вариантов софта, и какой-то из них научился бы обрабатывать отсутствия сервиса корректно.

     
     
  • 2.63, leap42 (ok), 07:00, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    dbus - жуткий костыль, возникший на месте вменяемого ipc в GNU/Linux. откуда же взяться нормальной реализации?
     
     
  • 3.65, anonymous (??), 08:36, 25/08/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С чего это вы message queue называется костылём? Очень часто встречающаяся концепция IPC. RabbitMQ - тоже костыль? ОС предоставляет низкоуровневые концепции IPC. Абсолютно нормально дополнять их более высокоуровневыми концепциями, реализованными поверх них. Система акторов и транзакционная память - тоже костыли?
     
  • 2.71, intelfx (ok), 05:21, 29/08/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Что делает браузер, если у тебя отключён dbus (а браузер собран с поддержкой dbus) - перестаёт работать. Офигеть. Неужели нельзя было проверить доступность?

    Ну офигеть теперь. Ты ещё предложи программам обходиться без наличия UNIX-сокетов, там, графического тулкита или libc. "Собираю ядро без сокетов, а у меня все программы отваливаются! Неужели нельзя было проверить доступность? Ну и г-ноделы!"

     
     
  • 3.73, Аноним (-), 20:36, 01/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тащемт@, всякие autotools на этапе сборки проверяют. :)

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

    P.S. С чего это вдруг "т@щемта" форум посчитал ненормативной лексикой? Обычное не неприличное, хоть и слэнговое, слово.

     

  • 1.59, Аноним (-), 19:17, 24/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ошибка при компиляции c-sundry - static assertion failed: "" ( Gcc 7.2.0 Glibc 2.26)
     
  • 1.75, Аноним (-), 01:42, 01/01/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А не проще PUB/SUB в Redis использовать?
     
  • 1.76, username (??), 23:46, 01/01/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Шел 2018 год, Линукс до сих пор игнорил десктоп а задачей номер один была бесконечная война за реализацию шины и перестройка графических подсистем.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру