The cirCle project is creating a Free (as in "Free Software") Common Lisp development and deployment platform for Linux-based GNU systems. It will include a Lisp system, a powerful integrated development environment (editor/debugger/class browser/etc), documentation, tools for packaging and installing code, and all the libraries needed for productively doing "everyday" programming for things like graphics, networking, Web interfaces and talking to databases.
``GNU will be able to run Unix programs, but will not be identical to Unix [...] Both C and Lisp will be available as system programming languages.''-- The GNU Manifesto, rms, 1985
Today the community of Free Software developers have succeeded in creating OS kernels, libraries, basic programming tools and Unix-compatible utilities which are as good as and often better than the systems they replace. We've developed code that we ourselves want to use ("scratching an itch") and the result has been high quality, secure, reliable, flexible software.
The picture changes when we look at "end-user" application programming. These applications are much bigger and more complex, therefore harder for developers to write and harder for users to extend and modify for their needs. Additionally, the target user is often not expected to want to modify the software, so configurability and extensibility become low priorities. Development becomes less rewarding for many people because they do not expect to use the finished program.
cirCLe is designed around the principle that today's users may be tomorrow's developers. We encourage users to extend or change software for their needs, and so increase the likelihood that they will become contributors to our community.
One important way that we do this is to grant users the same opportunities to change software that we ourselves have as we write it. So instead of allowing limited `preferences' or `configuration options', or of tacking on a `scripting language' to allow control of high level concerns, we develop in the same language throughout. Therefore we use a language which has both the interactive development style (no tedious recompilation) and domain constructs of a scripting language, and the facilities for developing large systems and OS access that make a real programming language "real".
The first release (version 0) of cirCLe is primarily aimed at prospective developers of cirCle itself. Because we want people to be able to start hacking as soon as possible, v0 includes some tools which we will replace in later versions.
The description here covers both the initial version of cirCLe and some of our ideas for future versions. For current information on exactly what will be in which version you can consult the cirCLe Task List, but also note that much of the package development is done by other people, so it might well be the case (for libraries especially) that features turn up in v0 or v1 that we haven't even thought of yet.
- a Lisp implementation: Steel Bank Common Lisp (SBCL)
- an editor and debugger interface: Emacs with SLIME
- This is a compromise between what we would like and what's available: in a later version of cirCLe we will replace this with a CL-based editor which uses McCLIM.
- a unix shell interface
- We are working towards a unified "Listener" interface which provides access to the unix shell command line and to Lisp functionality from the same prompt. This will be present in version 0 for testing and demonstration, but for real work we initially recommend an ordinary shell for Unix and SLIME for Lisp.
- a package manager and installer
- Libraries in cirCLe are described using ASDF ("Another System Definition Facility"), a tool that performs a similar role to make(1) in the Unix environment. We also have asdf-install, which can download a gzipped library source package from the net, compile and install it.
cirCLe will include a documentation tool able to produce output suitable for publishing on the Web, printed output, and some format which can be integrated into the development environment for online help. Some form of this tool is required for v0, but not necessarily every libary will initially be documented with it. Eventually we'll have docs in this format for all of cirCLe's infrastructure and libraries.
Earmarked for the initial version 0 cirCLe:
- Graphics support
- McCLIM, an implementation of the Common Lisp Interface Manager
- CLX, an X11 interface for low-level graphics support
- SB-BSD-SOCKETS (part of SBCL) provides a Berkeley sockets interface
- CLORB is an Object Request Broker implementing CORBA 2 (DII, DSI, POA)
- Araneida, the programmable web server (perhaps Portable Allegroserve too)
- Libraries for other protocols: SMTP, IRC, NNTP, DNS, etc.
- Pg supports PostgreSQL databases directly from Lisp
- CL-SQL has other backends as well (but may not be in version 0 because of packaging issues)
- UncommonSQL provides a quasi-standard OO mapping over relational databases; we'd like to include it in some fairly early version.
CL-PPCRE, other string/sequence manipulation functions
SB-POSIX (low-level OS support)
xmls. xml-rpc and soap support would be good
In addition to the documentation provided about specific packages, we maintain some documents about cirCLe as a whole
- cirCLe Style Guide and Coding standards
This covers both general advice about idiomatic Lisp style, and cirCLe-specific issues such as how to generate a new library for cirCLe, advice on choosing licenses, and details of how and where to publish your code so that other cirCLe users can use it. Eventually you can find it here on CLiki: in the meantime, the link you see here is to a scratchpad where we make notes for things that should go into it
- Status report/Task list: see cirCLe Task List
How you can help
If you want to see cirCLe available, there are many opportunities to work on different parts of the system, and you don't need to be an expert Lisp programmer - though obviously we hope you want to learn. Take a look at the cirCLe Task List for something that interests you, and contact the mailing list or the listed contact for more advice on what we're looking for and how to go about it.
If you're already the author or maintainer of Free Common Lisp software, we commend you. You can help cirCLe by testing your software in our Lisp implementation, and by packaging it to be cirCLe-compatible (see the coding standards for details). You might also like to join our mailing list and bring the benefit of your Lisp experience to the project.