Shortly after the development of the JPEG image format around 1991, an organization named the Independent JPEG Group (IJG) released an open source software package to help people use the format. While the software included a few utilities, such as cjpeg and djpeg, the important part of it was its C library. The library became popular, and has been used in countless applications that support JPEG images. It’s still being maintained today. My question is this: What is the name of (1) the software as a whole, and (2) its library component in particular?
If you’re a computer programmer or power user, you probably know the software I’m referring to as libjpeg. You might think “libjpeg” is the name of the software as a whole, or just the name of its library. But in fact, it’s not clear that even the library is named “libjpeg”. The software seems to go out of its way to be as nameless as possible.
Note that the IJG is not affiliated with the Joint Photographic Experts Group that created the JPEG format. Both organizations are secretive, and strangely resistant to naming the things they create, but they’re not at all the same thing. I’ll need a less cumbersome name for the Joint Photographic Experts Group, so I’ll call it “jpeg.org”.
The name of the software
From day one to present, the IJG software’s documentation has asserted that, at least for advertising and publicity purposes:
This software may be referred to only as “the Independent JPEG Group’s software”.
Clear enough. Though that’s not really a name, is it? That’s just what it’s called. Or am I overthinking this?
The software’s documentation doesn’t strictly follow that rule. It uses other variations, including the following. (For each name, I include the version number of first use.)
- The Independent JPEG Group’s JPEG software (v1)
- The JPEG software (v1)
- The IJG JPEG software (v5)
- IJG JPEG, or IJG JPEG vX, or the IJG JPEG distribution (v5)
- IJG libjpeg (v7) – Used only in a comment in the obscure “configure.ac” file
- IJG libjpeg distribution (v8d) – Used once in a commentary part the documentation
So, it does use the term “libjpeg” here and there, and more frequently in newer versions. But it never uses it consistently as the name of the software. Which makes sense, since it tells us unequivocally that the software is called “the Independent JPEG Group’s software”.
In version 8d, the documentation begins to complain about other software using the name “libjpeg”. In version 9 (January 2013), it accuses members of the ISO committee (jpeg.org presumably) of releasing a “fake libjpeg”. More on that later.
The name of the library
Here are some of the ways that the IJG software refers to its own library:
- The C library (v1)
- libjpeg (v1) – Only as a filename in build scripts
- The JPEG library (v4)
- The IJG library (v5)
- The IJG JPEG library (v5)
- libjpeg (v7) – Usage becomes more frequent in the technical documentation
From v4 to present (v9d), its preferred name for the library seems to be “the JPEG library”.
The word “libjpeg” is used mainly in the build scripts, referring to filenames. This is essentially due to a historical quirk in Unix software development: You’re required, or at least encouraged, to give compiled library files names that start with “lib”. For example, if you write some software named “example”, and it has a library, that library would probably be in a file named “libexample.a”, or “libexample.so”, or something like that. So, there will be a natural tendency for people to start calling your library “libexample”, whether you like it or not.
So, the IJG software is really just naming its library “jpeg”, not “libjpeg”. Files have to have names, so they had to use something, and I guess that was as close to nameless as they could get.
Other software that might be named libjpeg
There are other pieces of software derived from, or compatible with, the IJG software, which do use the term “libjpeg” as part of their name. An example is libjpeg-turbo.
The real libjpeg?
In 2012 or so, an open source software project quietly appeared, that is actually named libjpeg. It is associated in some way with jpeg.org, which is associated with the ISO standards organization.
This jpeg.org libjpeg is written in C++, unlike the IJG software, which is written in C. It supports more kinds of JPEG formats than the IJG software, and is not at all compatible with with it.
Obviously, it could not have been an accident that they chose the name “libjpeg”, which most everyone assumes refers instead to the IJG software. They’re inviting confusion. While I can’t condone this decision, I can kind of appreciate the opportunism.
As noted above, the IJG is none too happy about this. But it was their stubborn refusal to stake a clear claim the name “libjpeg” that made it possible.
In December 2019, the ISO/IEC 10918-7 standard was published. Its long name is “Digital compression and coding of continuous-tone still images — Part 7: Reference software”. The phrase “Digital compression and coding of continuous-tone still images” translates to “JPEG format”. So, what we have here is a document proclaiming a particular piece of software to be the official JPEG reference software.
27 years late, one might suggest. But whatever. I’m not planning to buy a copy to see what it says, but I think I can safely assume it’s about the jpeg.org libjpeg software.