Open-Source Licenses and the Reference JPEG Library
This article examines how the Independent JPEG Group (IJG) established the reference codebase for the JPEG image standard and governed its distribution through open-source licensing. It covers the creation of the custom IJG license, the legal and patent challenges the project navigated—such as software patents on arithmetic coding—and how this permissive licensing model paved the way for ubiquitous commercial adoption and modern high-performance forks like libjpeg-turbo.
The Independent JPEG Group and libjpeg
When the Joint Photographic Experts Group finalized the JPEG image
compression standard (ISO/IEC 10918-1) in the early 1990s, the standard
specified the mathematics of the compression algorithm rather than a
turnkey software implementation. To prevent fragmentation and ensure
universal interoperability, the Independent JPEG Group—an informal
community led by Tom Lane—developed libjpeg, a free,
portable C library implementing the standard.
Because libjpeg was intended to act as the de facto
reference implementation, its licensing model was critical to its
adoption. The IJG chose not to adopt copyleft licenses such as the GNU
General Public License (GPL), which would have required proprietary
software vendors to disclose their own source code. Instead, the authors
crafted a custom, highly permissive open-source notice commonly referred
to as the IJG License.
Characteristics of the IJG License
The IJG License predates the standard taxonomy of modern open-source licenses like MIT or Apache 2.0, but its terms closely mirror the spirit of the 2-Clause BSD license. Key provisions of the IJG license include:
- Unrestricted Use: Users are permitted to use, copy, modify, and distribute the software or documentation for any purpose, without paying royalties.
- Attribution and Disclaimers: Distributable binaries or documentation must acknowledge the IJG, retain original copyright notices, and clearly disclaim any warranty.
- Liability Limitations: The authors disclaim all legal liability for damages resulting from the use of the code.
By removing financial and legal barriers, the IJG License allowed commercial vendors to embed JPEG support directly into web browsers, commercial graphics suites, operating systems, and consumer electronics like digital cameras without licensing fees or reciprocal source-disclosure obligations.
Navigating Patent Obstacles
The JPEG specification defined multiple compression modes. The baseline mode used Huffman coding, while an optional, more efficient mode relied on arithmetic coding. However, arithmetic coding was heavily encumbered by patents held by companies such as IBM, AT&T, and Mitsubishi.
To protect open-source users and downstream vendors from patent
infringement litigation, the IJG made a deliberate design choice: they
omitted or disabled arithmetic coding by default in the reference
implementation. The software was strictly scoped around Huffman coding,
ensuring that distributions of libjpeg remained legally
safe for developers globally. Only after key arithmetic coding patents
expired in the late 2000s did reference implementations begin
reintroducing native support for these modes.
Legacy and the Transition to Modern Forks
The permissiveness of the original reference codebase eventually created governance challenges. In the late 2000s, the IJG released versions (libjpeg v7 through v9) that introduced non-standard extensions, such as SmartScale, which were incompatible with the broader software ecosystem and ISO standards.
Because the IJG code was openly licensed, the open-source community
exercised its legal right to fork the software. Projects like
libjpeg-turbo and Mozilla’s mozjpeg branched
from the stable, backward-compatible libjpeg v6b branch.
libjpeg-turbo combined the original IJG codebase with SIMD
acceleration instructions, dual-licensing the resulting software under
the IJG License, the modified BSD License, and the zlib License. Today,
these modernized forks serve as the dominant JPEG reference
implementations across modern computing environments.