Fact-checked by Grok 2 weeks ago

Steel Bank Common Lisp

Steel Bank Common Lisp (SBCL) is an open-source and for the ANSI programming language, renowned for its high , native , and interactive development environment that includes a , profiler, and tools. SBCL originated as a fork of (CMUCL) in December 1999, developed by a group of CMUCL contributors seeking to enhance maintainability and portability while preserving the core architecture and runtime features of its predecessor. The name "Steel Bank" references the steel and banking industries associated with and , founders linked to . Since its inception, SBCL has evolved through contributions from a global community of developers, with ongoing improvements in , threading support, and platform compatibility, while inheriting a permissive licensing model that combines elements with BSD-style terms. Key features of SBCL include its , which produces efficient native ; support for native threads on multiple platforms; and extensions such as a generational collector and foreign function interfaces for with C libraries. It supports a wide range of operating systems, including , various BSD variants, macOS, , and Windows, making it suitable for both research and production environments. SBCL's design emphasizes robustness and extensibility, positioning it as one of the most actively maintained and performant implementations available.

Overview

Description

Steel Bank Common Lisp (SBCL) is a free and open-source implementation of the ANSI standard, designed primarily as a high-performance native code . Unlike some implementations that default to interpreted execution, SBCL emphasizes native compilation as its core behavior, producing efficient for superior . It includes an integrated interactive environment that provides essential development tools, such as a source-level , a statistical profiler for identifying bottlenecks, and a tool for assessing test thoroughness. SBCL supports for handling international text and native threads for concurrent programming, with compatibility across multiple platforms including , BSD variants, macOS, , and Windows. At its foundation, SBCL functions as a compiler-only system augmented with a environment and supporting tools to facilitate interactive and deployment.

Licensing

Steel Bank Common Lisp (SBCL) derives its licensing primarily from Carnegie Mellon University's (CMU CL), which released its codebase into the to facilitate unrestricted use and . This status applies to the majority of SBCL's files, allowing users to freely copy, modify, and distribute the software without licensing fees or restrictions on derivative works. Certain components incorporate BSD-style licenses inherited from earlier influences, including contributions from (for the Portable Common Loops implementation of CLOS), and (for the LOOP macro), and Gerd Moellmann's work, which require retention of original notices but permit broad usage without endorsement clauses or advertising restrictions. Additional elements, such as the CityHash mix function, fall under the , further emphasizing the project's permissive nature. SBCL's own modifications and new contributions are released into the where feasible, or under the license, enabling commercial applications, verifiable builds via transparent , and seamless community involvement without obligations that could limit redistribution. The software is provided "as is" with no warranties, aligning with open-source practices. For precise terms, including handling of specific notices, consult the in the SBCL .

History

Origins from CMU CL

Steel Bank Common Lisp (SBCL) derives directly from , an implementation developed at starting in the early 1980s as part of the Spice Lisp project and evolving through the 1990s into a robust, public-domain system. CMU CL originated around 1985 following the end of the Spice project and grew significantly under community maintenance after 1994, incorporating advanced features like an and support for multiple architectures. This foundational codebase provided SBCL with its core compiler, runtime, and portable design, which were adapted to emphasize self-sufficiency and cross-platform reliability. The SBCL fork was initiated in December 1999 by William Newman, who sought to create a variant of CMU with a clean, deterministic bootstrap process that required only a vanilla ANSI host, avoiding dependencies on host-specific macros, types, or structures that complicated in CMU . This approach prioritized maintainability by enabling verifiable builds without iterative recompilations or "hairy hacking" for internal changes, while promoting simplicity through the removal of non-essential extensions such as the editor, interface, and various utilities in the EXTENSIONS package. Newman's announcement highlighted these goals, positioning SBCL as a distinct system to prevent confusion with CMU , despite sharing the same public-domain licensing. The name "Steel Bank Common Lisp" was chosen to honor Andrew Carnegie and Andrew Mellon, industrialists associated with Pittsburgh's steel and banking heritage, which tied into Carnegie Mellon University's historical roots. In its early development, SBCL focused on porting bug fixes and improvements bidirectionally with CMU CL to ensure stability, while systematically eliminating outdated or CMU CL-specific extensions to streamline the codebase. A key early enhancement was the addition of experimental native thread support on Linux/x86, enabling multiprocessor utilization via the sb-thread package, though it required explicit feature enabling during compilation.

