At this page, we provide the sources of the last Secondo release. Note that if you have an old installation of Secondo, you should remove this old version completely (or just rename the containing folder).

Technical Details

Release Date: 2021-09-03
Version: Secondo 4.3.0
Download Size: 100 MB
Encoding: Latin-1
md5sum: b3b1818a026741a1ea46a9d6e9c863b2
sha1sum: f1e20411d93771929d4cd474e8aa89c315ca13be
Known to Work With:
  • Ubuntu 16.04, 18.04, 20.04, 20.10
  • Debian 10 / 11
  • OS X 10.15 Catalina, macOS 11.00 Big Sur


The Secondo sources can be downloaded here.

The sources of the current development version can be found on GitHub.


The first step for installing Secondo is to install the Secondo SDK. After that, download the current Secondo sources using the link above. Unpack the file into your home directory. This will create a subdirectory secondo. Now, navigate into that directory and type make. This will create all parts of the Secondo system (the kernel, the optimizer, and the gui).


At this place, we provide some patches for the current Secondo version.

For version 4.3.0 no patches are available.

Release Notes, Version 4.3.0

Release Notes, Version 4.2.0

Release Notes, Version 4.1.2

Release Notes, Version 4.1.0

Release Notes, Version 4.0.0

New Algebra Modules

Provides distributed query processing. One Secondo system called the master controls many Secondo instances called workers running on different computers/cores. So-called distributed arrays are provided whose field are stored in a distributed manner on the workers. Operations are applied in parallel to all fields of a distributed array. Fields can be of any available Secondo type, in particular, relations or nested relations.
This algebra allows one to load existing Secondo objects (e.g. relations) or query results into main memory and keep them there for further querying. The algebra controls available and used amounts of memory and maintain a catalog of objects loaded. AVL-trees, R-trees, and M-trees are available for main-memory indexing.
DBScanAlgebra, OpticsAlgebra
These two algebras provide the well-known algorithms for density-based clustering, DBScan, and OPTICS. Clustering may depend on geometric distances or arbitrary user-defined similarity functions.
Provides operations to measure similarity of trajectories in different ways, to support different applications.
A comprehensive algebra for the purpose of teaching all aspects of algebra implementation in Secondo.
Allows one to create B-tree or R-tree indices on top of binary files storing relations. Useful in a distributed environment, as index files can easily be moved to other computers.
Supports the coupling of Secondo with Cassandra. See the work on Distributed Secondo.


The optimizer is now available in a basic version (directory OptimizerBasic) and the current version (directory Optimizer). The basic version reflects the state of optimizer implementation from about 2006. It is provided to facilitate understanding of the basic concepts of the Secondo optimizer (omitting all the extensions of the current version to keep it simple).

On the other hand, the basic algorithm for conjunctive query optimization has been extended to support the management of properties for intermediate results. This could be the order of a stream of tuples, or the distribution criteria for a distributed intermediate result. In both directories, the old query optimization algorithm is still available in the file, the new one in file

New textual user interfaces have been introduced that allow one to mix queries at the SQL level with queries in Secondo executable language. They are:

The first one is a stand-alone interface comparable to SecondoTTYBDB, the second the client-server version comparable to SecondoTTYCS, and the third one the stand-alone version running without transactions, like SecondoTTYNT. All three versions can run scripts combining executable language and SQL commands.

In contrast to SecondoPL, which requires Prolog terms as input, these interfaces as well as the Javagui allow one to enter SQL queries and commands in a more natural syntax, as it is NOT necesssary any more to use lower case names. Instead, all names of Secondo objects can be written in the same way as in the kernel, including relation and attribute names.

New Viewers

This viewer provides a better display and updating facilities especially for long text fields. It allows one to edit documents defined across a set of relations. It also provides searching and replacing across relations and a formatting capability, translating format specifications into LaTeX.
This viewer provides a 3D display of sets of trajectories in a so-called space time cube. It requires installation of Java3D; therefore it is by default not activated.
This viewer allows one to display the results of applying the Optics clustering algorithm. One can interactively manipulate a threshold to define smaller or larger clusters.


The secondo/bin/Scripts directory provides some scripts written in Secondo executable language for performing certain tasks.

From Secondo 4.0.0, scripts can be documented in the pd format generally used for program documentation in Secondo. An example is importGermanyOsm.sec which can be formatted with "pdview importGermanyOsm.sec".

Furthermore, it is now possible to write scripts mixing executable language with SQL statements. An example is nrwImportShape.psec.

The script imports OpenStreetMap data from an XML file. It reconstructs linear features as a nested relation containing lists of nodes and lists of tags and the geometry of type line. Its main purpose is to construct the road network as a directed graph. The resulting graph representation can be used for map matching recorded trajectories or for shortest path search.
A shorter version of the previous script (reduced of some extras) for which, however, documentation exists in file ORGfromOSM.sec - Road Network Construction.pdf.
Imports eight classes of objects such as Roads, Waterways, Buildings, etc. from a set of shapefiles derived from OpenStreetMap data (downloaded from GeoFabrik). Needs to be run in a PL shell (e.g. SecondoPLTTYNT) as it includes SQL commands.
This is a parallel version of the previous script to be run on a cluster.
Parallel sorting on a cluster.

Old Versions

For some nostalgic reasons, here some old and even older versions can be found.
Date Version Source Code Notes
2020-05-29 4.2.0 Source Code(81 MB)
md5sum: a4e55c2a79aaab193ed2dc125ad710af
sha1sum: 9311456a0a704bb8f60d223da4f79b94a60acf51
29/11/2019 4.1.3 Source Code(77 MB)
md5sum: 51aa7c3e9b74fc57aaa167f7ba41214b
03/06/2019 4.1.2 Source Code(76 MB)
md5sum: 75c1bcc02c038961bab01198dbfa73b3
12/20/2016 4.1.0 Source Code(38 MB)
md5sum: 6f08e2fd5a86744f90ee2d51c92c40cc
05/10/2016 4.0.0 Source Code(38 MB)
md5sum: 2910ed4b0f3cd31bc0710cc4c34f77ce
Release Notes
09/17/2014 3.4.0 Source Code (94 MB) notes
10/31/2012 3.3.0 Source Code (31 MB) notes
12/16/2011 3.2.1 Source Code (25 MB) notes
09/08/2011 3.2.0 Source Code (26 MB) notes
07/20/2011 3.1.1 Source Code (24 MB) notes
Last Changed: 2020-05-29 (JNI)