Urgent news for maintainers of gpsd clients

We've been warning it was coming for years, and it's here: the request/response protocol used by gpsd is about to change in ways that will break your application if you're not careful. The old protocol is still supported, but will remain so only for a very limited time. Read "Moving to GPSD-NG: a Guide for Client Developers" to find out why this is happening and what you need to do about it.

About gpsd

gpsd is a service daemon that monitors one or more GPSes or AIS receivers attached to a host computer through serial or USB ports, making all data on the location/course/velocity of the sensors available to be queried on TCP port 2947 of the host computer. With gpsd, multiple location-aware client applications (such as navigational and wardriving software) can share access to receivers without contention or loss of data. Also, gpsd responds to queries with a format that is substantially easier to parse than the NMEA 0183 emitted by most GPSes. The gpsd distribution includes a linkable C service library, a C++ wrapper class, and a Python module that developers of gpsd-aware applications can use to encapsulate all communication with gpsd.

Besides gpsd itself, the project provides auxiliary tools for diagnostic monitoring and profiling of receivers and feeding location-aware applications GPS/AIS logs for diagnostic purposes.

The goal of the gpsd project is to create a solid layer of open-source infrastructure for programs running under Linux and other open-source Unixes that want to be location-sensitive. We aim for simple, robust interfaces, unfussy operation, and an easy learning curve for application developers. Applications that presently use gpsd include pyGPS, Kismet, GPSdrive, gpeGPS, position, roadmap, roadnav, navit, viking, and gaia.

Under Linux, gpsd normally runs with zero configuration. Binary packages for this program install hotplug scripts that do the right thing when a USB device goes active, launching gpsd if needed and telling gpsd which device to read data from. Then, gpsd deduces a baud rate and GPS/AIS type by looking at the data stream.

gpsd is high-quality, carefully-audited code. It is regularly checked with the standard mode of splint, audited with Valgrind, and an extensive regression-test suite is used to check correct behavior before each release. This care has paid off in an exceptionally low defect rate; our first Coverity scan, in March 2007, turned up only two errors in over 22,000 LLOC.

Statistics about the code volume, commit history, and contributors associated with thias project are available at Ohloh