Development Milestones

Following its as a from CMU Common Lisp in 1999, Steel Bank Common Lisp (SBCL) transitioned to a monthly release cycle around 2002, with versions distributed and tracked through to facilitate regular updates and community access. This cadence, typically at the end of each month, has sustained ongoing enhancements while maintaining stability. By the mid-2000s, SBCL achieved significant major enhancements, including full ANSI compliance with the release of version 1.0 on November 30, 2006, marking a key milestone in standardization after initial post-fork efforts. Cross-compilation support was introduced in version 0.9.0 in 2004, enabling builds for target architectures using a host Common Lisp system, which broadened development flexibility. Recent developments continue to emphasize performance and reliability, as seen in version 2.5.10 released on October 27, 2025, which included improvements to the generational collector, such as a non-stop option for foreign calls, alongside bug fixes and optimizations for functions like SLOT-VALUE and RANDOM. Beta testing of new collectors has also been integrated to refine further. SBCL's evolution relies on collaborative maintenance from a global community of developers, with contributions detailed in the project's CREDITS file, which credits individuals such as William Newman for the original and subsequent maintainers like Christos Dimopoulos and Juho Snellman for ports and improvements. Bug tracking shifted to Launchpad in , streamlining issue reporting and resolution. Ongoing efforts prioritize portability, with expansions to new architectures like Linux in version 1.2.0 (2014) and enhanced support for platforms such as and variants in recent releases.

Technical Features

Compiler

Steel Bank Common Lisp (SBCL) employs a multi-pass compiler designed to generate native machine code directly from Lisp source, enabling high-performance execution without relying on interpretation in production environments. This compiler processes code through multiple optimization and transformation stages, starting from source parsing and proceeding to backend code generation tailored to the target architecture. By default, SBCL operates as a compiler-only implementation, where even the eval function compiles lambda expressions to native code before execution, ensuring that all code runs as compiled machine instructions rather than interpreted bytecode. The compiler's optimization capabilities are central to SBCL's performance profile, incorporating advanced techniques such as , , and . Type inference leverages a sophisticated that derives information from most type specifiers (excluding satisfies types), propagating these derivations across let, let*, and calls to enable tighter , though it is more conservative for assignments like setq or setf. removes unreachable or unused portions of the code, with optional signaling via the sb-ext:code-deletion-note condition to inform developers of such deletions. , controlled by the compiler policy's speed versus space qualities, allows automatic inlining of standard functions to reduce overhead, though it is inhibited when the debug quality exceeds level 2 to preserve information. These optimizations collectively prioritize , making SBCL suitable for compute-intensive applications. Despite its focus on optimization, the supports source-level in compiled code, facilitating development workflows. When the debug optimization quality is set to 2 or higher, the retains source information and variable bindings, allowing the to display original source forms—even those expanded by macros—and step through code at the source level. This integration ensures that performance gains do not compromise traceability. Additionally, SBCL extends beyond the ANSI standard in areas like stream handling, providing the sb-gray package for Gray Streams (an extensible stream framework) and sb-simple-streams for efficient, low-level I/O operations, which the optimizes accordingly.

Runtime System

The of (SBCL) provides a dynamic execution that manages allocation, concurrency, and interactions for compiled code. It operates as a high-performance, native-code supporting the ANSI standard, with extensions for efficient resource handling. The includes automatic through garbage collection, native multithreading, and interfaces to underlying operating facilities, enabling seamless integration with external libraries and networks. Central to the runtime is its generational garbage collector (gencgc), which divides into generations to prioritize frequent collections of short-lived objects, reducing pause times and improving throughput. On most architectures, gencgc employs a mostly-copying with conservative scanning, treating untagged words as potential pointers to avoid false negatives in marking live objects. This approach ensures reliable memory reclamation while accommodating Lisp's dynamic typing, though it may lead to occasional space overhead from conservative assumptions. In recent developments, SBCL introduced an experimental mark-region parallel garbage collector in version 2.3.8 (2023), available as a build-time option, with partial enhancements like compact instance headers added in version 2.4.1 (2024) to support parallelism on multi-core systems. By version 2.5.10 (2025), further experimental options allow non-interrupting collection during foreign function calls on select platforms, enhancing applicability. SBCL supports native threading on platforms such as x86/, leveraging threads () for () to utilize multiple cores efficiently. Threads are created via the sb-thread package, with primitives like make-thread for concurrency and tools including locks, semaphores, and condition variables. This integration allows code to run in parallel without green-thread overhead, though thread-safe garbage collection requires careful handling of shared data to prevent races during marking. For system interactions, the runtime includes a (FFI) through the sb-alien package, enabling direct calls to libraries and of shared objects without wrappers. This facilitates interoperability with system s, such as file I/O or graphics, by mapping Lisp types to equivalents. Networking is handled via the sb-bsd-sockets module, which exposes a low-level BSD-style for and sockets, supporting operations like , , and non-blocking I/O for applications. Integrated tools aid runtime analysis: the sb-sprof statistical profiler samples stack traces at high frequency to generate call graphs, allocation profiles, and time reports, helping identify bottlenecks without significant overhead. Complementing this, the sb-cover tool tracks executed expressions and branches during runs, producing reports to assess test completeness, with support for conditional compilation directives. Memory usage is configurable at startup to suit application needs, with the --dynamic-space-size option setting the initial size in megabytes (platform-dependent default, e.g., 256 MB on /), preventing exhaustion in long-running processes. Additional flags like --control-stack-size limit stacks, while queries via (room) provide usage statistics across spaces (dynamic, static, read-only). These controls enable fine-tuned , such as capping growth for or constrained environments.

