Code

State

All of the code used to run Who's On First is published under an open source license, typically a BSD-3 license, an available through the whosonfirst GitHub organization:

https://github.com/whosonfirst/

Software in Who's On First is typically developed in one of four languages: Go, JavaScript, PHP and Python. We do this for two reasons: 1) Because one language is a better fit than another for a specific task and 2) To try and ensure that we never let Who's On First become overly dependent on the quirks or biases of any of language.

An explicit design goal of Who's On First is that it should be possible (easy, even) to work with our data in any programming language. It would be impractical to ensure portability across languages for every piece of Who's On First related functionality but we rely on the need to implement core libraries and methods across a variety of strictly and loosely typed languages, and the need to do so quickly and without constant refactoring, as a good benchmark and stress-test for our design decisions.

Go

Go packages typically have a go- prefix and are well-suited for tasks that require heavy-lifting. We also use Go when we want to create tools that can distributed as pre-compiled platform specific binaries.

Go packages are available from the whosonfirst organization on GitHub:

JavaScript

Javascript packages typically have a js- prefix and are primarily designed for use in the client layer of the various Who's On First related web applications. At present most (all) of these packages are designed for use in a browser context but we would like to update them to work seamlessly in both a browser and node.js context.

JavaScript packages are available from the whosonfirst organization on GitHub:

PHP

PHP packages typically have a php- or a flamework-prefix and are primarily designed for use in the application layer of the many Who's On First related web applications. The flamework- prefix references the Flamework anti-framework designed and built by grumpy ex-Flickr engineers.

PHP packages are available from the whosonfirst organization on GitHub:

Python

Python packages typically have a py-mapzen-whosonfirst prefix (which will need to updated in a post-Mapzen worldand are best-suited for manipulating individual Who's On First records. They are also required for certain operations, for example exporting records to disk with Who's On First specfic formatting.

There are two important points to note about that last sentence: 1) WOF-specific formatting is desirable but not required and 2) the requirement to use Python (versus say Go or PHP) to achieve that end is not a feature and points to work we still need to do to ensure functionality across languages.

Python packages are written in Python 2 but we aim to migrate these all to Python 3 shortly.

Python packages are available from the whosonfirst organization on GitHub:

Web applications

Web applications are written in all of the languages listed above and typically have a whosonfirst-www- prefix (that may eventually be shortened to www-).

Web applications are available from the whosonfirst organization on GitHub: