DevIL
DevIL, short for Developer's Image Library, was started by Denton Woods as a cross-platform image library with one central goal: give programmers a single, consistent way to work with many different image file formats. Before libraries like this existed, a developer who needed to load a PNG in one part of their application and a TIFF in another had to manage different APIs, different conventions, and different quirks for each format. DevIL proposed a different arrangement. One API. Many formats.
The library's original name tells part of the story. It was first called OpenIL, a name that wore its ambitions plainly. Silicon Graphics, Inc. asked for a name change, and so OpenIL became DevIL. The new name stuck, and the three-part structure that gives it its character remained: the main library known as IL, a utility layer called ILU, and a utility toolkit named ILUT. That structure was no accident. It mirrors the corresponding parts of OpenGL, the widely used graphics API, though DevIL's creators were careful to note that the OpenGL Utility Toolkit is not actually part of the OpenGL specification itself.
What holds this library together is a design philosophy borrowed from OpenGL: a syntax and workflow that graphics programmers already knew. The question the rest of this documentary explores is what that familiarity enabled, and how far the library's reach actually extends.
Denton Woods built DevIL in three distinct layers, and each one has a different job. The core IL library handles the fundamentals: reading images, writing them, and managing the internal state that tracks what the programmer is working with. Above that sits ILU, the utility library, which provides the tools to manipulate images once they are loaded. ILUT connects the whole system to external graphics and windowing APIs.
The design borrows OpenGL's habit of using image names rather than pointers to refer to objects. A programmer working with OpenGL already thinks in terms of named objects and bound states, so DevIL's naming convention feels familiar rather than foreign. The library also maintains a state stack that can be pushed and popped, another pattern OpenGL users recognize immediately.
Images can be loaded not just from files but from file streams and from memory lumps, which is the library's own term for raw in-memory data. Once an image is in memory, direct access to its pixel data is possible through two functions: ilGetData and ilSetData. The library also allows programmers to specify their own loading and saving callbacks, and even to override the library's default handlers entirely.
Support for Unicode filenames means the library can open images with non-ASCII characters in their paths, which matters on systems where filenames routinely include characters outside the basic Latin alphabet. The 64-bit compatibility the library advertises extends that reach to modern operating environments without requiring workarounds.
DevIL currently supports 43 file formats for reading and 17 for writing. Among the formats that support both reading and writing are BMP, DDS, JPEG, PCX, PNG, raw, TGA, and TIFF. Those names cover the major image formats a working programmer is likely to encounter in game development, graphics tooling, or media applications.
The actual set of available formats depends on how the library was compiled. External libraries like libjpeg and libpng must be present at compile time for their respective formats to work. The library even lets the programmer choose between the Intel JPEG Library and libjpeg when JPEG support is needed, giving a degree of control over which underlying implementation handles the work.
Beyond the major formats, the library's image model is flexible in its own right. It supports luminance images, RGB and RGBA images, BGR and BGRA images, and colour-indexed images. Colour depth options cover three different numbers of bits per channel. Conversion between all supported formats and data types is built in, including palette conversion. Colour-indexed images can be automatically converted to truecolour images if the programmer requests it, and the library will also perform automatic conversions when saving if the target format requires a different representation than the one currently in memory.
Past format handling, DevIL supports a range of image structures that go well beyond a flat, two-dimensional picture. Full support for 3D texture volumes means the library can work with three-dimensional images, a feature that matters in game engine and graphics pipeline contexts where volumetric textures are common. Mipmaps, which are pre-scaled versions of an image used for rendering at different distances, are also supported. So are cubemaps, the six-sided image structures used to represent environments in real-time graphics.
Animations are supported as well, allowing the library to handle multi-frame image formats. Layers add a further dimension, letting images contain stacked planes of pixel data rather than a single surface.
On the processing side, the library ships with a range of effects and filters that can be applied directly to images, including embossing and edge detection. Images can be resized, and they can also be placed onto a larger background, which the library describes as enlarging the canvas. Controllable compression is available when saving, giving the programmer a way to balance file size against image quality. A user-specified clear colour and the ability to define key colours round out the image management options.
If an image fails to load, the library can fall back to a default image specified by the programmer, rather than returning an error and leaving the calling application to handle a blank or broken state. That fallback behaviour points to how the library was designed for practical use in applications that cannot simply halt when an asset is missing.
DevIL runs on Windows, Mac OS X, and Unix-like systems, making it portable across the three major desktop environments. That cross-platform support was central to the library's stated purpose from the start, since a common API across formats loses much of its value if it only works on one operating system.
On Windows, the library can be built to include only the features the programmer needs, which produces smaller DLLs. That option matters in shipping environments where binary size affects install footprint or distribution constraints.
The ILUT layer connects DevIL to several external graphics and windowing systems: OpenGL, Allegro, Windows GDI, and DirectX. Each of those APIs has its own conventions for how textures and image data are handed off, and ILUT provides the bridge between DevIL's internal representation and what each API expects.
For programmers not working in C or C++, DevIL offers bindings for Delphi and Visual Basic, which were both widely used in Windows desktop development. Linux support is listed separately, underscoring the library's emphasis on portability as a first-class concern rather than an afterthought.
The Free Software Foundation lists DevIL in its directory of Free Software, and the library continues to be distributed under the terms of the LGPL. That licensing allows the library to be used in commercial software without requiring the commercial product itself to be open source, which broadened the range of projects where it could be adopted.
DevIL's roots in a name dispute with Silicon Graphics, Inc. shaped its identity early. OpenIL carried an implicit claim of kinship with the OpenGL ecosystem, which Silicon Graphics had a strong interest in controlling. The renaming to DevIL preserved the structural and stylistic relationship with OpenGL while stepping back from the naming overlap.
The Free Software Foundation's inclusion of DevIL in its free software directory is not merely a badge. The LGPL licence under which the library is distributed grants users the right to use, study, and modify the library, while the Lesser GPL variant specifically allows it to be linked into proprietary applications without triggering copyleft requirements on the calling code. That distinction made DevIL usable in commercial game engines and closed-source graphics tools, not just in open-source projects.
Both the DevIL website and the source repository confirm that the LGPL licence remains in effect. For a library that began life under a different name and was reshaped by an external request, the licence has proven more durable than the original branding.
Common questions
What is DevIL (Developer's Image Library) and who created it?
DevIL, short for Developer's Image Library, is a cross-platform image library started by Denton Woods. Its goal is to provide a single, consistent API for loading and saving many different image file formats across Windows, Mac OS X, and Unix-like systems.
Why was DevIL originally called OpenIL and why did the name change?
The library was originally named OpenIL, a name reflecting its OpenGL-inspired design. Silicon Graphics, Inc. requested the name be changed, which led to the library being renamed DevIL.
How many image file formats does DevIL support for reading and writing?
DevIL supports 43 file formats for reading and 17 for writing. Formats with both read and write support include BMP, DDS, JPEG, PCX, PNG, raw, TGA, and TIFF. The actual available formats depend on which external libraries like libjpeg and libpng were included at compile time.
What are the three parts of DevIL and what does each one do?
DevIL consists of IL (the main image library), ILU (the utility library for image manipulation), and ILUT (the utility toolkit that connects DevIL to external graphics APIs like OpenGL, Allegro, Windows GDI, and DirectX). This structure mirrors the corresponding parts of OpenGL.
What licence is DevIL released under?
DevIL is licensed under the LGPL (Lesser General Public License). The Free Software Foundation lists it in its directory of Free Software, and the LGPL allows the library to be used in proprietary and commercial software without requiring the calling code to be open source.
What platforms and programming languages does DevIL support?
DevIL supports Windows, Mac OS X, and Unix-like systems. Bindings are available for Delphi and Visual Basic in addition to C and C++. The ILUT layer connects the library to OpenGL, Allegro, Windows GDI, and DirectX.