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:

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.

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.