Hi there. I am just now coming across this thread and thought I should
interject my take on the situation. I am not, under any circumstances,
intending to start or continue a holy war, and this will be the last
thing I have to say on the matter unless someone has a specific question
for me, but I do want to clarify a few things that may be relevant to
the discussions above:
(1) Regarding LJT being "obsolete" or "removing features":
libjpeg-turbo forked from libjpeg prior to the involvement of the
current libjpeg developers (Guido, et al.) Our code is most directly
based on the SIMD enhancements to jpeg-6b made by Miyasaka Masaru in
2006, which predate jpeg-7 by several years. We did not approach the
current IJG developers about our fork because, at the time, they were
not the current IJG developers. Originally, libjpeg-turbo was an
in-tree codec used by TigerVNC, mostly consisting of libjpeg/SIMD with
modifications from Cendio AB to support SSE2 instructions. In early
2009, Cendio AB contracted with me to add 64-bit SSE2 support and
accelerated Huffman coding, thus making our codec perform almost as fast
as commercial codecs like Intel IPP. Over the next year, other projects
got wind of our efforts, and significant demand arose for our codec to
be made into an independent project, which it was in early 2010. Even
though more general-purpose projects have adopted LJT in recent years,
our focus remains much narrower than that of the IJG. We are not trying
to be a reference implementation.
(2) Regarding license compatibility: At the time libjpeg-turbo became
an independent project, I released the libjpeg/SIMD code from TigerVNC
largely as-is. Thus, the TurboJPEG API wrapper and the Huffman codec
(which were borrowed from VirtualGL) were still licensed under the LGPL.
The Huffman codec license was easily worked around by dropping in
jchuff.c/jdhuff.c from an unmodified release of libjpeg v6b (Mozilla, in
fact, did this for quite a while), and the TurboJPEG wrapper was just a
convenience feature-- it wasn't essential to the functionality of the
codec. In any case, all of that code has been refactored in
libjpeg-turbo 1.2 and later. The Huffman codec now bears the same
license as libjpeg, and the TurboJPEG wrapper bears a less restrictive
3-clause BSD license. I believe this license to be compatible with the
libjpeg license, but if someone disagrees, then please let me know.
This refactoring project was paid for by a company and approved by the
company's lawyers, so we did a lot of due diligence on it. Not that the
IJG developers would ever want to, but I am not aware of any legal
issues that would prevent them from merging the LJT 1.2+ code back into
libjpeg. Parts of libjpeg-turbo 1.1.x and prior did fall under a
libjpeg-incompatible license-- because of expedience and because the
projects that initially needed to use libjpeg-turbo were all GPL or LGPL
anyway, so it didn't matter. However, the SIMD extensions that are
responsible for most of our speedup have always been released under a
libjpeg-compatible licence.
(3) Regarding hostility: I was not aware of any resentment toward our
project until Fedora started integrating LJT (not any of my doing, BTW--
Red Hat spearheaded the effort initially because they were integrating
TigerVNC) and Guido posted the following:
https://bugzilla.redhat.com/show_bug.cgi?id=639672#c7. This was long
before any claim that we were violating the libjpeg license. That claim
is a relatively new thing-- the first I heard about it was in the
jpeg-8d README file from early 2012. Back in 2010, the primary
objection seemed to be that we didn't ask permission to exist (as if we
needed to-- it's open source), but then the comment goes on to say that,
had we asked, it wouldn't have been granted. At the time that
conversation took place, the only code in LJT was from Tom Lane,
Miyasaka Masaru, Pierre Ossman, and myself. Tom Lane did not object to
LJT and, in fact, offered up words of support for our efforts:
http://lists.fedoraproject.org/pipermail/devel/2010-May/136976.html. In
a nutshell, practically from the moment our project split off from
TigerVNC, the new IJG started firing shots across our bow, and it became
clear that no matter what we did, we weren't going to make them happy.
Thus, our only choice was to do what we believed to be right. We
certainly could not be expected to seek their advice after being
publicly slandered.
(4) Regarding API compatibility: In late 2010, I merged part of the
jpeg-7 and jpeg-8 code into libjpeg-turbo in order to provide ABI
compatibility with jpeg-7 and jpeg-8, so projects that already ported to
jpeg-7 or jpeg-8 could take advantage of the SIMD extensions. A
commercial software developer paid me to implement the ABI compatibility
feature, and it is what it is. We do not claim that LJT is fully
compatible with jpeg-8. Specifically, the most recent code in trunk
lacks support for the SmartScale format and the features that depend on
that format. The open source community is not exactly scrambling for
SmartScale to be implemented in LJT-- and by that, I mean that there has
been zero demand for it. Mozilla and Chrome (which both use LJT) are
bellwethers, here-- if they decide that SmartScale is ubiquitous enough
to warrant their browsers decoding that format, then they'll ask us to
implement it. Note, however, that only two browsers (Chrome and
Firefox) use libjpeg-turbo, but they are hardly the only software that
doesn't support SmartScale files. Safari and IE won't parse those web
sites that Guido posted, either.
(5) Regarding arithmetic coding: libjpeg-turbo does support arithmetic
encoding/decoding, and those features are enabled by default when
building the code with jpeg-7 and jpeg-8 ABI emulation. They can
optionally be enabled when building the code with jpeg-6b ABI emulation.
There is no technical reason why Mozilla, Chrome, and any other
software that uses libjpeg-turbo can't encode/decode arithmetic images.
The developers of those browsers have simply chosen not to enable the
feature (https://bugzilla.mozilla.org/show_bug.cgi?id=680385). Their
reasoning seems to be that other browsers, such as IE and Safari (which
don't use libjpeg-turbo) can't decode arithmetic coded JPEGs, so there
is no reason for Firefox and Chrome to do so. You can agree or disagree
with their reasoning, but either way, don't blame us.
(6) Regarding the README file: In the process of merging part of the
jpeg-7 and jpeg-8 code in order to provide ABI compatibility, I also
merged some of the jpeg-7 and jpeg-8 documentation, in order to describe
the subset of jpeg-7 and jpeg-8 features that were implemented. I did
not merge all of the upstream README file, because frankly, that file in
jpeg-7 and jpeg-8 includes some very impolitic language that slams the
ISO committee as well as the authors of one of the definitive books on
the JPEG format. If IJG wants us to include more of the text from their
README file, then they need to rewrite it to be more balanced. And, of
course, the README file in jpeg-8d slams our project as well, so we can
hardly be expected to include that text. We have clearly indicated at
the top of our modified README file that it was modified. The libjpeg
license says that the copyright and no warranty notice from the README
must be unaltered, but it doesn't say that the README must be included
verbatim. I included the relevant text that describes the subset of
libjpeg that we implement. If, however, there are specific
modifications that can be made to our README to make it less
"misleading" in the eyes of the IJG, then I'm happy to do that, as long
as those modifications do not include adding inflammatory text.
(7) Regarding the copyright headers: If there are objections to the way
in which we have modified the copyright headers of specific files, then
I am happy to change that (Osamu's suggestion above makes sense.) We
were following what is generally considered common practice for open
source code, which is to add one's own copyright message to the existing
headers, and we are far from the only people who have done that with
libjpeg. You can understand why there's a bit of a quandary in the case
of libjpeg. It is generally considered very bad practice to alter a
copyright notice in an open source file, but the copyright notices in
libjpeg also say "This file is part of the Independent JPEG Group's
Software." I agree that someone reading that file might be given the
wrong impression, but it's hard to tell which is the bigger sin:
leaving that ambiguity or altering the copyright header. Ultimately, we
opted to keep the headers in tact and include a README-turbo.txt file
that makes it clear that libjpeg-turbo is not libjpeg. This was not
sloppiness and definitely not malice. We thought all of these issues
through and did what we believed to be best. If, at any point, the IJG
had raised objections to us (in a more political manner than blasting us
in its README file, that is), we would have happily made whatever header
modifications they proposed.
(8) Regarding Wikipedia: We are not in control of the libjpeg Wikipedia
page, nor did we add the libjpeg-turbo blurb to that page. I stumbled
upon the page after someone else had added a blurb about libjpeg-turbo
to it. Their blurb actually slammed IJG a bit, so I edited it so that
it took a more balanced tone. I also corrected a couple of factual
errors about libjpeg-turbo. You can easily verify what I changed by
looking at the Wikipedia history. I've made exactly 3 modifications to
the page, none of them outside the scope of the libjpeg-turbo blurb that
was already there.
If there are any further issues with libjpeg-turbo, I am more than happy
to address them. libjpeg-turbo exists solely because people in the
community wanted it. I will not apologize for the success of our codec.
I have never done anything other than attempt to meet the demands of
the open source community, and libjpeg-turbo is thus a product of that
community.
DRC
--
To UNSUBSCRIBE, email to debian-wnpp-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/50e0d7a6.8080...@users.sourceforge.net