Around 10 o'clock on Feb 17, Andrew C Aitchison wrote:
<moving a discussion from devel to xpert about XML configuration files>
> Can I at least ask that changing to an XML format config file
> requires a major version increment, to version 5.0 if it happens now ?
Sure, any change to the configuration file syntax will need to be well
advertised and planned far in advance. A transition strategy will be
needed.
Having just experienced the real horror of a non-standard configuration
file format, I will argue strongly that XML is a better solution than any
custom configuration file format. Even for people editing the file with
emacs.
We are barraged weekly with questions about how to specify various
configuration options in the config file. Yesterday, someone asked
why the following failed:
Option "ZAxisMapping" 4 5
I doubt fully half of this list's readership could solve this problem; it
wasn't immediately obvious to me.
It's not that the current syntax is bad, it's just different from
everything else, as any custom configuration file sytax is. Moving to XML
solves this problem -- the syntax is now regularized so questions about
quoting and such won't occur.
Automated tools are another problem; with the current syntax, comments
inserted by the user will probably be lost when the file is read and
rewritten by an external configuration tool. This means that you can
either edit the file only by hand, or only with a GUI tool. Libxml
preserves comments and formatting so that reading/writing the
configuration file won't make it impossible to edit the file in the future
with a text editor.
Finally, using XML means that external tools needn't worry about additions
to the configuration file syntax or contents -- the file is always
parsable, and the configuration tool can simply ignore portions it doesn't
understand without any question of whether the remaining portions of the
file will be misunderstood.
I had this particular problem with the Xft configuration file.
Configuring fonts is of critical importance in a desktop environment. Xft
provides a new level of customizability, and KDE wanted to expose that to
the user. To get at the configuration file, they incorporated the Xft
parser into their own code; they had little choice; there was no other way
to extract the semantic meaning of even a portion of the file. This
means that KDE can edit *one version* of the Xft configuration file, but
any changes will break that support.
I clearly needed to provide programmatic support for parsing the
configuration file and regenerating it. I could have developed my own such
mechanism, but I decided to try a different path -- using standard
existing tools that already solved this problem.
The results were very encouraging; I switched from a custom parser to XML
in a day, developing a DTD and writing the tree-walking code was
straightforward and also illuminated a few dark corners of the
configuration file semantics. I also got to delete lots of code, which is
always a good feeling. The resulting parser is more robust against
failure and the file can be verified by external tools before attempting
to install it in the system. This latter result would be very nice for
XFree86 configuration files -- instead of starting the X server to
discover a configuration file syntax problem, you'd run an external tool
to verify the file, catching and fixing any errors found quickly.
> Sorry, are you suggesting that we include libxml2 code, or that
> we use the one in the system ? I'd certainly prefer that we use
> one installed by the system when available. For distributions with it,
> can we recommend that it the user install it rather than using a
> version we provide.
Yes, the intent is to use the one provided by the system, but as libxml2
isn't widely available yet, XFree86 includes the source for systems that
don't provide it, just as we provide source for things like the regex
library and FreeType.
> Is it a new policy that XFree86 should only support "reasonable"
> systems ? It used to be a matter of pride that it ran on a wide
> range of platforms.
No, the question is only how to support existing platforms while still
providing new features. The case in question involves a system with
optional support for a standard library function (iconv); we can easily
support that system by requiring that the optional library be loaded for
XFree86 to function. I'd include source for that library, but the license
is incompatible with our source distribution, and it's not the only
implementation.
Keith Packard XFree86 Core Team Compaq Cambridge Research Lab
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert