Blob Blame History Raw
= History of GIFLIB =

GIF (Graphics Interchange Format) was originally developed on the
CompuServe timesharing service in the late 1980s.  It was described
by a GIF standard issued in 1987 and revised in 1989.  A copy of the
GIF89 standard is included in the doc/ directory.

This code originated as a linkable library for DOS programs, together
with command-line tools for generating and viewing and analyzing GIF
images. The DOS code was written by Gershon Elber using Borland C
under MS-DOS sometime between the issue of GIF87 and mid-1989 (1.0 was
dated 14 June 1989; one portion, getarg.c, was dated 11 Mar 88).

At some time no later than the end of 1989 Eric S. Raymond (aka "ESR")
ported this DOS version to System V Unix. Between 1989 and 1992 ESR
reworked various portions of the API, improving and simplifying 
the code's interface.

ESR's 2.1 version was the first to include the DGifSlurp()/EGifSpew()
function pair for enabling non-sequential operations on GIF images
(also the tools icon2gif, gifovly, and gifcompose; the last was
removed in 5.0).

ESR's Unix port was incorporated into the NCSA Mosaic browser in 1994,
which is how GIF became (with JPEG) one of the two most popular image
formats on the early Web.

Beginning around 1993, patent claims by Unisys over the LZW
compression method used in GIF theatened adverse legal consequences
for users and developers of programs incorporating the format. The
threats became serious in 1999, with Unisys demanding license fees
for any software using the format.

One response to this was the development of PNG in 1995. Another was
that ESR sought a lead developer outside the U.S. to hand the project off 
to, and passed it to Toshio Kuratomi.  ESR remembers this as happening
in 1994, but that date could be wrong as some headers imply 3.0 was issued
under  ESR's name in 1996.  But other files do date Toshio's first release
to 1994.  Toshio shipped 4.0 in December 1998.

Subsequently, the project shipped for some time as "libungif" with
support for compressed GIFs removed to avoid the LZW patent issues.
Compression support was merged back in after the last blocking patent
expired in 2004; this became release 4.0.0.  After that merge the
code was again known as giflib.

By 2006, support for PNGs was sufficiently universal that GIF could be
described as a legacy format.  Anything you can do with it GIF could
probably be better done with PNG. Nevertheless (and despite efforts
like "Burn All GIFs Day" in November 1999) the GIF format has remained
widely popular.

In April 2012 ESR rejoined the project to do some code cleanups 
and auditing, and Toshio Kuratomi asked him to take back the lead.
ESR released version 4.2 in May 2012.

Version 5.0, released in June 2012, fulfilled almost all the to-do
items from 18 years of backlog.  It made the library thread-safe, added
direct support for GIF89 graphics control blocks, and tossed out large
amounts of obsolete utility code.

More recent version of the code (5.1.0 and onwards) have been hardened
by both static analysis and fuzz testing.  While these failed to turn
up bugs in normal rendering cases, they did uncover some crash and
corruption bugs that could be tickled by carefully crafted malformed
GIFs.

This code is very old, very stable, and *everywhere* - browsers
game consoles, smartphones, pretty much everything that opens an
HTTP port and does graphics uses it.

The utilities in this source tree were important as GIF production
tools early in the format's history, but have been superseded by
multi-format viewers and editors.  Most installable binary packages
shipped as 'giflib' include the library and header file only.