Platforms and Portability

Supported Operating Systems

Steel Bank Common Lisp (SBCL) provides full support for a wide range of operating systems, with native and runtime capabilities across major distributions. On , SBCL is compatible with most distributions, including those using , and binaries are readily available through package managers such as apt on Debian-based systems or yum/dnf on derivatives, facilitating easy and updates without manual . This support extends to building from source, ensuring adaptability to various versions and configurations. SBCL maintains strong compatibility with BSD variants, including , , and , where native builds are fully operational for both development and production environments. These systems benefit from SBCL's portable design, allowing seamless integration with BSD-specific tools and filesystems without requiring host dependencies during runtime. Similarly, is supported on its primary architectures, with native builds enabling deployment in enterprise settings that leverage Solaris's stability and features. For proprietary operating systems, SBCL offers native builds on macOS () and Windows, supporting core functionalities like garbage collection and threading tailored to each platform's . On macOS, integration with tools like Homebrew provides straightforward access to pre-built binaries, while Windows users can utilize installers for . Cross-compilation options are available, allowing builds for target OSes from a compatible system, which simplifies across environments. The bootstrap process for SBCL is designed for OS independence, typically involving an existing SBCL binary, a version from the host OS repository, or another implementation to compile the latest source distribution, minimizing reliance on external OS-specific dependencies. Runtime threading behavior, such as threads on systems versus native Windows threads, varies by OS but is abstracted through SBCL's .

Architecture Support

Steel Bank Common Lisp (SBCL) offers robust primary support for the x86 and architectures, with advanced code generation optimizations that leverage these instruction sets for high-performance execution on general-purpose processors. These optimizations include architecture-tuned emission and runtime features, enabling efficient native code compilation for desktop, server, and computational workloads. In addition to x86 variants, SBCL maintains mature ports to (including ARM64, ARMhf, and ARMel), PowerPC (PPC and PPC64le), and architectures. The ARM ports support embedded and mobile applications through compact suitable for resource-constrained devices, while PowerPC and SPARC ports target server and legacy high-reliability systems with backend-specific handling of vector instructions and memory models. MIPS (MIPSbe and MIPSle) ports further extend compatibility for embedded networking and hardware. These implementations ensure reliable execution across diverse hardware ecosystems. SBCL's cross-compilation framework allows developers to build executables for a target from a system running on a different architecture, using any ANSI implementation as the bootstrap . This process involves generating portable intermediate representations before architecture-specific finalization, promoting flexibility without requiring native for each target. By 2025, SBCL version 2.5.10 has integrated full support for (both 32-bit and 64-bit variants), featuring a shared backend, native threading, and generational garbage collection to accommodate emerging open- in research and . Architecture-specific optimizations, such as peephole passes and atomic operation enhancements, underpin performance portability by adapting semantics to each platform's constraints and capabilities without compromising ANSI compliance. SBCL's architecture support interacts with various operating systems to provide seamless runtime environments.

Community and Usage

Distributions and Installation

