My Free Software

22nd May 2003

1. Introduction
2. Free software
        2.1. MUNDI
        2.2. tt - Tetris for Terminals
        2.3. The reference ETA interpreter
        2.4. The Net::Z3950 Perl module
        2.5. Contributions to the Net::Z3950::SimpleServer module
        2.6. ZOOM-C++
        2.7. CQL-Java
        2.8. ZOOM-Java
        2.9. TROUT
        2.10. The Games::ScottAdams Perl Module
        2.11. The Perl::PQF Perl Module
3. Free specifications
        3.1. The Zthes profile
        3.2. The ETA language specification
        3.3. The ZOOM Abstract API
        3.4. ZeeRex

1. Introduction

I joined the AFFS (Association For Free Software) a few days ago, and it occurred to me that I ought really to make a list of my own free software by way of justifying my existence :-) For those unfamiliar with the concept of free software, the word ``free'' refers to freedom (as in ``free speech'') rather than freedom from cost (as in ``free beer''). In practice, the latter always comes with the former; but the converse is not always true, which is why it's important to be clear that what free software offers is primarily freedom.

For much, much more on this subject, see the web-site of the Free Software Foundation. A good place to start is with the article Why ``Free Software'' is better than ``Open Source''. (For the record, I do not agree with Stallman that all software should be free as a matter of moral good. I think that releasing free software is a morally good thing, so I will do it; but I don't see that I have the right to require others to do the same if they don't want to. For example, see the licence of my own zSQLgate.)

As I started to make notes on my own free software, I realised that the significance of much of this code is that it implements open specifications. This emphasised to me the importance of those specifications themselves: they enhance interoperability and encourage competition between alternative implementations that are Darwinianly selected on the basis of factors like reliability, efficiency, feature-richness and cost of deployment - which of course is exactly as it should be. I've been the principal author of several such open specifications myself, so I thought they deserved to be listed here as well as the actual software.

2. Free software

This is a rather mixed bag, in chronological order so far as I am able to recontruct the history.

2.1. MUNDI

Started on or around 18th May 1988

I believe this may well have been the first MUD to run over the Internet. Unfortunately, there wasn't really an Internet as we know it for it to run over at the time - but it was, for a while, immensely popular at Warwick University. Lots and lots of history and other goodies are available.

www.miketaylor.org.uk/tech/advent/mundi

2.2. tt - Tetris for Terminals

Started 26th May 1989

This was an implementation of Tetris that ran on ordinary 80x24 serial terminals, which meant everyone who had a Unix account at Warwick University could play rather than just the elite few with passwords for the workstations. Fourteen years on, I still get occasional ``fan mail''.

www.miketaylor.org.uk/tech/tt

2.3. The reference ETA interpreter

Started not later than 24th August 1999

This all-but-trivial Perl program is an interpreter for the esoteric programming language ETA. The real brain-work here is what went into the specification but the interpreter's an important proof of concept. I am glad to say that since the specification was released, there have been several much better implementations, including Steve Sykes's optimising interpreter and MTV Europe's truly tiny interpreter, currently weighing in at 357 bytes and falling.

www.miketaylor.org.uk/tech/eta/doc/index.html#5

2.4. The Net::Z3950 Perl module

Started 23rd May 2000

A Perl extension that allows Information Retrieval client programs to be built using the Z39.50 protocol, by layering on top of Index Data's YAZ toolkit. This module is the definitive implementation of the Perl binding for the ZOOM abstract API (q.v.) It's been substantially improved by the contributions of others, notably Dave Mitchell and Adam Dickmeiss.

perl.z3950.org

2.5. Contributions to the Net::Z3950::SimpleServer module

Started 30th August 2000

Net::Z3950::SimpleServer is the natural complement to Net::Z3950 - it's Index Data's Perl module for building Z39.50 servers, written largely by Anders Sondberg. I've contributed various bits and pieces to it, most notably a better way for it to transmit query structures to the back-end functions.

(I've also used this module as the foundation for my non-free program zSQLgate, which provides a Z39.50 server capable of searching in, and returning records from, and relational database.)

www.indexdata.com/simpleserver

2.6. ZOOM-C++

Started 8th August 2002

A library implementing the C++ binding for the ZOOM Abstract API: it allows Information Retrieval clients using the Z39.50 protocol to be built in C++, following the same Abstract API as the Net::Z3950 Perl module. This is distributed as a part of Index Data's larger YAZ++ toolkit.

zoom.z3950.org/bind/cplusplus/yaz

2.7. CQL-Java

Started 24th October 2002

This set of Java classes provide facilities for working with the Information Retrieval query language CQL, as described in the CQL tutorial. It includes a compiler, classes representing CQL queries as abstract trees of variously typed nodes, a decompiler (translating trees back into CQL), a translator into YAZ-style Prefix Query Format and a random query generator which is useful for some kinds of testing.

zing.z3950.org/cql/java

2.8. ZOOM-Java

Started 20th November 2002

This is the third binding I've implemented for the ZOOM Abstract API, allowing Z39.50 clients to be written in Java is in Perl and C++ (and others have implemented bindings for many more languages: see zoom.z3950.org/bind for more information). This library is built on top of Ian Ibbotson's ZJKit.

zoom.z3950.org/bind/java/jzkit

2.9. TROUT

Started 28th March 2003

TROUT Resolves Open URLs Trivially.

uk.indexdata.com/trout

2.10. The Games::ScottAdams Perl Module

Started 7th June 2004

A compiler for building Scott Adams-style adventure games.

www.miketaylor.org.uk/tech/advent/sac

2.11. The Perl::PQF Perl Module

Started 17th December 2004

A parser for the Prefix Query Format, written in Perl.

search.cpan.org/~mirk/Net-Z3950-PQF-0.03

3. Free specifications

Apart from the ETA language specification, which is really a sort of joke, all these specifications are to do with Information Retrieval, which is the area I work in when I am doing my day-job. They're described in chronological order.

3.1. The Zthes profile

###

zthes.z3950.org

3.2. The ETA language specification

###

www.miketaylor.org.uk/tech/eta/doc

3.3. The ZOOM Abstract API

###

zoom.z3950.org/api

3.4. ZeeRex

###

explain.z3950.org
Feedback to <mike@miketaylor.org.uk> is welcome!