ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexander Bokovoy <ab@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: [devel] D-BUS API tracking in repositories
Date: Mon, 15 Jun 2009 14:04:11 +0300
Message-ID: <6062a6e60906150404v64347c79w484c8b9f84049001@mail.gmail.com> (raw)

Коллеги,

каким образом можно организовать отслеживание изменений в динамически
предоставляемых API, наподобие экспортируемых через D-BUS на уровне
репозитария? Эта проблема актуальна для тесно связанных между собой на
основании динамических интерфейсов программных комплексов. Таковыми на
сегодня являются как десктопные системы, так и специализированные
решения, чаще всего в области мобильных коммуникаций.

Попытаюсь объяснить ситуацию на примере того же D-BUS:
1. Для работы клиента и сервера между собой в D-BUS не требуется
наличие никаких внешних файлов описания интерфейсов, кроме
минимального файла конфигурации службы для ее запуска, если такая
служба еще не зарегистрирована в d-bus:
# Sample service description file
[D-BUS Service]
Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
Exec=/usr/libexec/gconfd-2
Все остальное не требует наличия каких-либо внешних средств. Во время
работы системы все ее свойства можно вывести путем интроспекции
интерфейсов.

2. Для получения свойств каждого интерфейса требуется запускать
приложение. Это невозможно в системе тестирования целостности
репозитария.
3. Каким образом можно организовать обнаружение изменений интерфейсов?

Мой текущий взгляд на проблему изложен ниже.
0. Используя пакетные зависимости и символы ELF можно достоверно
обнаружить компоненты пакетной базы, экспортирующие динамические
интерфейсы для статически связанных систем (меня интересуют сейчас
именно такие, вопросы скриптовых языков я преднамеренно опускаю).
1. Довольно часто в исходном коде приложений используются внешние
текстовые описания интерфейсов, аналогичные получаемым в процессе
интроспекции интерфейса в run-time. Некоторые приложения и среды
разработки используют их для генерирования исполняемого кода,
реализующего интерфейс и его использование.
2. Обнаружив компоненты, экспортирующие динамические интерфейсы, можно
выполнить анализ исходного кода на предмет наличия в них таких
описаний и на основании их составить базу интерфейсов репозитария
(первое приближение).
3. Для приложений, где такие текстовые описания интерфейсов не
используются необходимо придумать что-то еще.

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

-- 
/ Alexander Bokovoy

                 reply	other threads:[~2009-06-15 11:04 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6062a6e60906150404v64347c79w484c8b9f84049001@mail.gmail.com \
    --to=ab@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git