The JPEG format consists of several APIs, version 6b, 7, 8 and 9, which are not backward compatible, and two implementations co-exist in the form of:
- a set of reference libraries from the Independent JPEG Group (IJG) which cover all the versions,
- a SIMD-optimized library from the libJPEG-Turbo project which provides a compatiblity layer up to version 8.
For now, the provided implementations are:
- IJG version 6b
- libJPEG-Turbo version 6b, 7 and 8
The default library, IJG version 6b, was historically provided by the JDS consolidation (SUNWjpg).
In order to maintain backward compatibility with older Solaris/illumos, each component delivers files to a dedicated subdirectory under /usr/lib and symlinks to version 6b are created.
- libjpeg metapackage, provides current API (currently 6b, versioned as 6.0.2).
- libjpeg6 provides documentation and symlinks to version 6b for backward compatibility (versioned as 6.0.2).
- libjpeg6-ijg provides programs and libraries from IJG’s JPEG 6b.
- libjpeg-turbo provides documentation and requires package libjpegX-turbo with X the current default API.
- libjpeg[6,7,8]-turbo provides programs and libraries from libJPEG-Turbo.
Legacy software expects content provided by libjpeg6:
PATH usr/bin/amd64/cjpeg usr/bin/amd64/djpeg usr/bin/amd64/jpegtran usr/bin/amd64/rdjpgcom usr/bin/amd64/wrjpgcom usr/bin/cjpeg usr/bin/djpeg usr/bin/jpegtran usr/bin/rdjpgcom usr/bin/wrjpgcom usr/include/jconfig.h usr/include/jerror.h usr/include/jmorecfg.h usr/include/jpeglib.h usr/lib/amd64/libjpeg.so usr/lib/amd64/libjpeg.so.62 usr/lib/amd64/libjpeg.so.62.0.0 usr/lib/libjpeg.so usr/lib/libjpeg.so.62 usr/lib/libjpeg.so.62.0.0 usr/share/man/man1/cjpeg.1 usr/share/man/man1/djpeg.1 usr/share/man/man1/jpegtran.1 usr/share/man/man1/rdjpgcom.1 usr/share/man/man1/wrjpgcom.1
- Fixed CVE-2013-6629 using GhostScript patch from 2004 which attempts fixing the data instead of throwing an error.
- Libraries from IJG providing API 7, 8 and 9 should be contributed to oi-userland, volunteers are welcome 😉
- Existing components still rely on IJG version 6b.
- Following the steps of major distributions, slow migration of components to API version 8 can be performed.
- Either IJG (complete API) or libJPEG-Turbo (faster, elected by Debian, Fedora, Chrome, … in 2014) could be used: see arguments of the Debian’s technical committee for instance.