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