Open source software on the seven seas

Open source sails the seven seas

Open source on the seven seas
Image by : 

Patrick Nouhailler. Modified by CC BY-SA 2.0.

Open source navigation tool OpenCPN is changing boating for weekend warriors and serious seafarers alike.

First there were marine charts, then came those bulky, slow, and expensive dedicated chartplotters with arcane user interfaces. Then, at last, came chartplotters running on laptops, tablets, and mobile devices. You would think that would be the end of it: intuitive point-­and­-click interfaces similar to the ones we use in our daily lives, slick looking graphical user interfaces, a wide selection of downloadable raster or vector charts. What more could you ask for?

How about an open source chartplotter and navigation (CPN) tool? One that you can download for free, and yet comes with all the basic functionality you would expect from a proprietary CPN, plus state-­of-­the-­art features such as AIS integration, S57 and encrypted S63 vector chart support, BSB raster chart support, OpenGL acceleration, GRIB file import, autopilot output support, and many other features.

Enter OpenCPN. Created in 2007 by a team of active sailors using real-world conditions for program testing and refinement, OpenCPN today boasts over 25 active contributors to the core application and tens of others working on a growing number of plugins. That may not sound like many compared to large open source projects for horizontal applications, but it's a larger development team than any proprietary CPN solution can claim, consisting mostly of dedicated and experienced sailors from around the globe with creative energy and passion to spare.

A quick search on Google Trends shows that by early 2011 OpenCPN had surpassed all the main proprietary CPN applications in the number of daily searches. Downloaded nearly a million times since January 2009, OpenCPN can now be found on small sailboats, large yachts, racing boats, fishing boats, research vessels, pilot vessels, and some cargo and cruise ships. Even the U.S. Coast Guard uses it. You can run it on Windows, Mac, Linux, BSD, Solaris, Raspberry Pi, and Android. And lest we forget, the entire catalog of U.S. NOAA Charts is available for free, and so is a growing number of charts from other governmental organizations around the world. Plus, of course, you can utilize any commercial chart based on the more commonly supported raster or vector standards.

You can join the team and create your own fork too. Develop a plugin, or just contribute to the master project. And you don't have to be a developer. For example, if you can't find OpenCPN in your language, you can join the OpenCPN Crowdin localization project and add that language to the existing 24 localized versions.

Seaworthy architecture

At the root of OpenCPN's success lies a number of sound architectural choices. For one, the application is designed to be responsive, which, for software that is as graphic­s-intensive as a chartplotter, is no trivial task. The choice of C++ as a language, combined with the platform­-independent wxWidgets framework, creates a concise feature set producing small code size. OpenGL graphics acceleration probably has a lot to do with that.

Launching and shutting down the application is lightning ­fast (compare that to the experience of turning on your old hardware­-based chart­plotter in a pinch, perhaps as you approach an unfamiliar anchorage!). Zooming in and out, and dragging around charts, is simple. And, the chart-­quilting function (i.e. the automatic loading and rendering of contiguous charts as the user enlarges, scrolls, or pans the viewport) that is often a sore point with existing CPNs, is seamless and remarkably fast. All this while CPU and memory usage is kept within very reasonable limits.

A sailor’s dream toolkit

If any one single feature has set OpenCPN apart from other similar applications, it is probably its widely successful plugin architecture, another byproduct of the open source mindset that influenced product design from the get­-go. Plugins allow third parties to augment the core functionality of the application through external run­time libraries that can be downloaded, installed, and configured at any point. In keeping with the overarching philosophy that open source makes for better, more supportable products, plugins themselves need to to be distributed in accordance with the GPLv2 license, the legal distribution framework adopted by OpenCPN.

At the time of writing, there were over thirty plugins listed on the OpenCPN site, and counting. Do you want GRIB vector wind forecasts for a specific area? Install the GRIB plugin. It will fetch the latest GRIB data for the area by email, using your Internet or SailMail connection. Need to plan an ocean passage? Download the Weather Routing plugin, which will recommend the best route based on weather predictive models. What about overlaying you radar images to your chart? There's a plugin for that, just like there's a plugin to overlay weather­fax images.

The list goes on and on, but you get the gist. There is no limit to the all the possible ways of enhancing your chart­plotter's functionality, to the point that in the future we may no longer refer to it as chartplotter and navigation software, the same way we no longer refer to an iPhone as a phone.

Open sourcing the world's sailing knowledge

One of the ways chartplotters are creating a broader and more compelling user experience is by incorporating cruise­-planning features. Why not use the same application you spend most of your time on when sailing to search for marinas, anchorages, docks etc. right on your chart? After all, you probably plan your road trips using Google maps to look for hotels, restaurants, shops, etc.

Plugins such as the aforementioned Weather Routing tool can play a key role in deciding how to get there. But what about choosing the right "there" in the first place? What marina has room for catamarans? Is that anchorage exposed to southerly winds? How do other cruisers rate the WiFi service at that establishment? You could spend hours culling the same information from sailing directions pubs, cruising blogs, and forums, web sites, etc. (Nevermind the old printed cruising guides that many sailors still use.)

The sQuiddio plugin does just that: it taps into a user-­sourced repository of over 10,000 cruising destinations from all over the world by downloading gpx files containing contact data, user ratings, comments, and other information. sQuiddio allows users to add destinations by clicking on the relevant point of the chart and filling out a quick form.

Knowing what a precious resource Internet connectivity is to cruisers, the plugin tries to minimize the amount of bandwidth needed by caching some of that information locally. Each destination contains a link to the corresponding page on the website, where a user with a network connection can find additional information about the destination together with images posted by users. You can see a list of boats currently anchored or moored at the destination, so you get a feel for how crowded the location is. Some stats about type and size of boats that have used the destination in the past are also provided. You can even add comments and photos to a destination by posting a geo­coded tweet or an Instagram post. will add that information to the repository based on the coordinates contained in the post.

Shared code and shared information

We chose to hone in on one particular plugin to highlight how even the very specific domain of marine navigation software is following the same evolutionary pattern as other open source domains: they are extending beyond the simple sharing of code and coding practices to include information repositories. The amount of collective knowledge shared by millions of boaters around the world could not be possibly generated, let alone owned, by a single organization. It needs to be a shared asset.


A collection of articles on the topic of open source software, tools, hardware, philosophies, and more in science.




Great content thanks

Vote up!
Vote down!