It just occurred to me, that environment variables are not necessary form valid shell variable name. For example,
$ env foo.bar=12 env | grep foo.bar foo.bar=12
Accessing variables with such unusual names is more elaborate in shell – you have to use
printenv(1). In general-purpose languages, like C, Perl or Python there is no difference.
It means, that we could replace ini files with envdirs. For example, following config file
[section1] foo = 12 bar = 13 [section2] foo = 42
could be easily represented with following config directory, ready for use by
envdir(1) from daemontools or
chpst -e from runit suite.
/tmp/conf/ |-- section1.bar |-- section1.foo `-- section2.foo
It is sad, that git did not follow this way, and decided to use ini parser instead. Due its technical supremacy, Git project was able to do anything in non-convention way and it would be accepted and followed.