|Benefits for LWN subscribers|
The primary benefit from subscribing to LWN is helping to keep us publishing, but, beyond that, subscribers get immediate access to all site content and access to a number of extra site features. Please sign up today!
Genealogy is a fairly popular pursuit, and those wishing to use open-source software in their hobby have their choice cut-out for them—Gramps is the only complete, actively-developed free-software solution. The project was started in 2001 and initially known as GRAMPS; the first stable release was in 2004. The latest, version 4.1.0 ("Name go in book") was released on June 18.
Before looking into Gramps's internals, it would be prudent to examine what genealogy entails. Researching family history is not just a matter of raw data (names, birth, death and marriage dates, locations, etc.), but also of understanding the lifestyles and motivations of people. Research can be focused on an individual and their ancestors and descendants, as is common in hobbyist genealogy, but it could also focus on a single surname (a one-name study) or a location (one-place study); the scope might simply be constrained by the free time of the researcher.
The de-facto standard format for genealogy data exchange is GEDCOM (GEnealogical Data COMmunication), though most applications also have their own, more full-featured formats, addressing issues in the slow-to-develop GEDCOM standard (the latest version was released in 1996). Gramps is able to import and export a number of file formats, while internally it uses XML.
At its core, the Gramps model uses three basic object types: Person, Family, and Event. A Person has one or more names and a gender, while a Family represents two Persons and their children (i.e., a "nuclear family"). There is no larger structure connecting Family objects; Persons are just members of multiple Families—typically, one with their parents and one with their spouse. Events can either be connected to a Person or to a Family, and contain a date (or date range) and, optionally, a Place.
Other object types are used as well. Notes and Media can be attached to any other object. A Source object contains information about a single data source, while multiple Sources can grouped in a Repository object. Finally, Citation objects are used to connect a Source to other objects. All of these objects together form a Family tree. Although this relational scheme might appear complicated at first glance, it allows great flexibility for Gramps in adapting to a given workflow.
Giving freedom to the user is a defining characteristic of Gramps. There are plenty of Event types already available, encompassing everything from Birth, Baptism, Death, and Cremation to various vocational (e.g., Occupation, Military service), academic (Education, Graduation) and travel (Migration, Naturalization) events. But the user can just as easily create a custom Event by simply typing in the drop-down menu instead of selecting an Event. The same freedom is available everywhere else, though the "official" names should be preferred whenever possible (as they can be localized, used automatically in reports, etc). I have never had to introduce a custom type, as everything required was already provided by Gramps, but the option is there.
The Gramps interface is organized around the listed object types, with two additional tabs available, "Relationships", which provides a more intuitive representation of a Family object, and "Charts", where the user can quickly view several visualizations around the currently selected "Active person": included are a pedigree, timeline pedigree, as well as fan charts of descendants and ancestors. Each screen also has a sidebar and a bottom bar, where the user can use "Gramplets" to show whatever is required. Gramplets are a type of plugin; they represent mini-views which can be used to personalize the interface: Age on Date, Citations, and a simple to-do list are some of the available Gramplets. By default, the sidebar contains the Filter Gramplet, which can be used to quickly filter the data shown in the main window.
Whenever an object is opened, a new window pops out containing the data associated with the object; clicking on other objects will pop out yet more windows. This can sometimes result in many windows being open at once, which can be confusing. To make the entire process more understandable, I will provide an example of my typical workflow.
All data should be sourced, so I first check whether or not I have used this particular source before. Let's say I have found a marriage certificate on some microfilm that I had overlooked earlier. As I already have the Source object in Gramps, I would open the Family view and find the family of interest. Next, directly on the Family object, I would add a new Citation, using an existing Source, to confirm that the family in fact is indeed married. The crucial information on every Citation is the volume, page, or other information I would need to find the relevant entry again. I could also specify the confidence of the citation (a feature I do not currently use) in case I have multiple conflicting sources (for example, a birth certificate will likely have more accurate birth date information than a marriage certificate, but both pieces of data should be recorded).
Since my source has additional information, I would then open the useful Clipboard Gramplet and drag-and-drop my Citation there. Now I can easily drag it to any other object I decide to cite, simplifying my workflow and ensuring no duplicates occur. Having all of my data connected in such a way makes it easy to add an alternate source location (for example, if the certificate becomes available online) or I can attach a Media object containing a scan of the page.
Readers should note that this is just my personal workflow, and others might be equally valid; some professionals might have just cringed at my butchering of data and some hobbyists might think I am over-complicating the simple matter of drawing a pedigree. Luckily, as noted above, Gramps makes no presumptions on its users' workflow, so can be used as seen fit. For those unhappy with their current data representation, Gramps offers a number of tools for database management, including merging objects and automatic extractions of data. All of these features combine together to offer very flexible data input.
However, collecting data is only half of genealogy, with the other half being arguably more interesting—visualization of said data. Other than the aforementioned "Charts" views, which can be used for quick inspection of data, Gramps offers "Reports," divided into textual, graphical, and web. By default, 14 textual and 10 types of graphical reports are offered, though there is some overlap. Textual reports, such as an Ahnentafel table or a detailed ancestor report, can be created in various formats, including HTML, PostScript, and ODT. Graphical reports offer various tree views of data and are available in PostScript, SVG, and other formats.
Perhaps the most interesting is the narrative web report, which can represent the entire database as a website, and can be an attractive way to present the data to non-users. The plugin generates a static website, containing a page for each selected Person and all of the appropriate index pages; here's an example. All reports can be customized as appropriate or printed in any of the supported languages. Special care is given to privacy; it is easy to mark select records as private, or to not print records related to living people (and optionally those recently deceased).
Internationalization is another major focus of Gramps, exploiting a niche that proprietary software makers tend to avoid. Not only is Gramps translated into over 20 languages, it is also possible to define custom date handlers, which allow for locale-specific data parsing and display, and relationship calculators, which offer translated kinship terms (e.g., a "second cousin, thrice removed" in one culture is simply called a "brother" elsewhere). When adding dates, it is possible to use several calendars: the standard Gregorian, but also the French Republican, Swedish, and several others. Adapting any of these features to a new language or locale is relatively simple.
Gramps also offers a plugin system, which can be used to update or download new reports, or to write Gramplets, new tools, relationship calculators, and several other possibilities. Plugins are written in Python, the language Gramps itself is programmed in—at over 450,000 lines, it is one of the larger open-source Python applications. Gramps has plenty of dependencies, so installing it can be somewhat bothersome. In particular, osm-gps-map library is required for a Geography view, which I haven't successfully managed to get working. Binary packages of Gramps are available for download and most distributions provide Gramps in their package repositories (although distribution packages other than Debian and Ubuntu tend to lag behind the project). Gramps is also available for Mac OS and Windows.
Gramps switched to GTK+3 in version 4.0 and has full Python 3 support as of version 4.1. The major feature in 4.1 is a new place hierarchy model. There are also improvements to localization capabilities and other assorted updates; a full list is available in the release announcement and on the bug tracker. Unfortunately, it seems that the move to GTK+3 has resulted in performance regressions; these will undoubtedly be worked on and fixed. The program is still fast enough, but it certainly felt "snappier" in earlier versions. As is common with open-source projects, Gramps has too few developers working on it and help is always appreciated. The plugin architecture and a robust API make it easier to jump into development.
In short, Gramps is a powerful, flexible, and mature project, offering many features, with a strong focus on user freedom and internationalization. While it can certainly feel rough around the edges sometimes, it also easily surpasses proprietary solutions on several fronts; perhaps no open-source alternative has developed because Gramps can already accomplish almost everything. Anyone with an interest in genealogy will be well-served by giving Gramps a try.
Copyright © 2014, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds