Repository navigation
This is Clozure CL 1.14.
The headline for this release is a port to 64-bit ARM. CCL now runs natively on Apple silicon Macs and 64-bit ARM Linux.
Important: The heap image and fasl file versions have changed on all ports. You must download and use the 1.14 bootstrapping binaries in order to rebuild CCL from source. Any existing fasl files will need to be recompiled.
Obtaining CCL
There are two ways to obtain a copy of the release.
If you are not interested in tracking or updating CCL sources at all, you may download an archive file of the form ccl-1.14-platform.tar.gz. See the “Assets” section at the bottom of the page for links to the various archive files. The archive will contain everything you need to run CCL (including complete source code and binaries), but not a copy of the Git repository.
If, on the other hand, you would like to be able to pull updates from Git, follow these steps:
- Obtain source code by cloning the repository (with
git clone https://github.com/Clozure/ccl.git) - Download and extract the bootstrapping binaries for your system. Because CCL is written in itself, you need an already-working copy of CCL to compile it. The archive also contains a database derived from the system header files which is used by the FFI.
For example, to get a copy of CCL for Linux/x86, you would say:
# fetch source code into directory "ccl"
git clone https://github.com/Clozure/ccl.git ccl
# download pre-compiled binaries
curl -L -O https://github.com/Clozure/ccl/releases/download/v1.14/linuxx86.tar.gz
# go into the "ccl" directory where the sources are
cd ccl
# unpack binaries (lisp kernel, heap image, interface database) into "ccl" directory
tar xf ../linuxx86.tar.gz
You can now rebuild CCL to make sure everything is up-to-date with respect to the current sources. A quick way to do this is to run the following command from the shell:
echo '(rebuild-ccl :full t)' | ./lx86cl64 -n
Note that lx86cl64 is the executable for x86-64 Linux. Use the appropriate executable name (see table below) if you are on another platform. For example, you would use darm64cl on an Apple silicon Mac.
If you cannot run the lisp, or if (rebuild-ccl :full t) fails, there are a few common reasons for that.
- On Windows,
(rebuild-ccl :full t)will not work because Windows cannot remove an open file: build the lisp kernel separately, as described below - On Linux, you may see a message like "version 'GLIBC_2.38' not found". This means that the glibc on your system is too old; you will have to rebuild the lisp kernel locally
- The m4 program might not be installed (it is needed on every platform except the two arm64 ports)
- On an Apple silicon Mac, building the lisp kernel requires Xcode 16.4 or later
If m4 is not installed, install it with apt install m4 or whatever the proper command is on your system.
In the other cases, the solution is to build the lisp kernel binary (a program written in C and assembly language) separately. To do this, use the following commands:
cd lisp-kernel/linuxx8664
# or lisp-kernel/win64 or lisp-kernel/win32 or lisp-kernel/darwinarm64, etc.
make clean
make
When that is done, start the lisp and evaluate (rebuild-ccl :clean t). This does the same thing as :full t, except it will not attempt to rebuild the lisp kernel for you.
The name of the lisp kernel binary (which is the executable that you invoke to start CCL) is different for each platform. For instance, on an Apple silicon Mac, the name is darm64cl, so you could start CCL by running ./darm64cl. See the manual for more details.
Binaries were built on the following systems:
| Platform | Version | executable (64-bit) | executable (32-bit) |
|---|---|---|---|
| darwin/arm64 | Xcode 27.1 on macOS 27.2 (runs on macOS 11 and later) | darm64cl | |
| darwin/x86 | Xcode 27.1 on macOS 27.2 (runs on macOS 10.13 and later) | dx86cl64 | |
| freebsd/x86 | FreeBSD 14.4 | fx86cl64 | fx86cl |
| linux/arm | Raspberry Pi OS (Legacy) (based on Debian 11 bullseye) on Raspberry Pi | armcl | |
| linux/arm64 | Ubuntu 24.04 LTS | arm64cl | |
| linux/x86 | Ubuntu 24.04 LTS | lx86cl64 | lx86cl |
| solaris/x86 | OmniOS LTS (r151046) | sx86cl64 | sx86cl |
| windows/x86 | Windows 10, with MSYS2 (MINGW32 environment for 32-bit, and MINGW64 environment for 64-bit) | wx86cl64.exe | wx86cl.exe |
Both 64-bit and 32-bit versions of the lisp are included on the x86 platforms (except for macOS, which doesn't support running 32-bit x86 binaries).
For convenience, we recommend that you use a script to invoke CCL. Please see the sample ccl and ccl64 scripts in the scripts directory for examples you can customize as needed.
Notable changes
64-bit ARM
CCL now runs on macOS on Apple silicon (darm64cl) and Linux on 64-bit ARM (arm64cl). This includes systems like the Raspberry Pi 5 and AWS Graviton instances.
Cocoa IDE
The disk image ClozureCL.dmg contains a standalone Clozure CL.app. It is a universal application (both Intel and Apple silicon), signed and notarized, and includes its own copy of the CCL sources (so that M-. works) and the interface databases. It can be moved anywhere, e.g., to /Applications. Use make -C cocoa-ide app to build it locally if you want to do that for some reason.
You can still build the IDE in place with (require 'cocoa-application), although you must have Xcode installed to do so (in order to compile .xib files).
32-bit ARM
On 32-bit ARM, some long-standing “unhandled exception 4” crashes in multithreaded programs (#428, #520, #649) are fixed now. If you gave up on threads on ARM, please consider trying again.
Other
get-internal-real-time now uses a monotonic clock, so it doesn’t jump when the wall clock time changes. It uses a clock that continues during sleep whenever the host system offers such a clock.
The output of lisp-implementation-version shows the backend name, rather than a semi-pretty version of the host cpu/os/word size.
Full Changelog: v1.13...v1.14
I would like to acknowledge Mauro DiBenedetto (@cyclistmass), whose tenacious effort moved the arm64 port much faster than it otherwise would have done.
Nikolai Matiushev (@egao1980) contributed initial support for Darwin on Apple silicon, including bring-up of the Objective-C bridge and the Cocoa IDE.
Thanks also to Gilbert Baumann, Stas Boukarev, John Connors, Kevin Griffin, Lukáš Hozda, KG, Jussi Lahdenniemi, Sebastian Melzer, Gary Palter, Yahya Sohail, and Gail Zacharias for their contributions, and to everyone who reported bugs and tested the arm64 preview releases. Your bug reports and PRs and feedback are invaluable.
My (@xrme) own work on the arm64 port and this release was supported by Spark Innovations Inc.