ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Mikhail Zabaluev <mhz@altlinux.org>
To: devel@altlinux.ru
Subject: [devel] Что мне не нравится в alternatives
Date: Wed, 7 Jan 2004 20:49:03 +0300
Message-ID: <20040107174903.GA15291@mhz.mikhail.zabaluev.name> (raw)

[-- Attachment #1: Type: text/plain, Size: 3570 bytes --]

Доброго времени суток.

Недавно в некоей дискуссии мне был задан вопрос: чем мне не
нравится alternatives в его существующем виде. Я несколько раз
брался размышлять на эту тему, прикидывал, что там можно, на
мой взгляд улучшить. Вдобавок, жизнь заставила залезть внутрь
программы с отладчиком. Попытаюсь здесь изложить то, что я надумал
в этой связи.

Без сомнения, новая утилита решает две проблемы, присущие
update-alternatives: практическую трудность восстановления
сломанной конфигурации и необходимость поддерживать
уникальные имена для конфигурируемых ссылок. Однако в предложенной
реализации обнаруживаются свои проблемы.

Хранить конфигурацию в XML-файлах -- неплохая идея сама по себе,
но надо иметь в виду, что имена файлов в POSIX и последовательности
символов в языке разметки XML -- вовсе не одно и то же. Чтобы ощутить
разницу, попробуйте создать альтернативы на ссылку, в имени которой
есть не-ASCII символы (допустим, если кодировка имен в файловой
системе KOI8-R). Libxml при разборе XML-файла конвертируёт
текст в UTF-8 независимо от исходной кодировки документа.
Можно представить, что имя файла побайтно корректно именно в исходной
кодировке документа, но это большая натяжка на семантику XML,
официально никак не поддерживается, да и с преобразованием обратно
в исходную кодировку будет геморрой. Я вижу надёжное, пусть и не очень
грациозное, решение -- кодировать в XML-конфигурации
имена файлов так же, как они кодируются в URL. Другое, менее надежное
решение -- иметь возможность указывать кодировку для имён файлов (не
как кодировку документа, а в виде специального атрибута в
конфигурации). Между прочим, эта проблема затрагивает все приложения, которые
представляют имена файлов в XML. 

По поводу реализации у меня тоже есть возражения.
Я уже говорил однажды, что схема кодирования имён ссылок имеет
недостатки. Во-первых, она без хорошего повода сужает набор символов,
которые можно использовать в именах, из-за того, что '/'
конвертируется в '|', а '|' не конвертируется ни во что. Несерьёзно.
Впрочем, это еще более академическая проблема, чем не-ASCII
символы в именах. Есть ещё неиспользованный потенциал для
более эффективного использования файловой системы и отсюда,
лучшей масштабируемости, если не изобретать никакого "манглинга",
а просто создавать в ссылочном каталоге структуру каталогов,
отображающую реальные имена файлов. Это потребует несколько
более трудоёмкой поддержки, зато позволит лучшим образом
ограничить неавторизованное получение информации о содержимом
каталогов (сейчас /etc/alternatives открыта всем даже
на чтение, но даже если выставить права 751, останется
возможность исследования по угаданным именам).   

Во время отладки заглянул в код разбора конфигурации. Недоумеваю. За
использованием разных вкусных плюшек из C++ скрывается то, что
называется wall-follower approach: все конфигурационные файлы
засасываются в память программы. Это обрамляется в один большой
XML-документ, который невозможно получить в физическом представлении,
не заглянув в код, кажется, библиотеки libing. Т.е. фактически
отдельные конфигурационные файлы могут быть даже не
well-formed XML-документами. После этого всё это разбирается в развесистое
дерево XML в памяти, из которого, насколько я понял, нужные вещи
вытягиваются с помощью XPath. У меня, конечно, Pentium 4 и достаточно
памяти, чтобы это работало пристойно. Но осадок остался.

-- 
Stay tuned,
  MhZ                                     JID: mhz@altlinux.org
___________
The longest part of the journey is said to be the passing of the gate.
		-- Marcus Terentius Varro

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

             reply	other threads:[~2004-01-07 17:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-07 17:49 Mikhail Zabaluev [this message]
2004-01-08  8:31 ` Stanislav Ievlev
2004-01-08 18:11 ` Vitaly Ostanin
2004-01-08 23:55   ` [devel] " Mikhail Zabaluev
2004-01-08 18:23 ` Vitaly Ostanin
2004-01-09  0:04   ` Mikhail Zabaluev

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=20040107174903.GA15291@mhz.mikhail.zabaluev.name \
    --to=mhz@altlinux.org \
    --cc=devel@altlinux.ru \
    /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