UACE

unified application configuration engine

What is UACE

UACE is a c library for reading and evaluation of program configuration. It takes a unified approach towards configuration, meaning that its interface is the same for all configuration parameters, no matter whether they come from the command line, config files, environment, or any other configuration source.

UACE is designed with the following guidelines in mind:

Usability

UACE is designed to allow an engineer, who is using it for the first time, to start using it after skipping through an example in the documentation in 5 minutes. The syntax sugar on top is such, that it aims to hide complexity for those, who do not need it. On the other hand, the complexity is merely hidden, it is not completely taken away, so if an application has more complex configuration requirements, UACE provides the interface to deal with the complexity. UACE will allow its users to do pretty much anything they want, but will come with a sensible set of defaults, that will make life really easy for those not needing complexity.

Functionality

UACE is built so that it performs actual tasks for its user. If an engineer using UACE looks for an integer type parameter, UACE will not only look for that parameter in different configuration sources, it will also convert the configuration values and perform checks. Meaning that you don't get back a string that you have to atoi(), you get an int, and if you need bounds checking, UACE will check bounds for you, it will fail for you, if you want it to. If your configuration parameter is a file, UACE will check whether it exists, and whether you have the permissions you require. UACE takes tasks out of an engineer's hands.

Modularity

Many applications will not need all of UACE's features. For those applications, UACE comes with a modular design, where modules are compile-time excludable and run-time loadable. If you don't need the features, why have the bloat?

Extensibility

UACE aims to fulfill 95% of configuration needs of 95% of all new applications. Meaning that 95% of all new C application developers are considered our potential users. 5% of applications will probably have configuration requirements too incompatible with UACE design, so using UACE will be unfeasible.

For the 5% of needs of its potential users, that UACE does not fulfill, UACE provides an extensible design. A user does not have to write the 5% of his application's configuration needs, that UACE does not cover, completely from scratch. UACE provides hooks on different levels, so that a user can code up only the functionality not covered by UACE, and use UACE facilities for everything else.

Why UACE

The need for a library like UACE has been there since forever. Well, at least since Dennis Ritchie got the rest of MIT hackers hooked on C in 1970.

And what have we, the C community, came up with since then? getopt()? getopt() was a good idea. In 1973. But since then, software systems' configuration needs have grown far beyond the four command line switches, which getopt() was ment for.

Every single C project ever started had to implement the same damned command line and config file parsing and environment reading. All this talk about reinventing the wheel, and nobody ever made a goddamn command line parser and config file parser in one lib. The authors of UACE have decided that they are sick and tired of this situation and that they are going to solve this issue once and for all and for everybody.

Real men parse command line themselves! That's the response i got from people on ##c on irc.freenode.net. WTF? I'll tell you this: REAL MEN DON'T WASTE THEIR TIME DOING OVER AND OVER AGAIN THE SAME TASK, THAT SHOULD HAVE BEEN DEALT WITH ONCE! This is where the C community really fails. We should really look up to the PERL community and see how they collaborate. Pretty much every PERL programmer writes his modules with CPAN in mind, that's why CPAN is one repository of libraries, that will usually cover even the most obscure library needs, one can think ok. We need that in C, or C will die.

Get UACE

I was going to use the blink tag for this message, and i would have, if it wasn't non-standard. So here it is, merely in strong: UACE is not production quality software. If you intend to use it in your program without having to deal with it, then don't. It is not mature. It is not even finished. It can't even be said whether the version curently in git will compile. If you don't want to contribute to UACE or just check it out or try it on for size or help debug it, then go away. But please return in a few months, when we will have something serious to show.

Soooo, if you do wish to contribute, or if you just wish to see what this thing is about, please get it from sourceforge git: git://uace.git.sourceforge.net/gitroot/uace/uace . We will be happy to get your feedback through out mailing lists or through our bug tracker, or even feature requests from our feature requests tracker.

You can also take a look at the project's sourceforge page

Documentation

There is none yet, sorry. Come back in a few months.

Support

Please find your way to our bug tracker, request tracker and mailing lists at the project's sourceforge page http://sourceforge.net/projects/uace/

Project members

Rok Ružič, rox@informa.si

Donations

You can help us push UACE development further. You can donate to the project at http://sourceforge.net/project/project_donations.php?group_id=323946