Official pre-built binaries are available from primarily for architectures on (version 2.5.10), Windows (version 2.5.10), macOS (version 2.2.9 as of October 2025), and older versions for various BSD variants. For (Linux) and ARM64 (macOS) platforms, SBCL is available through OS package managers such as apt on Debian-based systems and Homebrew on macOS, which provide the latest versions. These binaries are distributed as compressed tarballs (e.g., .tar.bz2 for systems) or MSI installers for Windows, allowing straightforward unpacking and without . To install a binary release on systems, users decompress the archive using tools like bzip2 and tar (e.g., bzip2 -cd sbcl-*-x86-64-linux-binary.tar.bz2 | [tar](/page/Tar) xvf -), navigate to the extracted directory, and run sh install.sh to place files in /usr/local by default, with options to specify a custom INSTALL_ROOT. For easier integration, SBCL is packaged in popular operating system package managers. On and , it can be installed via [sudo](/page/Sudo) apt install sbcl, providing the latest version available in the repositories across architectures like amd64 and arm64. On macOS, Homebrew users can run brew install sbcl to obtain the system, which includes dependencies like ECL for source builds if needed and supports both and processors. These methods ensure automatic handling of dependencies and updates through the respective package ecosystems. When pre-built binaries or packages are unavailable for a specific , SBCL can be compiled from source, requiring an existing ANSI-compliant implementation (such as another SBCL, Clozure CL, or CLISP) for . The process involves unpacking the source tarball from , then executing sh make.sh followed by the path to the host Lisp (e.g., sh make.sh sbcl), which cross-compiles the new SBCL; the resulting binary is installed similarly to pre-built releases using sh install.sh. Detailed steps, including troubleshooting for cross-compilation, are outlined in the INSTALL file included in distributions. Installation guidance is provided through multiple documentation formats, including the INSTALL in plain text within and archives, the comprehensive SBCL manual in available online, and format derived from the for use with tools like . PDF versions of the manual can also be generated from the TeXInfo sources for offline reference. Once installed, users start the SBCL REPL by running sbcl in a , assuming the directory (e.g., /usr/local/bin) is in the ; the interactive loop prompts for expressions, with (quit) to exit. For package management, integration with Quicklisp—the standard library manager for —is straightforward: after launching the REPL, load the Quicklisp installer script with (load "quicklisp.lisp") (downloaded from the official site), follow prompts to install, and subsequently use commands like (ql:quickload "package-name") to fetch and load libraries. This setup enables rapid extension of SBCL environments with third-party code.

Adoption and Notable Projects

Steel Bank Common Lisp (SBCL) is one of the most popular open-source implementations of , noted for its high , active , and broad with the . It is widely used for production and development work among open-source Common Lisp users, powering a significant portion of modern Lisp applications due to its and robust runtime. SBCL plays a central role in key Common Lisp tools, including Quicklisp, the primary package manager for the language, which explicitly supports SBCL alongside other implementations for seamless library installation and dependency management. Similarly, (Another System Definition Facility), the standard build system for Common Lisp, is deeply integrated with SBCL, enabling efficient compilation, loading, and deployment of software systems directly within the SBCL environment. Notable projects leveraging SBCL include its integration into SageMath, where it serves as an optional high-performance Lisp compiler for symbolic computation and mathematical software components, enhancing SageMath's capabilities in algebraic and numerical processing. Other notable uses include Maxima, a computer algebra system that utilizes SBCL as a backend for improved performance in symbolic computations. In web development, SBCL underpins frameworks like Hunchentoot, a versatile HTTP server and toolkit for dynamic websites, which relies on SBCL's efficiency for handling requests and building scalable applications. These adoptions highlight SBCL's versatility in both scientific computing and web technologies. The SBCL community remains vibrant, with ongoing discussions and knowledge sharing on platforms such as Reddit's r/lisp subreddit and , where developers exchange insights on usage, optimizations, and integrations. This active engagement, combined with SBCL's consistent monthly release schedule—such as version 2.5.10 on October 27, 2025—sustains its adoption in for tools and in for reliable, performant software. The frequent updates address bugs, add features, and improve portability, ensuring long-term viability across diverse sectors.

