There have been at least three forks of gpsd wandering around, all of which are now defunct. This page will explain matters.

The gpsd project was started in 1995 by Remco Treffkorn, back when GPS technology was a shiny new thing. Remco laid out a sound basic framework for a utility that functioned without much fuss for nearly a decade.

Remco's design may, in a sense, have been too good. Because gpsd didn't cause problems or attract attention, the maintainers (including Remco himself and Derrick Brashear) turned to other more pressing problems. The code was neglected for years at a stretch, and became rather dusty. The original architecture started to show signs of strain when Remco, Derrick, and Russ Nelson bolted on support for the odd proprietary format of the EarthMate GPS between early 1999 and late 2002.

Therafter, Russ Nelson hosted the project on pypgs.org for several years and became one of its three maintainers. He continued the gpsd tradition by largely ignoring the code once he had gotten it working well enough to support pyGPS.

Sometime during this period Fritz Ganter, author of the GPSdrive project, forked gpsd. There are a couple of different stories about why the fork happened and some clashing memories. However, the gpsdrive version did not diverge from the parent gpsd in any significant way. The protocol it spoke was a proper subset of gpsd-2's. This variant is also dead; the new maintainer, Jörg Ostertag, dropped it from the gpsdrive-2.10 prereleases in 2007.

Another fork was ngpsd, part of the NavSys project. This diverged from the gpsdrive fork in 2002. The author, Amaury Jaqcquot, is now on the gpsd list and ngpsd has been officially retired.

Yet another fork of gpsd was moved into C++ by Thomas Hargrove and called tgpsd. The protocol it spoke was almost a proper subset of that of gpsd, with PDAVMSQ commands and an 'I' command that could query the azimuth/elevation/signal-strength of an individual satellite. As of December 2006 the tgpsd project page has dropped off the net.

In August 2004, Eric Raymond (yes, that Eric Raymond) tripped over a minor problem with gpsd while playing with his new toy, a BU-303 USB GPS. He looked at the code, muttered imprecations about the thick layer of dust on it, and began hacking.

About a week of frenzied coding later, Eric had (a) completely refactored and cleaned up the code, (b) added every feature then on the developers' wishlists, (c) documented it all, and (d) added substantial new features of his own, including the libgps service library that allows C developers to manage a gpsd session in a remote-procedure-call-like way (e.g., without having to worry about gpsd's protocol or how to unpack its data into a C structure).

Eric's work became the prototype for gpsd-2.0. In mid-August of 2004, Eric moved the project to berlios.de with the approval and cooperation of all three of the 1.x maintainers. (The main reason for that choice of hosting site was that it was among the first to offer Subversion, which was new technology at the time and which Eric and the 1.x developers were all interested in experimenting with.)

In the year between June 2005 and June 2006 the gpsd project went from being mostly a solo effort by Eric to attracting a flourishing community of developers. Prominent among them are Chris Kuethe and Gary Miller, who were given release authority in October 2006.

As 2006 draws to a close, gpsd now supports several vendor binary protocols as well as the original NMEA and Zodiac. The suite of GPS test tools has greatly expanded, and we have implemented a rigorous regression-test framework for the daemon itself. The daemon has acquired new features like multi-device capability and hotplug autoconfiguration.

Further forks of gpsd seem unlikely, as the project is now sufficiently large and visible to co-opt developers who might otherwise have forked the old 1.x sources or written a competing daemon.