GNU recutils is a set of tools and libraries to access human-editable, text-based databases called recfiles. The data is stored as a sequence of records, each record containing an arbitrary number of named fields. Advanced capabilities usually found in other data storage systems are supported: data types, data integrity (keys, mandatory fields, etc.) as well as the ability of records to refer to other records (sort of foreign keys). Despite its simplicity, recfiles can be used to store medium-sized databases.
So, yet another data storage system? The mere existence of this package deserves an explanation. There is a rich set of already available free data storage systems, covering a broad range of requirements. Big systems having complex data storage requirements will probably make use of some full-fledged relational system such as MySQL or PostgreSQL. Less demanding applications, or applications with special deployment requirements, may find it more convenient to use a simpler system such as SQLite, where the data is stored in a single binary file. XML files are often used to store configuration settings for programs, and to encode data for transmission through networks.
So it looks like all the needs are covered by the existing solutions … but consider the following characteristics of the data storage systems mentioned in the previous paragraph:
Regarding the first point (human readability), while it is clearly
true for the binary files, some may argue XML files are indeed human
<bar><foo tag="val">try</foo> to r&iamp;ead
<p>this</p></bar>. YAML 1 is an
example of a hierarchical data storage format which is much more
readable than XML. The problem with YAML is that it was designed as a
“data serialization language” and thus to map the data constructs
usually found in programming languages. That makes it too complex for
the simple task of storing plain lists of items.
Recfiles are human-readable, human-writable and still easy to parse and to manipulate automatically. Obviously they are not suitable for any task (for example, it can be difficult to manage hierarchies in recfiles) and performance is somewhat sacrificed in favor of readability. But they are quite handy to store small to medium simple databases.
The GNU recutils suite comprises:
Yet Another Markup Language