Publicly Funded Free Software

An experiment

The Plan

  1. Suggest a few small software projects that might be interesting or generally useful.
  2. Allow a week for interested people to pledge donations to the project of their choice.
  3. Choose the project for which the most has been pledged. Those who pledged to the winning project must then donate; those who pledged to a project that didn't win owe nothing.
  4. Work full time for two weeks on the selected project, publishing daily progress updates, with code published as often as possible.
  5. Release the code under a permissive free software license.
  6. Release a summary of the project, lessons learned, and future plans.

Timeline: one week of planning, two weeks of programming, one week of review.

The Goal

Direct funding by the public of free software, hence "Publicly Funded Free Software."
This is the first in a series of experiments to that end.


2008 Dec 3
The initial phase of development on the Tree Explorer is finished, with a demo, and preliminary documentation. A summary of the experiment and the tree explorer project should be put up soon.
2008 Nov 22
The Tree Explorer is being developed, with progress updates every day or so.
2008 Nov 17
Pledges are closed, the winner is Tree Explorer with $10 pledged. During the pledge period this page was accessed by 159 unique IP addresses. The low traffic makes it difficult to draw meaningful conclusions from this phase of the experiment.
2008 Nov 10
The pledge period is open! Pledges close at 05:00 AM UTC (12:00AM EST) on Monday, 2008-11-17.

The Projects

Tree Explorer

The tree explorer is a JavaScript widget which displays part of a tree. The tree might represent files on a hard drive, pages on a Web site, or any hierarchical data. The displayed portion of the tree changes as the mouse pointer moves over it, allowing rapid exploration of trees too large to be displayed intact on a single screen.

Here is a rough demo, written in about 18 hours. The tree is drawn from Wikipedia articles, where the children of each article are the other articles listed in the "See Also" section (trimmed so as to make the demo work a little better). Navigate the tree by moving the mouse; click to load the article in a frame below. Like all the demos on this page, this is tested in Firefox 3 only and may not work in other browsers. Even in Firefox 3 it isn't very usable, and breaks on nodes with too many children, so a little imagination is required.

The branches of the tree may be retrieved or even generated as needed using asynchronous JavaScript, so even infinite trees may be navigated without slow loading times or unduly high bandwidth usage. Not only trees but arbitrary graphs could also be explored in this way.

A similar interface could be used to edit tree structures as well as explore them.

For some fascinating work nearby, see the JavaScript Information Visualization Toolkit (JIT).

If this project wins, we would develop the UI itself and a suitable API for integration with other projects. Unlike the lgrep and grapher projects, this is more of an application component or widget than a standalone Web application.


Lgrep is a Web-based "live grep", potentially useful for log file analysis, exploring large data sets, data visualization, and any kind of quick text processing that might otherwise be done with POSIX or Perl.

To use lgrep, first choose a data source: any Web address, an uploaded file, a set of URIs, etc. (In the demo below there is a fixed set of input files.) The data is immediately loaded and displayed (as plain text, HTML, etc, as per media type). Then, you may choose a filter such as grep, which determines what records get displayed. As you type, records which don't match the filter are removed from the output. Various other verbs are provided to sort, cut, limit, group, compare, and analyze. The results are assigned a unique URL so you can share the output (and the recipe that created it) with others.

Lgrep is comparable to AWK, or grep, head, tail, cut, sort and the other Unix utilities, but with immediate feedback, and designed for the Web and for collaboration, hence "live grep."

Here's a toy demo of what this might look like in action, written in about 7 hours.

To this we would add:

In a second round of development, we could add the ability to write your own verbs, undo/redo, statistical aggregate functions, visualization features with charts and graphs, and so on.


Grapher is a Web-based function grapher. Just like a graphing calculator, it uses a formula for y in terms of x and a range to generate an image.

Here's a very limited demo, written in about four hours. Enter any JavaScript expression in the text field to try it.

To this we would add:

Suggest Another Project

Ideal projects for this experiment are:

Suggestions are welcome on the mailing list (see below), or by email to

Future projects

Future projects will likely be more ambitious, such as Web-based interfaces for email, or collaborative programming or text editing.

Mailing List

Ongoing discussion is on the mailing list.