1\section*{Project Overview} 2 3The GPSTk suite is composed of a set of libraries and more advanced 4applications built upon them. The libraries provides a wide array of 5functions that solve common GNSS processing tasks such as the 6navigation solution or reading a RINEX file. The applications can be 7used by non-programmers to solve specific, well known tasks. 8 9\subsection*{Design} 10 11The design goals of the GPSTk library are portability, modularity, 12clarity, extensibility, and maintainability. These goals allow the 13GPSTk to maximize the audience and lifetime of the library while 14decreasing the costs associated with long-term maintenance. Another 15factor in the design is that GNSS users employ practically every 16computational architecture and operating system. Therefore, the design 17of the GPSTk suite is as platform-independent as possible. For these 18reasons, the GPSTk source is build using C++, and strictly adheres to 19its ISO standard~\cite{iso-14882-2003}. The language by nature 20supports Object Oriented Analysis and Design (OOA/D), a technique 21well-known to support the project's design goals. OOA/D are used 22throughout the design of the libraries and most of the applications. 23The ubiquity of C++ allows the GPSTk to support all major desktop and 24server platforms, most notably Linux, Windows, Solaris and Mac OS X. 25Windows users have two versions to choose from, a native version, 26built using the Microsoft compiler, and a version that executes in the 27Cygwin environment. 28 29OOA/D contrasts with procedural design supported by the C and FORTRAN 30languages. In procedural programming, a function library is provided 31to the user. In Object Oriented (OO) programming, a ‘class library’ 32is provided. Each class is an independent module that can be invoked 33by the user as an object or extended by the user in the form of a new 34class. Classes can build upon each other through a number of 35object-oriented principles, such as inheritance, the use of 36metaclasses, polymorphism, and aggregation. The GPSTk library relies 37heavily on the Standard Template Library~\cite{stlwebsite}, 38which is part of the ISO standard for 39C++. The STL provides OO data structures (containers). These include 40linked lists, vectors, and maps. The STL also provides standard 41algorithms for these containers, e.g., the quicksort 42algorithm. 43 44All of the GPSTk code includes documentation designed for extraction 45by the \gpstkapp{doxygen}~\cite{doxygen}, a freely 46available application that generates a HTML-based documentation from the 47code itself. Like the GPSTk, \gpstkapp{doxygen} is platform-independent. The 48\gpstkapp{doxygen} documents are available on the GPSTk web site or can be easily 49generated from the code in the distribution. 50 51\subsection*{Getting the GPSTk} 52 53The GPSTk can be downloaded over the web via links provided on the project 54website, http://www.gpstk.org/ . Precompiled binaries are available for many platforms. 55Access to the source code base---current as well as well as a history of all changes--is provided through a 56publicly accessible repository hosted by SourceForge. The repository can 57be accessed via a web browser, or using a client from the Subversion 58project~\cite{subversion, subversionbook}. The Subversion project provides two kinds of clients, one with 59a graphical user interface and one based on the command line. Because 60the command line version works identically on all of the development 61platforms supported by the GPSTk, use of the command line tool \gpstkapp{svn} 62is documented in the GPSTk website and this paper. 63 64The following command can be used to retrieve the 65latest GPSTk source from SourceForge and write it into a directory structure on 66the user machine in the current working directory: 67 68\begin{scriptsize} 69\begin{lstlisting} 70svn co https://gpstk.svn.sourceforge.net/svnroot/gpstk 71\end{lstlisting} 72\end{scriptsize} 73 74Note that it is not necessary to provide any user information or password to retrieve the code. 75This form of access is referred to as anonymous in the \gpstkapp{Subversion} documentation. 76Once written, any directory in this structure can be updated to the latest code by first making it the 77current working directory then executing the following command: 78% 79\begin{scriptsize} 80\begin{lstlisting} 81svn update 82\end{lstlisting} 83\end{scriptsize} 84% 85For further detail describing how to build the GPS Toolkit, please refer to the on-line documentation. 86 87 88\subsection*{Project Documentation} 89 90To facilitate true cross organizational development and user 91interaction, ARL:UT established a dynamic website, also known as a 92wiki. The wiki site utilizes an open source product called 93TWiki~\cite{twiki} that is not only a wiki but a full featured and 94easily extensible development platform. The project has customized the 95base TWiki installation to add two capabilities. One capability allows 96for users to submit questions or answers about the project. Another 97provides a framework for capturing development documentation, such as 98brainstorming or designs. The site also supports the 99\LaTeX\ expression for content such as 100equations. Finally, users can choose to be notified when topics are 101changed via email or web feed. 102 103The website hosts a copy of the documentation generated by \gpstkapp{doxygen}. This documentation is updated from the code repository on a daily basis to ensure easy access to the latest documentation changes. Additionally, an IRC channel was established to create a real-time avenue of developer communication. Finally, the new website contains new documentation that describe the GPSTk development process, the release process, how to get started with the GPSTk, and more. The goal of this added information was to help new developers become familiar with the project operation so they can become effective contributors. 104 105The user manual is also hosted on the TWiki. Two manuals exist at this time. 106An older manual, written in \LaTeX, is posted as a PDF. A newer manual is under 107development purely within the TWiki. Development on the older manual has 108stopped. We encourage that all new documentation be added to the new TWiki-based 109manual. This encourages the users to keep the manual accurate. 110 111\subsection*{Branching} 112 113In the last two year, the GPSTk has adopted \emph{branching} to 114support development and release. A branch is in essence a duplication 115of the source. The duplicated code, referred to simply as the branch, 116can then be modified separately from the original, sometimes referred 117to as the \emph{trunk}. The idea is to support simultaneous efforts 118using multiple viable code bases. However, in the end, the branches and 119the trunk must be reconciled. This practice is known as \emph{integration}. 120 121Branching has been used to support two kinds 122of activities in the GPSTk. First, branching was used to enable stable releases. For such a large project, with a large number of 123developers, it is sometimes impossible to ask developers to stop 124contributing new code so that a stable version can be 125released. Branching was used to generate the stable releases 126associated with version 1.5 and 1.6. Second, branching can be used to 127separate large scale modifications. The development of RINEX-3, described 128later in detail, utilizes a new branch. 129