Jef Poskanzer (jef@acme.com) invented the PBM format in the 1980s to provide the computer graphics world with a common, trouble-free format, a lingua-franca, for bitmaps. The format was designed to be simple enough that it could transmitted within an email message without any special encapsulating and survive any translations and recoding that an email message might go through and be easily extractable on the other end. This was in a time when an email message was just text; attachments did not exist.
In 1988, Jef distributed the forerunner of Netpbm, Pbmplus, which gathered together the various tools he had developed to work with PBM files. These were mainly tools to convert between PBM and other existing graphics formats, making it possible to deal with the Tower Of Babel situation that had arisen with the proliferation of graphics formats.
By the end of 1988, Jef had added the PGM and PPM formats and lots more tools to Pbmplus.
In 1991, Jef added a variety of programs and code contributed by the user community, and then stopped maintaining Pbmplus. Jef never formally renounced support for it, but simply didn't get around to distributing any updates for over a year following his final December 10, 1991 release.
At least in 1990, Pbmplus was distributed via the Usenet group comp.sources.misc, under the coordination of Brandon Allbery.
From 1988 to 1991, Pbmplus was distributed a number of ways. Much of it was distributed via comp.sources.misc. There were also distributions on alt.sources as well as via X Window System contributed code FTP servers.
In 1993, Netpbm was developed to replace Pbmplus. Netpbm was nothing more than a new release of Pbmplus, and named for the fact that people all over the world would maintain the package by submitting fixes and enhancements over the Net. This was a time when such worldwide collaboration was still novel.
Then Netpbm apparently fell into neglect with the last release by its regular maintainer in March 1994. In September of 1995 Anthony Thyssen released an unofficial update of it called Netpbm-1mar1994.p1, while disclaiming any responsibity for ongoing upkeep.
The documentation in that 1995 release mentioned two different official mailing lists concerning the package, but by April 1999, neither existed anymore.
In September 1999, Bryan Henderson needed a minor bug in Xbmtopbm fixed, and wanted to clean up the mess of unsupported versions and outdated documentation of these tools. After checking around to see if anyone had any claims of ownership of the package, and finding none, Bryan assumed control and responsibility for Netpbm.
In November 1999, Thorbjoern Ravn Anderson In parallel, and unknown to Bryan, Jef was working on a new release
under the original name Pbmplus and claiming again (or maybe still) to
be maintaining Pbmplus. He did a limited release of a beta version of
it in November 1999. A mailing list pbmplus@acme.com was active.
Bryan learned of this effort's existence in March 2000. No widespread
distribution ever resulted from this.
Pbmplus and Netpbm were once part of the body of the X Window System
contributed software, distributed on ftp.x.org (directory contrib/utilities).
Bryan didn't receive a response to an inquiry to the ftp.x.org owner as to the
prospect of cleaning up the Netpbm related files there. So Bryan instead made
Metalab the new home of the source code. But Metalab had pretty low quality
too, and in April 2000 Bryan moved the package's home to Sourceforge.
In April 2000, Bryan extended the Netpbm formats to allow an image to have
2 bytes per sample, for a maximum maxval of 65535, as opposed to the original
formats that could have only one byte and maximum maxval 255. This same
extension had been made previously by others, but some of them defined the two
bytes to be in the reverse order. The Sourceforge version of Netpbm
documented the byte order, ending that ambiguity.
In August 2000, the PAM format appeared. But it took a long time
after that for there to be enough programs and library routines to
make it useful. It still is barely known and used; PAM is more of a
direction or philosophy than a practical tool. Along with PAM came a
whole new suite of library routines for processing both classic PNM
and PAM format images. The new "pam" routines are easier to use.
In June 2002, Bryan reorganized the package. Before, it was organized to
reflect the evolution of the package: first PBM only, then PGM was added,
then PPM, and then the multi-format PNM programs. There were four separate
subroutine libraries and each of the PBM, PGM, PPM, and PNM components was
independent of the components invented later. Documentation was in the form
of traditional man pages. In Release 10, the package was integrated into a
single monolithic package. There was one subroutine library and the source
tree was divided according to program function rather than what generation
of Netpbm it related to. All documentation was converted to HTML.
In January 2004, Netpbm started to get the linear/gamma-adjusted
sample value thing right. Many programs had always used the gamma
adjusted values from Netpbm images as if they were linear, which
produced incorrect and rather terrible results. Netpbm 10.20 brought
the pm_[un]gamma709() library routines and pnm_readpamrown() etc. for
manipulating Netpbm images in floating point 0..1 sample values, both
linear and gamma-adjusted.
In August 2006, Bryan revised the release strategy so as to have
three stabilizing branches (super stable, stable, and advanced)
instead of one (stable) in addition to a much more current
non-stabilizing branch (development), and distributed all of them via
Sourceforge's new Subversion source code control system. He
discontinued release via tarball except for the super stable version.
The point of this unconventional release mechanism was to reduce the
number of bugs in the current releases while minimizing work for
the maintainer. The last "advanced" release to have a tarball
was 10.34.
The person who contributed the most to Netpbm since its rebirth besides
Bryan is Akira F Urushibata. Akira's first contribution was a fix to fax
format converter pbmtog3 in 2004. His most notable subsequent
contributions were major speedups in the PBM processing code, using byte and
word processing where code previously worked on individual bits. He made
many PBM processors exploit special bit array manipulation instructions
(MMX/SSE).
At the end of 2012, Akira created the test facilities (found in
the test directory of the source tree, invoked by make check).
He has maintained them ever since and performed regular regression testing
of new code.
Programming language
Netpbm has always been written primarily in C. Netpbm code dates to a time
when ANSI C was brand new and consequently, the original code is written in
older C. Bryan made a point of converting it all to ANSI early on. Bryan
also steadily replaced signed integers with unsigned integers and used
constants instead of variables wherever possible.
About 2019, Netpbm officially loosened its requirement from original ANSI C
to C99, but there was probably lost of code already that used C99 features,
since nobody was trying to use a pre-C99 compiler.
Multiple Unix command shells, including C Shell were used in early Netpbm for
programs that invoke other programs. Bryan considered those obsolete when he
took over and did new programs like that in Perl and has converted most of the
original Bourne shell programs to Perl. The non-Bourne shells were eliminated
by about 2015. Bryan was new enough to Unix that he had not invested time
(and never really did) in learning Bourne Shell programming, learning Perl
instead.
By Bryan Henderson, San Jose, CA; bryanh@giraffe-data.com
last checked 2023.09.16.