Our development platforms are open-source Unixes — Linux, and the *BSD family. Presently Linux and OpenBSD are directly supported. We'll support proprietary Unixes if it's not too much work (and it usually isn't). Apple's OS X is back in our good books, but it is criticial that you have all your USB drivers updated. Older drivers are buggy and prevent gpsd from being able to read from USB-serial devices.

No, we don't support Windows — get a better operating system.

If you represent a GPS manufacturer interested in qualifying your device for use with Linux and other open-source operating systems, we are your contact point. We'll need (1) on-line access to interface documentation, (2) a few (as in, no more than three) eval units. and (3) an engineering contact at your firm. For more, see our page welcoming vendor cooperation.

See the FAQ for information on how to report bugs.

All advertising revenue from this site (on the optimistic assumption that we ever see any!) will go to the project's fund for buying test hardware and standards.

News

This web page was last updated on @DATE@. You can browse the project's news file or to-do list here. Note: because of the way this website is maintained, these files may reflect the state of the repository tip (development version) rather than the latest released stable version.

Downloads and packages

Look in the download directory for tarballs of all released versions. Access to the bleeding-edge developer version is supported via Subversion. The main project page is here on berlios.de.

If you are using a Debian-based distribution (including Ubuntu) you can probably install gpsd through your regular package manager or by tying "sudo apt-get gpsd" at the command line.

Mailing Lists

There are four project mailing lists:

Documentation

The following manual pages describe the code. Note: because of the way this website is maintained, these files will describe the state and features of the repository tip (development version) rather than the latest stable version.

gpsd.1
The gpsd daemon.
gps.1
The gpsd test clients.
libgps.3
An interface library that manages communication with the daemon.
libgpsmm.3
C++ class wrapper for the libgps C binding.
libgpsd.3
The low-level library used by gpsd to talk to a GPS.
gpsprof.1
The gpsprof program for plotting spatial scatter of fixes and fix latency.
gpsfake.1
The gpsfake test harness simulating a GPS.
gpsctl.1
The gpsctl tool for tweaking GPS settings.
gpscat.1
The gpscat tool dumps output from a serial device. Optionally, it can packetize the data.
gpsmon.1
The gpsmon real-time packet monitor and diagnostic tool. (This replaces the sirfmon tool in older versions.)
gpspipe.1
A simple client that captures GPS output and/or gpsd reports and sends it to standard output.
gpsdecode.1
The gpsdecode packet decoder.

Also, see the FAQ.

We have a list of compatible GPSses with some technical information. We also have a list of NMEA sentences.

There is a Hacker's Guide to the project philosophy, design, and code internals. You should read this if you want to contribute code.

We maintain a GPS Hall of Shame that describes particularly egregious vendor blunders.

Real Time

Some of the developers hang out regularly on IRC at channel #gpsd at irc.freenode.net.

Some GPSD data streams that you can look at are http://gpsd.rellim.com and http://gpsd.mainframe.cx. You can also point our test clients at these hostnames to see what the clients do, even if you don't yet have a local GPS.

White Papers

ESR's Guide to Hacking With GPS
If you are new to GPS technology and don't quite understand what gpsd is about, you might find this interesting.
Why GPSes suck, and what to do about it
The designer of gpsd 2.0 rants in an at least semi-humorous way about everything that's wrong with GPS standards and vendors.
GPSD-NG: A Case Study in Application Protocol Evolution
History and evolution of the GPSD-NG protocol, illuminating some larger trends in application protocol design.
Moving to GPSD-NG: a Guide for Client Developers
A practical explanation of GPSD-NG, and how to move to it as painlessly as possible.
Towards A Better GPS Protocol
An analysis of what's wrong with NMEA 0183, and a simple way to fix it.
Where's the Latency? Performance analysis of GPSes and GPSD
An analysis of latency in the GPS/GPSD system. Has implications for the design of gpsd and vendor claims about binary protocols.
Notes on Writing a GPSD Driver
A guide for the perplexed by the author of the Jupiter-T driver.

Recipes and related resources

gpsd also works with some bluetooth GPS receivers. Warning: there are serious problems with the firmware in at least one family of Bluetooth implementations shipped by Holux that may result in gpsd bricking your GPS. See this bug warning for a description of the problem.

The gGPSDproxy project is a small program which reads GPS data from a running gpsd process and forwards it to a remote server via an UDP connection. GPSDproxy is intended to be run on GPS enabled mobile devices.

Diego Berge has written a prototype Qt-based client, basically xgps with a more modern look and feel.

We supply a Gentoo Linux ebuild script in the source distribution.

You can find Debian-unstable packages here.

There's a Perl client library on CPAN.

gpsd is carried in the OpenBSD ports tree.

There's a Wiki page devoted to gpsd helper applications.

OpenStreetMap is a wiki aiming to build a freely available, world-wide streetmap.

Freedesktop.org is hosting a project called geoclue that aims to provide a location service layer for all D-Bus-using applications. It can use gpsd as a source for location info.

The penguin-with-satellites logo is a hacked version of one I found here. This project seems to be defunct, or at least the maintainer is not responding to email.

Other GPSDs

There used to be three Linux-based forks of gpsd in the wild, but this GPSD project reabsorbed one and the other two are now defunct for unrelated reasons. You can read a brief history of the gpsd project if you are curious.

There is a project called gps3d that ships a gpsd with similar goals to ours, but which appears to be an independent development. There haven't been any releases since early 2002.

There is a GPSd project that is a GPS daemon written in Java and apparently intended to provide location information for browsers.

There is a gpsd-like hack hosted under Microsoft Windows. It provides gpsd service from data in netstumbler under win32. This way programs such as JiGLE can still get GPS data from netstumbler. This program is not genetically related to gpsd.

There is an interesting alpha-stage proposal called locod that aims to integrate location information from GPSes and other sources.

gpsfeed+ is a program that simulates the output of a GPS in motion, and can be used for testing GPS-aware applications.

We aren't Green Parrot Software Development, nor are we the Greenville Public School District nor the Greater Peoria Sanitary District, nor even the Greater Portland Soccer District, nor the Green Party of San Diego, nor do we have anything to do with the General Product Safety Directive, the the Guiding Principles of Sustainable Design, nor the Glatt Plagiarism Self-Detection Program.

Google
 
Web gpsd.berlios.de