References

  1. [1]
    Steel Bank Common Lisp: About
    Steel Bank Common Lisp (SBCL) is a high performance Common Lisp compiler. It is open source / free software, with a permissive license.Download · Getting Started · The SBCL Manual · News
  2. [2]
    History and Copyright - Steel Bank Common Lisp
    Origins of SBCL and its name. SBCL derives most of its code from CMU CL, created at Carnegie Mellon University. Radical changes have been made to some parts of ...
  3. [3]
    Steel Bank Common Lisp download | SourceForge.net
    Rating 4.4 (13) · Free · DeveloperSteel Bank Common Lisp (SBCL) is a high-performance Common Lisp compiler. It is open-source/free software, with a permissive license. In addition to the ...
  4. [4]
    SBCL -- Steel Bank Common Lisp - Ubuntu Manpage
    SBCL is an implementation of ANSI Common Lisp, featuring a high-performance native compiler, native threads on several platforms, a socket interface, a source- ...
  5. [5]
    None
    ### Summary of Licensing Terms for Steel Bank Common Lisp (SBCL)
  6. [6]
    Project history - CMUCL
    Apr 13, 2023 · We started calling it CMU Common Lisp when the Spice project ended (around 1985). The code base has gown tremendously and mutated greatly ...Missing: 1990s | Show results with:1990s
  7. [7]
    announced - Steel Bank Common Lisp
    I've made a system derived from CMU CL which can build itself from scratch, requiring only vanilla ANSI Common Lisp as a cross-compilation host. Basically, it ...Missing: origins fork December
  8. [8]
    All News - Steel Bank Common Lisp
    experimental native threads support (on x86 Linux >=2.4 only). This is not compiled in by default: you need to add :SB-THREAD to the target features. See ...
  9. [9]
    News - Steel Bank Common Lisp
    The new features of the two most recent SBCL releases are listed below. Please see the complete news page for details on all historical SBCL releases. New ...Missing: development milestones
  10. [10]
  11. [11]
  12. [12]
  13. [13]
  14. [14]
  15. [15]
  16. [16]
  17. [17]
  18. [18]
    SBCL 2.5.10 User Manual
    Other major changes since the fork from CMUCL include. SBCL has removed many CMUCL extensions, (e.g. IP networking, remote procedure call, Unix system ...
  19. [19]
  20. [20]
  21. [21]
    [PDF] SBCL User Manual
    By default when SBCL encounters an error, it enters the builtin debugger, allowing interactive diagnosis and possible intercession. This option disables the ...
  22. [22]
  23. [23]
  24. [24]
  25. [25]
  26. [26]
  27. [27]
    Download - Steel Bank Common Lisp
    ### Summary of Supported Operating Systems for SBCL (Official SBCL Platform Table)
  28. [28]
    Porting - Steel Bank Common Lisp
    SBCL has been ported to various CPU architectures by reusing the work done for CMU CL. It should be possible to port it to new CPU architectures, but it would ...
  29. [29]
  30. [30]
    Download - Steel Bank Common Lisp
    Historically SBCL also ran on HP PA-RISC Linux; Alpha Linux, Tru64; PowerPC Mac OS X. Older binaries and source releases are available on the SourceForge File ...
  31. [31]
    Getting Started - Steel Bank Common Lisp
    SBCL is available in source and binary form for a number of different architectures. This page describes how to get SBCL installed and how to start using it.
  32. [32]
    sbcl - Homebrew Formulae
    Steel Bank Common Lisp system. https://www.sbcl.org/. License: LicenseRef-Homebrew-public-domain AND MIT AND Xerox AND BSD-3-Clause.
  33. [33]
    Quicklisp beta
    Quicklisp is easy to install and works with ABCL, Allegro CL, Clasp, Clozure CL, CLISP, CMUCL, ECL, LispWorks, MKCL, SBCL, and Scieneer CL, on Linux, Mac OS X, ...Quicklisp beta FAQ · Quicklisp beta releases · Quicklisp newsMissing: integration | Show results with:integration
  34. [34]
    sbcl: a lisp compiler and runtime system - Packages and Features
    Steel Bank Common Lisp (SBCL) is a high performance Common Lisp compiler. It is open source / free software, with a permissive license.
  35. [35]
    Hunchentoot - The Common Lisp web server formerly known as TBNL
    Hunchentoot is a web server written in Common Lisp and at the same time a toolkit for building dynamic websites. As a stand-alone web server, Hunchentoot is ...Abstract · Contents · Download and installation · Function and variable reference
  36. [36]
    Releases · sbcl/sbcl - GitHub
    Mirror of Steel Bank Common Lisp (SBCL)'s official repository - Releases · sbcl/sbcl. ... Software Development · View all. Explore. Learning Pathways · Events ...